2011-01-27 3 views
0

私はDirect3Dの専門家からの助けを求めています。率直に言って、私はHLSLからの本当に奇妙な行動によってナッツを得ています。それは私が行列を指定する方法です。D3D9 HLSL Matrixed My Brain

今、私の質問のD3DX 9つの機能:V」= Vの*のM //列の主要な

D3DXMatrixOrthoOffCenterRHなど...

彼らはこの形で使われているマトリックスを返しますまたはv '= M * v //行メジャー?

私はD3DXMatrixTrnaslateがメジャーの列にあることに気付きましたが、私はすべての機能について同じとみなします。

D3DXプロジェクトとアンプロジェクト関数は、上記の関数から返された同じ形式をとっていますか?

誰かがHLSL行列乗算から本当に狂気を経験したことがありますか?

ありがとうございました。

答えて

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 /行主要行列を使用すること)。

関連する問題