我正在为一个大学项目在OpenGL中创建一个3d太阳系,我已经到了必须生成卫星的地步。现在生成一个围绕行星运行的卫星已经很简单了,但我正在尝试创建一个循环,它将生成我告诉它的卫星数量,并且在行星周围的随机位置,所以所有卫星的轨道都是不同的。
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();
}
这就是我想出来的,然而它似乎在一次又一次地创造卫星。它创建我指定的数量,但不断地重新创建它们。有人有什么想法吗?
发布于 2012-11-21 00:10:52
你应该在创建月球时存储它们的位置,并在它们围绕其行星旋转时更新此位置。
您的代码,就像它当前编写的那样,将在每次执行时创建随机翻译。
因此,为了简单起见,添加一个创建卫星的过程,该过程更新卫星以绕其行星旋转(您可能已经有一段处理围绕恒星旋转的代码了?)然后渲染更新后的太阳系。
发布于 2012-11-21 01:22:31
在for
-loop之前执行srand(0)
,这样每次都会得到相同的随机数序列。
发布于 2012-11-21 01:42:10
您可能应该创建一个结构或类,如:
struct Moon
{
float x, y, z;
float rotAngle;
};
(让它变得像你需要的那样复杂)
创建所需数量的对象(使用array/list/...),在渲染循环之前初始化它们的值。
在渲染循环中,循环遍历所有这些对象,更新(如果需要?)并使用它们的值进行显示。
https://stackoverflow.com/questions/13477251
复制相似问题