我有一個正交投影,我嘗試從屏幕空間中取消投射一個點。DirectX不可預知的麻煩
以下是視圖和投影矩陣:
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);
這裏是我unproject一個點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(...)
? Unproject(...)
中參數minZ
和maxZ
有什麼意義?- 難道我通過
p.Z
在Unproject(...)
?
謝謝你的非常詳盡的答案! – thumbmunkeys