D3DXMatrices のベクトルの内容をシェーダーに使用したいと考えています。
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 がすべての変数をコピーしないのはなぜですか?