DirectX Clip Space Texture Coordinates

First I use:

  • DirectX 10
  • C ++

Well, this is a little strange for me, I would usually not ask a question, but circumstances forced me. I have two triangles (not a square for reasons that I will not enter!) In full screen mode, aligned on the screen through the fact that they do not convert.

In the DirectX vertex declaration, I pass a 3-component float (Pos x, y, z) and a 2-component float (Texcoord x, y). Texcoord z is reserved for texture2d arrays, which I currently default to 0 in the pixel shader.

I wrote this to achieve a simple task:

float fStartX = -1.0f;
float fEndX = 1.0f;
float fStartY = 1.0f;
float fEndY = -1.0f;
float fStartU = 0.0f;
float fEndU = 1.0f;
float fStartV = 0.0f;
float fEndV = 1.0f;
vmvUIVerts.push_back(CreateVertex(fStartX, fStartY, 0, fStartU, fStartV));
vmvUIVerts.push_back(CreateVertex(fEndX, fStartY, 0, fEndU, fStartV));
vmvUIVerts.push_back(CreateVertex(fEndX, fEndY, 0, fEndU, fEndV));
vmvUIVerts.push_back(CreateVertex(fStartX, fStartY, 0, fStartU, fStartV));
vmvUIVerts.push_back(CreateVertex(fEndX, fEndY, 0, fEndU, fEndV));
vmvUIVerts.push_back(CreateVertex(fStartX, fEndY, 0, fStartU, fEndV));

Layout IA: (Update)

D3D10_INPUT_ELEMENT_DESC ieDesc[2] = {
    { "POSITION",   0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 },
    { "TEXCOORD",   0, DXGI_FORMAT_R32G32B32_FLOAT, 0,12, D3D10_INPUT_PER_VERTEX_DATA, 0 }
};

The data reaches the vertex shader in the following format: (Update)

struct VS_INPUT
{ 
    float3 fPos          :POSITION;
    float3 fTexcoord     :TEXCOORD0;
}

, UV-. , , , 1 .

, : ()

sampler s0                      : register(s0);
Texture2DArray<float4> meshTex  : register(t0);
float4 psMain(in VS_OUTPUT vOut) : SV_TARGET
{
    float4 Color;
    vOut.fTexcoord.z = 0;
    vOut.fTexcoord.x = vOut.fPosObj.x * 0.5f;
    vOut.fTexcoord.y = vOut.fPosObj.y * 0.5f;
    vOut.fTexcoord.x += 0.5f;
    vOut.fTexcoord.y += 0.5f;
    Color = quadTex.Sample(s0, vOut.fTexcoord);
    Color.a = 1.0f;
    return Color;
}

, VS out, :

struct VS_OUTPUT
{
    float4 fPos          :POSITION0; // SV_POSITION wont work in this case
    float3 fTexcoord    :TEXCOORD0;
}

, , , UV , ?

, .

/ , , , - , ?

+5
2

, -, 0..1 . , , , - -1 +1, . , 0.0 1.0.

, , , x, y, z , ; . , "", - ;)

+1

? , ? D3DXVECTOR4, D3DXVECTOR3 ( VS), , CreateVertex() D3DXVECTOR3, D3DXVECTOR2. .

+1

All Articles