6

什么是实现、存储和渲染球形世界的最佳方式,例如在孢子或无限中但没有中间阶段的孢子,以及无限宇宙的多个世界。不对行星本身是如何产生的或它的大小/规模做任何假设。

4

4 回答 4

7

对于渲染,您需要使用某种详细程度算法,以便从靠近行星表面的地方无缝移动到远处。有许多动态 LOD 算法(参见此处)。一种称为 ROAM 的较旧算法可用于处理球形物体或行星(球形 ROAM)。Geometry clipmaps 是一种更新、更流行的算法,也可以适应球面。

至于存储数据,您可能需要研究纹理、高度图等的程序生成(取决于您的需要)。这类似于 Infinity 和 Spore 的处理方式。你可以在这里阅读一些关于程序纹理的内容。程序高度图更简单,具体取决于您想要地形的复杂/真实程度。在最简单的级别上,您可以简单地通过 perlin 噪声函数替换顶点高度。

于 2009-01-24T06:53:17.160 回答
5

如果您正在寻找一些东西来存储有关表面的数据,您可能会查看HEALpix。它是天文界专门为绘制天空(另一个球面)而开发的软件。

HEALpix 创建一个网格,描述表面的位置和大小,并为每个表面分配一个 ID。然后,您可以使用该 ID 作为键或索引来访问有关该特定级别的尽可能多的详细信息。

HEASPix 提供了查找相邻表面区域的方法,并且可以为每个网格点提供中心和顶点位置。

它是一种分层网格,允许您根据需要尽可能多地细分每个面,因此理论上您可以根据需要将网格的一部分设置为低分辨率,而将其他部分设置为更高的细节级别。它有一个很好的特性,它是无限可分的(直到你的内存限制),并且在给定分辨率下,网格的每个像素与在该分辨率级别下的所有其他像素具有相同的区域。

分发包提供了很多您可能不需要的东西,但核心库应该很有用。

于 2009-01-24T02:33:41.537 回答
4

这可能不是你要找的……但到底是什么。这是一个好故事。

很久以前,当恐龙还在地球上漫游并且内存仍然以千字节为单位时,我使用了一些软件来生成分形行星。

这个想法是创建一个代表地球的 2NxN 矩形。将行星切成两半,每次稍微移动两半。(带有随机相移和幅度的切割的正弦波。另一个用于偏移的随机正弦波。)之后,用水淹没低层区域并按高度对其余区域进行颜色编码。

然后在顶部放置一个直径为 N 的球体并投影,将地图的 NxN 区域包裹在球体的一半周围。围绕地图移动球体,它看起来像是在旋转。

于 2009-01-23T19:06:56.277 回答
2

我建议在内存中使用某种多边形模型来实现它们的世界,使用文件来存储它们并使用某种 3d 引擎渲染它们。要么是那个,要么只是一个指针中心和一个半径,以及一个描述世界地理的叠加层。

编辑:感谢您提供更多详细信息。根据您需要多少细节,您需要使用某种方法将纹理分解成更小的部分——您可以只为 20 个面生成纹理并围绕中心点构建一个二十面体。查看地图投影,了解如何在现实生活中处理这些问题。

于 2009-01-23T17:13:31.137 回答