libgdx:如何将触摸坐标转换为相机NEAR平面上的3D点?

时间:2014-10-27 20:20:11

标签: camera libgdx

我是libgdx NOOB - 如果这是一个显而易见的问题,请道歉......

使用libgdx我已经设置了一个Perspective相机,查看原点(相机接近= 1f,远= 300f)。视口扩展到整个屏幕。

基本上,我想知道如何将2D屏幕坐标(x,y)转换为3D世界坐标(x,y,z),其中Z值被夹紧到相机的 飞机附近。

我认为我应该使用camera.getPickRay方法获取屏幕坐标的拾取光线。然后我应该得到这条光线和相机近平面的交点,以获得近平面上点的世界坐标。

我认为生成的 Ray对象的 原点属性是我追求的近平面交点,但这似乎并不是是这样的。

我是在正确的轨道上吗?

1 个答案:

答案 0 :(得分:4)

Camera#unproject()根据z值返回near(z = 0)和far plane(z = 1)之间的值,请参阅javadocsCamera#getPickRay()origin成员设置为z = 0时未投影的值,因此在近平面上,请参阅code。如果您不需要光线(包括direction),那么您不必计算拾取光线,而是可以直接调用unproject方法。

Vector3 pointOnNearPlane = camera.unproject(new Vector3(touchX, touchY, 0f));

同样,对于远平面上的点:

Vector3 pointOnFarPlane = camera.unproject(new Vector3(touchX, touchY, 1f));