我有一个正交投影,我尝试从屏幕空间中取消投影一个点。
以下是视图和投影矩阵:
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);
这是我取消投影 Pointp
的方法,该点以屏幕像素为单位:
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
中的andmaxZ
参数有什么意义Unproject(...)
?p.Z
我通过什么重要Unproject(...)
吗?