我有一个物体在平面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个参数的理解如下:
由于我的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值中的对象可以正常工作......
有什么想法?感谢