OpenGl旋转和对象移动

时间:2012-11-18 20:11:38

标签: java opengl jogl

我正在尝试创建一个非常基本的行星运动(太阳,地球月亮表示为立方体)。

至于现在,我设法将一个立方体移动到另一个立方体,但我有以下问题......在已经移动的那个周围移动另一个立方体(例如月亮)的最佳方法是什么?

我使用简单的操作ex。在x轴上移动:

d * Math.sin(x * Math.PI / 180.0)

其中d是距离中心或投影的距离(不知道我是否使用了这个术语)。 我想通过计算已经旋转的立方体的距离并添加一些参数来放置“卫星”,但不知道如何使该行星成为旋转中心的“参考”......

1 个答案:

答案 0 :(得分:3)

您可以通过创建转换组合来完成此操作。假设你想围绕中心恒星绕行星运行。首先,行星进入轨道,即x方向的平移:

orbit_distance = translation_orbit · planet_center

然后围绕中心旋转。

orbit_position = rotation_orbit · orbit_distance

或者,你可以写一行

orbit_position = rotation_orbit · translation_orbit · planet_center

重要的是,操作顺序重要,首先旋转然后平移与首先翻译然后旋转不同。或者,在数学术语中,几何变换不是可交换的。

在三维空间中,所有线性变换可以通过4维同构坐标集中的线性方程来描述。即你可以使用4×4矩阵来表达各种线性几何变换。

旋转绕着绕太阳旋转的行星的旋转月亮:

R_orbit_planet · T_orbit_planet · R_orbit_moon · T_orbit_moon · R_rotation_moon