2

これは私を夢中にさせています!どんな助けでも大歓迎です。

画面に描画される 3D モデルがあります。これは間違いなく機能し、モデルは画面の境界内にあります。いくつかの頂点の CPU 上の画面座標を計算したいと考えています。

これを行うには、頂点シェーダーと同じ方法で、これらの頂点の位置をモデル/ビュー/投影マトリックスで乗算します。

XMVECTOR pos = XMVectorSet(input.x, input.y, input.z, 1);
pos = XMVector3Transform(pos, XMLoadFloat4x4(&m_constantBufferData.model));
pos = XMVector3Transform(pos, XMLoadFloat4x4(&m_constantBufferData.view));
pos = XMVector3Transform(pos, XMLoadFloat4x4(&m_constantBufferData.projection));

次に、pos.X と pos.Y を pos.Z で割ります。

pos の結果をどのように解釈しますか? X 座標と Y 座標が 0 から 1、または -1 から 1 の間にあることを期待していましたが、-3 などの数値を取得しています。私は何か間違ったことをしていますか?

記録として、これは頂点シェーダーの一部です。

float4 pos = float4(input.pos, 1.0f);
pos = mul(pos, model);
pos = mul(pos, view);
pos = mul(pos, projection);
output.pos = pos;

助けてくれてありがとう!:)

4

2 に答える 2

0

ではなくwコンポーネントで割る必要があります。z

float3 clipPosition = affineClipPosition.xyz / affineClipPosition.w;

変換マトリックスが有効であり、正しい順序で適用されている場合、コンポーネントは から までの範囲内にあり、コンポーネントは から までの間にxyあるはずです。-11z01


于 2013-02-09T12:55:14.687 に答える