我一直在試圖找出這種關係,但我不能,也許我只是沒有尋找正確的東西。如果我使用Vector3.Project投影世界空間座標來裁剪空間,則X和Y座標有意義,但我無法弄清楚它是如何計算Z(0..1)座標的。例如,如果我的近平面爲1,遠平面爲1000,則我將(0,0,500)的Vector3(相機中心,距離平面的距離的50%)投影到我獲得的屏幕空間(1050,500,.9994785)Direct3D中投影和未投影的Z值之間的關係
產生的X和Y座標是非常有意義的,但我不明白它在哪裏得到Z值。
我需要這個,因爲我實際上是在嘗試UNPROJECT屏幕空間座標,我需要能夠選擇一個Z值來告訴它距相機的距離我想要世界空間座標,但是我不明白剪輯空間Z(0-1)和世界空間Z(近平面 - 遠平面)之間的關係。
在情況下,這可幫助,我的變換矩陣是:
World = Matrix.Identity;
//basically centered at 0,0,0 looking into the screen
View = Matrix.LookAtLH(
new Vector3(0,0,0), //camera position
new Vector3(0,0,1), //look target
new Vector3(0,1,0)); //up vector
Projection = Matrix.PerspectiveFovLH(
(float)(Math.PI/4), //FieldOfViewY
1.6f, // AspectRatio
1, //NearPlane
1000); //FarPlane
謝謝!我最終解決了一個黑客,但這會讓我做對了。 – HypnoToad