我正在尝试制作骨骼动画,但在将数据传递给着色器时遇到了问题。 我正在调试着色器,似乎我没有正确获取 BONEINDICES 数组。请查看我的代码,如果您发现任何错误,请告诉我。
这是我的顶点结构:
struct Vertex {
DirectX::XMFLOAT3 Position;
DirectX::XMFLOAT2 TexCoords;
DirectX::XMFLOAT3 Normal;
DirectX::XMFLOAT3 Tangent;
DirectX::XMFLOAT3 Bitangent;
int m_BoneIDs[4];
float m_Weights[4];
};
这是着色器输入布局
D3D11_INPUT_ELEMENT_DESC layout[] =
{
{"POSITION", 0, DXGI_FORMAT::DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_CLASSIFICATION::D3D11_INPUT_PER_VERTEX_DATA, 0 },
{"TEXCOORD", 0, DXGI_FORMAT::DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_CLASSIFICATION::D3D11_INPUT_PER_VERTEX_DATA, 0 },
{"NORMAL", 0, DXGI_FORMAT::DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_CLASSIFICATION::D3D11_INPUT_PER_VERTEX_DATA, 0 },
{"TANGENT", 0, DXGI_FORMAT::DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_CLASSIFICATION::D3D11_INPUT_PER_VERTEX_DATA, 0 },
{"BITANGENT", 0, DXGI_FORMAT::DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_CLASSIFICATION::D3D11_INPUT_PER_VERTEX_DATA, 0 },
{"BONEINDICES", 0, DXGI_FORMAT::DXGI_FORMAT_R32G32B32A32_UINT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_CLASSIFICATION::D3D11_INPUT_PER_VERTEX_DATA, 0 },
{"WEIGHTS", 0, DXGI_FORMAT::DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_CLASSIFICATION::D3D11_INPUT_PER_VERTEX_DATA, 0 },
};
这是我在 hlsl 着色器中获取数据的方式
struct VS_INPUT
{
float3 inPos : POSITION;
float2 inTexCoord : TEXCOORD;
float3 inNormal : NORMAL;
float3 inTangent : TANGENT;
float3 inBitangent : BITANGENT;
uint4 inBoneIds : BONEINDICES;
float4 inWeights : WEIGHTS;
};
有人看一下,让我知道 D3D11_INPUT_ELEMENT_DESC 和 VS_INPUT 看起来是否正确。