gpt4 book ai didi

c++ - 地球倾斜 openGL c++

转载 作者:太空狗 更新时间:2023-10-29 21:24:14 25 4
gpt4 key购买 nike

我正在研究太阳系,我正在努力让地球绕着太阳正常旋转。我可以让它绕着它的轴绕轨道旋转,但我不能让它以正确的角度倾斜,如下图所示: enter image description here

我可以倾斜我的星球,但它绕圈时会像这样(它不会“面向”相同的方向)

enter image description here 任何想法我可以做什么?这是我的代码:

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;
}

抱歉代码没有注释。我只是在试验它。

最佳答案

太阳和地球之间的关系并不像 ARM 和肘部那样具有等级关系。它们是独立的对象。因此,您不应使用嵌套矩阵,而应手动计算地球的位置。您可以使用简单的三角函数来做到这一点:

earth_x = 30.0 * cos(orbit / 180.0 * PI)
earth_y = 30.0 * sin(orbit / 180.0 * PI)

转换到这一点后,您可以使用 glRotate() 以与之前相同的方式倾斜地球,但这次转换不会受到地球位置的影响。

最后,您的代码应如下所示:

drawTheSun();

glPushMatrix(); // enter the Earth's frame of reference
glTranslate(earth_x, earth_y, 0.0);
glRotate(110,0.0,23.0,110.0f); // tilt however you wanna tilt
drawTheEarth();
glPopMatrix(); // exit the Earth's frame of reference

关于c++ - 地球倾斜 openGL c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16593758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com