我是libgdx NOOB - 如果这是一个显而易见的问题,请道歉......
使用libgdx我已经设置了一个Perspective相机,查看原点(相机接近= 1f,远= 300f)。视口扩展到整个屏幕。
基本上,我想知道如何将2D屏幕坐标(x,y)转换为3D世界坐标(x,y,z),其中Z值被夹紧到相机的 飞机附近。
我认为我应该使用camera.getPickRay方法获取屏幕坐标的拾取光线。然后我应该得到这条光线和相机近平面的交点,以获得近平面上点的世界坐标。
我认为生成的 Ray对象的 原点属性是我追求的近平面交点,但这似乎并不是是这样的。
我是在正确的轨道上吗?
答案 0 :(得分:4)
Camera#unproject()根据z值返回near(z = 0)和far plane(z = 1)之间的值,请参阅javadocs。 Camera#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));