我正在研究太阳系,我试图让行星地球绕太阳正常旋转。我可以让它绕着它的轴旋转,但我不能让它以正确的Angular 倾斜,如下图所示:
我可以倾斜我的行星,但当它旋转时,它卢什像这样(它没有“面向”同一个方向)
有什么想法我可以做什么?下面是我的代码:
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
//sun
glMaterialAmbientAndDiffuse(GLMaterialEnums::FRONT,GLColor<GLfloat,4>(1.5f,1.0f,0.0f));
glTranslate(0.0f, 0.0f, 0.0f);
glRotate(0.0, 0.0, 0.0, 00.0);
drawEllipsoid(10.0, 1.0, 4, 4);
//Earth
glRotate(orbit, 0.0, 0.0, 1.0);
glTranslate(30.0, 0.0, 0.0);
glPushMatrix();
glMaterialAmbientAndDiffuse(GLMaterialEnums::FRONT,GLColor<GLfloat,4>(0.5f,10.5f,10.5f));
glRotatef(110,0.0,23.0,110.0f);
glRotatef(orbit2, 0.0f, 0.0f,1.0f);
drawPlanetGrid(5, 1, 4, 4, 1);
glRotate(30.0, 0.0,0.0,0.0);
glTranslate(orbit2, 0.0, 0.0);
glPopMatrix();
orbit += .2;
if (orbit > 360)
{
orbit = 0;
}
orbit2 += 6.5;
if (orbit2 > 360)
{
orbit2 = 0;
}
对不起,代码没有注解。我只是在试验它。
2条答案
按热度按时间q9rjltbz1#
太阳和地球之间的关系并不像手臂和肘部那样是层次关系。它们是独立的对象。因此,您应该手动计算地球的位置,而不是使用嵌套矩阵。您可以使用简单的三角函数来计算:
平移到该点后,可以使用
glRotate()
以与之前相同的方式倾斜地球,但这次变换将不受地球位置的影响。最后,您的程式码应该看起来像这样:
but5z9lq2#
我知道这是一个古老的问题,但我有同样的问题,这是第一个结果。我相信它可以做'嵌套'矩阵作为操作员试图做的。
对于地球,或者任何行星来说:
我用这段代码(坐标系的方向不同)制作了一个绘制(或打印)行星和恒星位置的程序。它大致(足够好的动画)匹配NASA地平线系统(NASA地平线网络界面)的输出,以及匹配网络上其他“活”太阳系图表-Solar System calculator,In-the-Sky。