我一直在做一些类似问题的狩猎,但却找不到我想要的东西。
我正在尝试围绕(0,0,0)旋转对象,无论其x,y和z偏移如何。
举一个例子,考虑以下相关情况:
我有一个围绕以(0,0,0)为中心的行星旋转的月球。月亮的初始偏移量为(1,1,1)。我想在每个框架周围旋转月球和其他卫星。
为了做到这一点,我开始使用以下代码:
for (GMoon moon : moonList)
{
Point offset = moon.getOffset();
float newRot = moon.getRotation() + moon.getRotSpeed();
moon.setRotation(newRot);
// Return to the identity matrix
gl.glLoadIdentity();
// Translate and rotate the planet
gl.glTranslatef(0.0f, 0.0f, OBJECT_DISTANCE);
gl.glRotatef(newRot, 0, 0, 1);
gl.glTranslatef(offset.getX(), offset.getY(), offset.getZ());
// Draw the moon
moon.draw(gl);
}
(OBJECT_DISTANCE等于-10用于查看目的)。
不是在行星前面旋转,而是围绕行星旋转。
我做错了什么?
非常感谢你的时间。
编辑:我假设我需要根据月球的偏移将每个轴旋转一个特定的组件。我不太确定应该如何计算这样的组件。
答案 0 :(得分:0)
我假设你想围绕地球以及它周围的中心点旋转月球。达到这个目的:
首先将旋转应用于月球(这将围绕它的中心点旋转)
用(月球 - 行星)距离翻译月球
再次旋转月球,这个旋转将成为月球围绕行星的旋转。
用行星的坐标翻译月球。您可以找到计算行星位置的公式:https://en.wikipedia.org/wiki/Spherical_coordinate_system#Cartesian_coordinates
我认为还有类似的问题: Rotating an object around a fixed point in opengl