シェーダの変換マトリックスにベクトルを直接乗せようとしています。 HLSLのmul
ドキュメントによると:HLSL mulとD3DXMATRIXのオーダーの不一致
mul(x, y)
乗算x
とy
行列演算を使用して。内部次元x列とy行は等しくなければなりません。
x [in]
x
入力値。x
がベクターの場合は、行 として扱います。
y [in]
y
入力値。y
がベクターの場合は、 ベクターの列として扱います。
Iは、C++コードを持っている:modelViewProjection
が一定のバッファにコピーされる行優先順序行列で
const D3DXMATRIX viewProjection = view * projection;
...
const D3DXMATRIX modelViewProjection = model * viewProjection;
は、転置されません。 mul
ドキュメントが言っていることの反対である
output.position = mul(transformation, position);
:しかし、これは私がように位置ベクトルとの変換行列を乗算する必要がHLSLで作業するため。
誰かが不一致をここで説明できますか?
ありがとうございました!私はこのディレクティブ['#pragma pack_matrix(row_major)'](https://msdn.microsoft.com/en-us/library/windows/desktop/dd607354(v = vs.85).aspx)と['D3DCOMPILE_PACK_MATRIX_ROW_MAJOR '](https://msdn.microsoft.com/en-us/library/windows/desktop/gg615083(v = vs.85).aspx)コンパイラ定数。しかし、注文を変更する効率についての参考資料はありますか?私は生成されたバイトコードを調べましたが、唯一の違いはいくつかの 'dcl_temps'([details](https://gist.github.com/anonymous/57b59374f51e29de928a2cb5bd3ae044)の使用です)。 – user367035