C++ SetMatrix()不会将所有值复制到HLSL
我想将D3DX矩阵向量的内容用于我的着色器C++ SetMatrix()不会将所有值复制到HLSL,c++,directx,hlsl,C++,Directx,Hlsl,我想将D3DX矩阵向量的内容用于我的着色器 m_pLightMatrices->SetMatrixArray(¤tLightMatrices[0].m[0][0],0,numLights); 正如我们所知,向量的内部结构不会带来任何问题(因为它只是一个动态数组) 现在,当我在hlsl中访问这个矩阵来填充结构时,我得到了一个奇怪的行为: struct LightTest { float3 LightPos; float LightRange; float4 L
m_pLightMatrices->SetMatrixArray(¤tLightMatrices[0].m[0][0],0,numLights);
正如我们所知,向量的内部结构不会带来任何问题(因为它只是一个动态数组)
现在,当我在hlsl中访问这个矩阵来填充结构时,我得到了一个奇怪的行为:
struct LightTest
{
float3 LightPos;
float LightRange;
float4 LightDiffuse;
float3 LightAtt;
};
float4x4 currentLight = gLights[0];
LightTest lt;
lt.LightPos = currentLight._m00_m01_m02; //{0,0,0}
lt.LightDiffuse = currentLight[1].rgba; //{0,0,0,0}
lt.LightRange = currentLight._m03; //this gives me a value
lt.LightAtt = currentLight[2].xyz; //{0,0,0}
调试时,我发现我的矩阵中充满了我想要的变量。
当我尝试硬编码检查结构中的内容时,除了LightRange之外,我得到了所有的零
正如您所见,我尝试了访问float4x4的不同方法,但没有任何其他结果
为什么hlsl没有复制我所有的变量?我设法解决了这个问题。我确实需要澄清一下为什么它现在起作用 我只是在设置输入布局之前放置了SetMatrixArray()函数,突然间它就完美地工作了
以前,它与所有其他变量(如世界矩阵等)一起位于更新函数中,这些变量工作正常。在某些情况下,需要调用CommitChanges才能更新到HLSL
而且,这样做真的是一种罪恶。你试过分别发送向量等吗?邪恶?先生,你让我高兴极了!我只是匆匆忙忙,因为我的自定义结构也不起作用。我想只是单独发送向量,但这太麻烦了。幸运的是,我可以使用普通结构将数据传输到hlsl,而不是这种矩阵黑客。