正射投影を使用しており、スクリーン スペースから点を投影解除しようとしています。
ビュー行列と射影行列は次のとおりです。
var w2 = ScreenWidthInPixels/2;
var h2 = ScreenHeightInPixels/2;
view = Matrix.LookAtLH(new Vector3(0, 0, -1), new Vector3(0, 0, 0),
Vector3.UnitY);
proj = Matrix.OrthoOffCenterLH(-w2, w2, -h2, h2, 0.1f, 10f);
Point を非投影にする方法p
は次のとおりです。ポイントは画面ピクセルで指定されます。
var m = Vector3.Unproject(p, 0, 0, ScreenWidthInPixels, ScreenHeightInPixels,
0.1f, 10f, // znear and zfar
view *proj);
コードが機能しません。マトリックスm
には のみが含まれていNan
ます。反転しようとするview * proj
と、ゼロのみのマトリックスが返されます。
したがって、私の問題は正投影行列と関係があると思われます。
ここに私の質問があります:
- この問題は、OrthoOffCenterLH プロジェクションの値が大きいためにアンダーフローが発生した可能性がありますか?
x,y,width,height
で渡す必要があるパラメーターは何Unproject(...)
ですか?minZ
パラメータとmaxZ
パラメータにはどのような意味がありますUnproject(...)
か?- で何を渡すかは重要
p.Z
ですUnproject(...)
か?