Libgdx - 将2D地图坐标转换为3D空间坐标

时间:2015-12-15 19:36:08

标签: java android libgdx coordinate-systems perspectivecamera

我有一个物体在平面2D坐标系(0-1000,0-1000)中移动。

在3D空间坐标系中,我有一个球体和一个观察球体的相机。

然后,我想将这些2D坐标转换为3D世界/空间坐标,然后围绕球体表面移动此对象。因此,它基本上就像将Lat / Long转换为3D空间坐标。

目前我正在使用 setFromSpherical(),但也许我使用的方式不对。

Vector3 my3DVector = new Vector3(0,0,0);
my3DVector.setFromSpherical((float)Math.toRadians(azimuthAngle), (float)Math.toRadians(polarAngle)).

现在我对2个参数的理解如下:

  • 方位角是弧度,在0-2PI之间,实际上是LONGDITUDE
  • 极地角度为弧度,介于0-1PI之间,实际上是LATITUDE

由于我的2D网格(纬度/经度)网格大小为1000x1000,我计算方位角和极坐标,如下所示:

float azimuthAngle = (flatPos.X/1000) * 360;
float polarAngle = (flatPos.Y/1000) * 180;

这给出了2D网格值的标准化版本(方位角0-360度,极地0-180度),然后将其转换为Radians,并传递给 setFromSpherical()。目前,这是有效的,并且对象在3D球体的表面上移动,然而,当2D X值超过1000时,它回绕到0然后计算的3D Z值跳跃,因此对象跳转到另一侧。包裹在2D Y值中的对象可以正常工作......

有什么想法?感谢

0 个答案:

没有答案