首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenGL For loop (随机月亮生成)

OpenGL For loop (随机月亮生成)
EN

Stack Overflow用户
提问于 2012-11-21 00:07:17
回答 3查看 1.4K关注 0票数 0

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

代码语言:javascript
运行
复制
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();
}

这就是我想出来的,然而它似乎在一次又一次地创造卫星。它创建我指定的数量,但不断地重新创建它们。有人有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2012-11-21 00:10:52

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

您的代码,就像它当前编写的那样,将在每次执行时创建随机翻译。

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

票数 3
EN

Stack Overflow用户

发布于 2012-11-21 01:22:31

for-loop之前执行srand(0),这样每次都会得到相同的随机数序列。

票数 0
EN

Stack Overflow用户

发布于 2012-11-21 01:42:10

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

代码语言:javascript
运行
复制
struct Moon
{
    float x, y, z;
    float rotAngle;
};

(让它变得像你需要的那样复杂)

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13477251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档