OpenGL For loop(随机月亮生成)
OpenGL For loop (Random moon generation)
我正在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();
}
这就是我想出的,但它似乎在一遍又一遍地创造月亮。它创建我指定的数量,但不断重新创建它们。有人有什么想法吗?
你应该在创建月亮时存储它们的位置,并在它们绕行星旋转时更新这个位置。
您的代码,正如它目前编写的那样,每次执行时都会创建一个随机翻译。
因此,为了简单起见,添加一个创建卫星的过程,一个更新卫星以围绕其行星旋转的过程(您可能已经有一段代码来处理围绕恒星旋转的代码?),然后渲染更新的太阳系。
在 for
-循环之前执行一个srand(0)
,以便每次都获得相同的随机数序列。
您可能应该创建一个结构或类,如下所示:
struct Moon
{
float x, y, z;
float rotAngle;
};
(让它像你需要的那样复杂)
创建所需数量的对象(使用array/list/...),在渲染循环之前初始化它们的值。
在渲染循环中,遍历所有这些对象,更新(如果需要?)并使用它们的值进行显示。
然而,它似乎在一遍又
一遍地绘制月亮。
FTFY。OpenGL不是一个场景图。您不会用它生成场景,该场景以某种方式存储在内部并按需呈现给用户。OpenGL是一个绘图API。如果你在动画循环中调用绘图代码,但总是使用一些新的随机参数进行绘制,事情就会跳来跳去。
解决方案:你需要一个场景图。在您的情况下,存储初始参数的简单列表就足够了。如果你想给它增添趣味,你也可以确定与给定质量的行星保持给定距离的正确轨道速度。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么 Serial.println(<char[]>);返回随机字符?
- 字符串-C++后显示的随机字符
- 循环中的随机函数
- 在c++构造函数中使用随机字符串生成器
- 使用std::mt19937从字符串中返回一个随机单词
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 如何在C++中高效地构造随机骰子
- 在类中使用随机生成器时出现性能问题
- 在将数字随机生成为数组期间从内存输出随机数的数组
- 将字符随机转换为大写的函数
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 如何生成一个随机的 n 位数,其中 n 是任意的
- 将随机生成的数字添加到数组 + 对这些数组求平均值
- 如何使用要传递给 mt19937 的可选随机种子参数设计函数
- 在C++中随机生成 20 个非重复数字
- GCC:随机构建导致执行期间分段错误
- 如何使用 SML 随机生成八进制元组
- 当我尝试使用它时,Scanf 会抛出一个随机异常(scanf_s 也是如此)
- OpenGL For loop(随机月亮生成)