【问题标题】:Generating a Nice Looking Starfield Pattern生成漂亮的星空模式
【发布时间】:2016-08-13 09:41:34
【问题描述】:

我正在尝试为使用 C++ 和 SDL 的游戏生成滚动星空。我正在使用一种简单、朴素的算法,它只会在黑色背景上创建大量白色像素。然而,这个“星空”看起来太不自然了——可能是因为随机数生成器的质量很差(我使用了 rand() 函数)。

是否有任何特殊算法可以生成看起来或多或少逼真的星空?

谢谢。

【问题讨论】:

  • 对于初学者来说,星星的移动速度是否略有不同?
  • 也许是截图或其他东西,可以让我们看到星空以何种方式不真实?或者至少还有更多信息?例如。你的游戏是街机风格的 2D 吗?滚动是如何发生的?
  • 看起来像 Cunning ways to draw a starfield 的副本。
  • @Frustrated 不,它们都以相同的速度移动。猜猜另一层不同速度的星星会让它看起来更有趣
  • @thkala 是的,游戏是2d卷轴,问题是星空有些“规矩”,好像随机性不够。我现在无法发布屏幕截图,但我会在回家后发布。

标签: algorithm sdl


【解决方案1】:

总是有this 经典。亮点:

[...] 将星星想象为 3D 空间中的点,它们都沿 Z 轴向观察者移动。在每个时间步长,星星的 3D 坐标都会投影到屏幕上,并显示出来。

为了获得更平滑的效果,我们可以让星星在它们第一次出现时变黑(这样你就不会注意到它们),然后在它们靠近时变得更亮。

有两种方法可以模拟广阔感。第一种只是简单地模拟一个巨大的空间区域,至少可以说这是不切实际的。二是让恒星以一定的速度运动。

【讨论】:

    【解决方案2】:

    我不久前发现this useful tutorial 是在创建一个“现实的”星域。它不是 C++,但一旦你有了这个想法,它应该很容易适应。

    【讨论】:

      【解决方案3】:

      您可以使用Lloyd's algorithm 来放松随机点并使它们成为半随机点。我在map generator 中读到了这个想法,但它可能也可以用来创建最终分布的星域。

      【讨论】:

        【解决方案4】:

        您可能不希望它是真正随机的。当您真的希望各个像素散布在各处时,您最终会在某些地方出现像素斑点。您最好的选择可能是编写一个较小的部分,然后一遍又一遍地重复它以获得完整的星空外观。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-27
          • 1970-01-01
          • 2010-12-07
          • 1970-01-01
          • 2016-12-31
          • 2014-02-01
          • 2019-07-14
          相关资源
          最近更新 更多