四球面细分algorithm

我喜欢生成像KSP这样的行星。 通过开发者的一些video,我知道他们使用了一个quadsphere,至less由6个“实体”组成。 这些都是平面网格,将细分得更近。 这允许地面到轨道的细节水平。 但是,我有一些问题了解这个细分algorithm:

  1. 由于我有6个单独的网格,我怎么知道我必须把它们细分,如果它们都是单独的?
  2. 如果我总是把四分之一细分相机结束,我最终是这样的: 此搜索 即使我想要类似的东西 这个 。 那么我怎样才能确保一个完整的2:1细分与neigbour四边形细分?

在地形上实现LOD细分是相当复杂的,我宁愿推荐使用库或其他东西。 但是,如果您更愿意学习艰难的方式,那么您需要做的主要步骤是:

首先,与你的假设不同,你并不是从像最缩小的版本那样的6个网格开始的,而是以最高的分辨率(最大的缩放版本)来定义你的几何体。 所以如果我们假设你实现了4个等级(0:最低,3:最高),你就从一个包含4 3 * 6 = 384个网格的球体开始,这个网格是等级3的整个球体。比你需要更低层次的网格。 级别2有4个2 * 6网格,级别1有4个1 * 6,级别0有 4个0 * 6,简单的立方体。 这给了你所有级别的总共510个网格。

与在运行时相比,您只需确定每个384级别3网格到相机的距离(您也可以只检查一个子集) 。 如果距离足够长,则使用较低的级别(请注意,您始终将4个预定义的较高网格物体连接到一个较低级别的网格物体) 。 这是一个简单的实现LOD的基本知识。

一旦你完成了这一步,你会注意到从一个层次到另一个层次边界的网格没有正确连接,并且暴露了伪像(graphics故障) 。 要解决这个问题,你需要拼接 。 这个话题的真正痛苦(有趣的是你的球形图像不显示拼接) 。 所以拼接,你需要额外的边界网格为每个级别和侧面和角落,给你额外的8折网目数⇒约4590目。

实际上,最好不要使用像通用网格物体,而是直接使用OpenGL (或其他) 。 这为您提供了更多的灵活性(也许这些网格实现也提供了它)。 在OpenGL中,这将导致只有384个缓冲区对象(网格容器sorting)和〜28个元素/索引缓冲区(网格布局sorting),并且可以在运行时将它们组合到所有必需的“网格”中

正如我所说,这是一个相当高级的话题,你最好找一个指南来跟随,或者如果你失去了对痛苦的需求,就去一个已经实施它的图书馆。