[英]OpenGL: Rotate around a point in 3D space
我一直在通过类似的问题做一些寻找,但一直无法找到我想要的东西。
我试图围绕(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)。
与其在行星前方旋转,不如在行星周围旋转。
我做错了什么吗?
非常感谢您的宝贵时间。
编辑:我假设我需要根据月球的偏移量将每个轴旋转某个组件。 我不太确定应该如何计算这样的分量。
我假设您想绕地球以及绕其中心点旋转月球。 要达到此目的:
首先对月亮应用旋转(它将绕其中心旋转)
用(月亮-行星)距离平移月亮
再次旋转月球,这种旋转将成为月球绕地球旋转。
用行星坐标平移月球。 您可以找到用于计算行星位置的公式: https : //en.wikipedia.org/wiki/Spherical_coordinate_system#Cartesian_coordinates
我认为还有一个类似的问题: 在opengl中围绕固定点旋转对象
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.