OpenGL For循环(随机月亮生成)

时间:2012-11-20 16:07:17

标签: c++ opengl

我正在OpenGL中为大学项目创建一个3D太阳系,我已经到了必须产生卫星的地步。现在生成绕行星运行的月球很简单,但我正在尝试创建一个循环,它将产生我告诉它的卫星量,并且在行星周围的随机位置,所以它们的轨道是不同的。 / p>

for(int count = 0; count < 5; count ++)
{
    glPushMatrix();
    glEnable(GL_LIGHTING);
    glTranslated (rand() % 8+8, 0.0, 0.0); //FIRST 
    glRotated((GLdouble) spin, 1.0, 70, 0.0);
    glutSolidSphere(0.8, 20, 10);
    glPopMatrix();
}

这就是我想出来的,但它似乎一遍又一遍地创造了卫星。它创建我指定的数量但不断重新创建它们。有人有任何想法吗?

4 个答案:

答案 0 :(得分:3)

您应该在创建月球时存储月球的位置,并在它们绕行星旋转时更新此位置。

您的代码,正如它当前编写的那样,每次执行时都会创建一个随机翻译。

所以为了简单起见,添加一个创建卫星的过程,一个更新卫星绕行星旋转的过程(你可能已经有一段代码可以处理围绕恒星的旋转?)然后渲染更新的太阳系

答案 1 :(得分:0)

srand(0)循环之前执行for,以便每次都获得相同的随机数序列。

答案 2 :(得分:0)

您应该创建一个结构或类,如:

struct Moon
{
    float x, y, z;
    float rotAngle;
};

让它变得如你所需要的那样复杂

创建所需数量的对象(使用array / list / ...),在渲染循环之前初始化它们的值。

在渲染循环中,循环遍历所有这些对象,更新(,如果需要?)并使用它们的值显示。

答案 3 :(得分:0)

  

然而,似乎是一遍又一遍地创建 绘制卫星。

FTFY。 OpenGL 不是场景图。您不会生成带有它的场景,它以某种方式存储在内部并按需呈现给用户。 OpenGL是一个绘图 API。如果你在动画循环中调用绘图代码,但总是使用一些新的随机参数绘制,那么事情就会跳转。

解决方案:您需要一个场景图。在您的情况下,存储初始参数的简单列表就足够了。如果你想调整它,你也可以确定给定质量的行星给定距离的正确轨道速度。