将 NORMAL 添加到 inputLayout 时出错

Error when adding NORMAL to the inputLayout

我正在尝试将 NORMAL 矢量添加到 inputLayout 中,但是当我添加这一行时,我遇到了这个错误:

D3D11 ERROR: ID3D11Device::CreateInputLayout: The provided input signature expects to read an element with SemanticName/Index: 'NORMAL'/0, but the declaration doesn't provide a matching name. [ STATE_CREATION ERROR #163: CREATEINPUTLAYOUT_MISSINGELEMENT]

这是我设置 InputLayout 的地方:

 {"POSITION",0,DXGI_FORMAT::DXGI_FORMAT_R32G32B32_FLOAT,0,0,D3D11_INPUT_CLASSIFICATION::D3D11_INPUT_PER_VERTEX_DATA,0},
    {"NORMAL",0, DXGI_FORMAT_R32G32B32_FLOAT,0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0},
    {"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0},

这是顶点着色器:

struct VSinput
{
float3 pos : POSITION;
float2 textCoord : TEXCOORD0;
float3 test : NORMAL0;
};

struct PSinput
{
float4 position : SV_Position;
float2 textCoord : TEXCOORD0;
float3 test : NORMAL0;
 };

 PSinput vs_main(VSinput input)
 {
  PSinput output = (PSinput) 0;

 // input.pos.y += Yoffset;
  output.position = mul(float4(input.pos, 1.0),mat);

  output.textCoord = input.textCoord;



  return output;


}

如您所见,有一个输入具有 NORMAL SemanticName 和索引 0

由于着色器链接规则,您无法在 Direct3D 10 或更高版本中更改布局顺序。

要么让你的着色器使用:

struct VSinput
{
float3 pos : POSITION;
float3 test : NORMAL0;
float2 textCoord : TEXCOORD0;
};

-或者- 使您的输入布局使用:

{"POSITION",0,DXGI_FORMAT::DXGI_FORMAT_R32G32B32_FLOAT,0,0,D3D11_INPUT_PER_VERTEX_DATA,0},
{"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"NORMAL",0, DXGI_FORMAT_R32G32B32_FLOAT,0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0},