我正在尝试围绕我的世界中的模型以球形运动方式移动我的相机。我已经看到将球坐标(rho,theta,phi)转换为笛卡尔坐标(x,y,z),但我不确定如何进行设置。到目前为止,这是我尝试过的,但它并没有持续围绕模型运行。它到达某个点,然后旋转似乎会自行反转。
初始化theta
和phi
:
private float theta = 0.0f;
private float phi = 0.0f;
更新theta
和phi
每一帧:
// This should move the camera toward the upper-right continuously, correct?
theta = (theta+1.0f)%360;
phi = (phi+1.0f)%360;
转换theta
和phi
为相机的笛卡尔坐标:
camera.position.x = CAMERA_DISTANCE * (float)Math.sin(theta*MathHelper.PIOVER180) * (float)Math.cos(phi*MathHelper.PIOVER180);
camera.position.y = CAMERA_DISTANCE * (float)Math.sin(theta*MathHelper.PIOVER180) * (float)Math.sin(phi*MathHelper.PIOVER180);
camera.position.z = CAMERA_DISTANCE * (float)Math.cos(theta*MathHelper.PIOVER180);
然后更新相机查看点和视图矩阵:
camera.lookAt(0, 0, 0);
camera.update();
注意:
我在带有 libGDX 框架的 Android 上使用 Java,我正在尝试使用 2D 屏幕虚拟操纵杆来控制旋转,但我仍然需要找到一种方法将操纵杆映射到theta
和phi
.
任何帮助是极大的赞赏!