0

Direct3D の専門家の皆さんに助けを求めています。率直に言って、私は HLSL の非常に奇妙な振る舞いに頭がおかしくなっています。それは私が行列を指定する方法です。

今私の質問 D3DX 9 関数:

D3DXMatrixOrthoOffCenterRH など...

次の形式で使用される行列を返しますか: v' = v * M // 列メジャー

または v' = M * v // 行メジャー ???

D3DXMatrixTrnaslate が列メジャーであることに気付き、すべての関数で同じであると想定しています。

D3DX の Project および Unproject 関数は、上記の関数によって返されるのと同じ形式をとりますか?

HLSL 行列の乗算で本当にクレイジーな経験をした人はいますか?

ありがとう。

4

1 に答える 1

0

これは簡単に説明します。RH 関数は、列優先 (http://en.wikipedia.org/wiki/Column_vector、参考文献) 行列を返し、HLSL (または適切に最適化されたアセンブリ) シェーダーの選択のレイアウトではありません。内積を使用したベクトルの 3D 変換。したがって、シェーダー定数メモリにアップロードする前に、LH または行優先 (実際には V'= M * V) レイアウトを使用するか、少なくとも転置してください。

実際の例については、DirectX のドキュメントを参照してください。D3DXMatrixLookAtLH() および D3DXMatrixLookAtRH() を参照してください。そのページでは、行列のレイアウトが示されています。レイアウトを比較して、各行を X、Y、Z、1 ベクトルで dot4'ing すると、それぞれ X、Y、Z、および W のアフィン変換が実行される理由を確認できます ( LH/row-major 行列を使用すること)。

于 2011-07-14T15:13:46.890 に答える