在 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。因此沿轨道上的点可以通过三角函数sin
和cos
来计算定义一个中心点(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();
我目前正在制作太阳系模型。我有一个围绕太阳运行的行星。这是星球:
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。因此沿轨道上的点可以通过三角函数sin
和cos
来计算定义一个中心点(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();