生成漂亮的星空图案

发布于 2024-10-18 06:36:57 字数 167 浏览 3 评论 0原文

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

是否有任何特殊的算法来生成看起来或多或少真实的星场?

谢谢。

I'm trying to generate a scrolling starfield for a game with C++ and SDL. I'm using a simple, naive algorithm that just creates a lot of white pixels on black backround. However, this "starfield" looks too unnatural - probably because of the random number generator's poor quality (I use the rand() function).

Are there any special algorithms for generating starfields that look more or less realistic?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

黄昏下泛黄的笔记 2024-10-25 06:36:57

总是有这个 经典。亮点:

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

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

有两种方法可以模拟浩瀚感。第一个是简单地对大片空间进行建模,这至少可以说是不切实际的。第二个是让星星以一定的速度移动。

There's always this classic. Highlights:

[...] imagine the stars to be points in 3D space, all of them moving towards the viewer, along the Z-axis. At each time step, the 3D coordinates of the stars will be projected onto the screen, and displayed.

For a smoother effect, we can make the stars black when they first appear (so you don't notice them) then get brighter as they get closer.

There are two ways the sense of vastness can be modeled. The first is simply to model a huge area of space, which is impractical to say the least. The second is to make the stars move with a range of velocities.

白馒头 2024-10-25 06:36:57

不久前,我发现了这个有用的教程,关于创建一个“现实”的星场。它不是 C++,但一旦你明白了它的想法,它应该很容易适应。

I found this useful tutorial a while ago on creating a 'realistic' star field. It's not C++, but it should be easily adaptable once you get the idea.

时光瘦了 2024-10-25 06:36:57

您可以使用劳埃德算法来放松随机点并使它们成为半随机的。我在地图生成器 但它可能也可以用来创建一个最终分布式的星域。

You could use Lloyd's algorithm to relax the random points and make them semi-random. I read this idea in a map generator but it probably can be used do create an eventually distributed star field too.

好倦 2024-10-25 06:36:57

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

You probably don't want it to be truly random. You will end up with blobs of pixels in some places when you really want individual pixels scattered around. Your best bet would probably be to code a smaller section and then just repeat it over and over to get the full starfield look.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文