在 OpenGL 中绘制行星轨道试验

Drawing orbit trial for a planet in OpenGL

我目前正在制作太阳系模型。我有一个围绕太阳运行的行星。这是星球:

    glPushMatrix();
    glColor3f(1.0, 0.0, 0.0);
    glRotatef(theta * 10, 0.0, 1.0, 0.0);
    glTranslatef(P1[0], P1[1], P1[2]);
    gluSphere(quad, 0.05, 100, 20);
    glPopMatrix();
        

现在,我想在行星运行的地方精确地围绕太阳画一个试验。我该怎么做呢?我应该使用 GL_LINES 来绘制它。到目前为止我已经得到了这个,但我没有得到想要的结果。圆形路径与行星的自转轨道不完全相同

    glBegin(GL_LINES);
    for (float i = 0; i < 2 * PI; i += 0.01)
    {
        float x = P1[0] * cos(i) + 0.0;
        float y = 0.0;
        float z = P1[2] * sin(i) + 0.0;
        glVertex3f(x, y, z);
    }
    glEnd();

根据行星的信息,如何画出它的轨道试验?

如果行星沿着圆形轨道运行,您需要知道圆心、半径和自转轴。在您的例子中,旋转轴是 y-axis。因此沿轨道上的点可以通过三角函数sincos来计算定义一个中心点(float CPT[3])和一个半径(float radius)。使用Line primitive类型GL_LINE_LOOP绘制圆形轨道:

glBegin(GL_LINES);
for (float angle = 0; i < 2 * PI; angle += 0.01)
{
    float x = CPT[0] + cos(angle) * radius;
    float y = CPT[1];
    float z = CPT[2] + sin(angle) * radius;
    glVertex3f(x, y, z);
}
glEnd();