0
正如標題所示,我有一個項目在由單個矢量定義的對象空間中具有特定位置。如何從物體空間位置獲得近平面上的攝像機空間位置
我想檢索這個向量在近剪裁平面上投影的相機空間座標。
換句話說,我需要在這個向量和由z座標定義的平面之間的相機空間中的交點等於-1(我的近平面)。
編輯用鼠標線性移動對象:現在我從物體空間再往窗口空間,然後從那裏到攝像機空間通過設置窗口深度窗口.z等於0,那就是近平面。
請注意,以獲得從unProject相機的空間,我只是通過在作爲模型視圖矩陣單位矩陣new Mat4(1f)
:
public Vec3 getCameraSpacePositionOnNearPlane(Vec2i mousePoint) {
int[] viewport = new int[]{0, 0, glViewer.getGlWindow().getWidth(), glViewer.getGlWindow().getHeight()};
Vec3 window = new Vec3();
window.x = mousePoint.x;
window.y = viewport[3] - mousePoint.y - 1;
window.z = 0;
return Jglm.unProject(window, new Mat4(1f), glViewer.getVehicleCameraToClipMatrix(), new Vec4(viewport));
}
有沒有更好的辦法(更有效)得到它沒有延續到窗口空間並回到相機之一?
您好,我想請您詳細說明第二種方法嗎?我乘了我的模型空間位置 - >世界空間 - >相機空間 - >剪輯空間。然後clip.z = -clip.w然後我乘以逆向proj,但它看起來不對.. – elect 2014-09-15 06:56:01
那麼,你應該得到的眼睛空間位置回來。但是在同類座標系中,所以你可能必須用得到的'w'來分解結果'xyz',以得到你期望的3D笛卡爾座標。 – derhass 2014-09-15 15:36:46