0

D3D11 を試していますが、モデルを正しくレンダリングするのに苦労しています。

これが私の問題です。私の世界とビューの変換は正しいように見えますが
、視点の変換は間違っているようです。
最初にモデルをレンダリングしたとき、何か違和感を感じたので、モデルを回転させてみました。
すると、モデルのカメラに近い部分が小さく見え、遠くの部分が大きく見えることに気付きました。

関連する場合は、 assimp を使用してモデルをロードしています。その方法は次のとおりです。

mScene = aiImportFile(filename.c_str(), aiProcessPreset_TargetRealtime_MaxQuality | aiProcess_GenSmoothNormals | aiProcess_ConvertToLeftHanded | aiProcess_TransformUVCoords);

そして、これが私の射影行列を構築する方法です。

mProjection = XMMatrixPerspectiveFovLH(XMConvertToRadians(45.0f), 800.0f / 600.0f, -1.0f, 1.0f);

XMMatrixPerspectiveFovLH の nearZ および farZ 引数をいじりました。
フレームごとに farZ を徐々に増やしてみたところ、値が大きくなるにつれてファー クリッピング プレーンがカメラにどんどん近づいていくことがわかりました。

頂点シェーダーでは、頂点位置を使って次のことを行っています。それはかなり基本的です。

Out.Position = mul(mul(mul(position, World), CameraView), CameraProjection);

モデルは、位置、スケーリング、回転、およびビュー位置に関して正しくレンダリングされます。
したがって、ワールドとビューの変換は問題なく、問題は射影行列に関するものであると想定しています。
要約すると、投影された頂点の Z 値は、どういうわけか「反転」していると考えています。

グーグルで何度も検索しましたが、役に立ちませんでした。

誰かが私が間違っている可能性があることを指摘できれば、それは非常にありがたいです.
私のコードの一部を参照する必要がある場合は、教えてください。

4

1 に答える 1

1

ニアプレーンとファープレーンの距離は正でなければなりません。

次のようなものを使用します。

mProjection = XMMatrixPerspectiveFovLH(XMConvertToRadians(45.0f), 800.0f / 600.0f, 0.1f, 10.0f);

assert( NearZ > 0.f); assert( NearZ < FarZ );これらの DirectXMath 関数への追加を検討し、それがドキュメントで明示されていることを確認するようにメモします。ここでの距離は正の数を意味します。

PS: DirectX Tool Kitを参照してください。

于 2015-01-28T16:17:43.707 に答える