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