目录
1、DX与HLSL的矩阵
DX的矩阵(DirectX::XMMATRIX)按照行主元优先存储,而HLSL的矩阵默认按照列主元优先存储。解决这个问题的方法有两种
1)将DirectX的矩阵转置
DirectX::XMMATRIX m_matrix;
...
DirectX::XMMatrixTranspose(m_matrix);
2)在HLSL中用 row_major声明矩阵
cbuffer Cbuffer0: register(b0)
{
row_major matrix mWorld; // HLSL里,没有 row_major 修饰的话矩阵是用列主元优先存储的
}
我更喜欢做法2
2、创建常量缓冲区的尺寸需要按照16字节对齐
创建常量缓冲区的时候需要填充 D3D11_BUFFER_DESC 结构体,其中ByteWidth属性表示缓冲区的大小,这个属性应该为16的整数倍,否则缓冲区会创建失败