我正在尝试为使用C ++和SDL的游戏生成滚动星空。我正在使用一种简单,天真的算法,它只能在黑色背景上创建大量白色像素。然而,这个“星空”看起来太不自然了 - 可能是因为随机数生成器的质量很差(我使用rand()函数)。
是否有任何特殊算法可用于生成看起来或多或少逼真的星空?
感谢。
答案 0 :(得分:3)
总是this经典。亮点:
[...]想象星星是3D空间中的点,它们都沿着Z轴向观察者移动。在每个时间步,星星的3D坐标将被投影到屏幕上并显示。
为了获得更平滑的效果,我们可以在它们第一次出现时使星星变黑(这样你就不会注意到它们),然后在它们靠近时变亮。
有两种方式可以模仿浩瀚的感觉。首先是简单地模拟一个巨大的空间区域,至少可以说这是不切实际的。第二是让恒星以一定的速度移动。
答案 1 :(得分:1)
前段时间我发现this useful tutorial创造了一个“逼真”的明星场。它不是C ++,但是一旦你明白了它就应该很容易适应。
答案 2 :(得分:1)
你可以使用Lloyd's algorithm来放松随机点并使它们成为半随机点。我在map generator中读到了这个想法,但它也可以用来创建最终分布的星形场。
答案 3 :(得分:0)
你可能不希望它真正随机。当你真的想要散布各个像素时,你最终会在某些地方出现像素斑点。你最好的选择可能是编写一个较小的部分,然后反复重复以获得完整的星空外观。