如标题所示,我有一个项目在对象空间中的特定位置由单个向量定义。
我想检索该向量在近剪裁平面上的投影在相机空间中的坐标。
换句话说,我需要这个向量和z坐标定义的平面之间的相机空间交点等于-1(我的近平面)。
我需要它来用鼠标在透视投影中线性移动对象
编辑:现在我从对象空间到窗口空间,然后通过将窗口深度 window.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));
}
有没有更好的方法(更有效)来获得它而无需进入窗口空间并返回相机?