3

我有一个 QuadTree,可以通过在节点中放置对象来细分它。我还有一个用 OpenGL 制作的四边形行星。问题是我不知道如何将它们放在一起。QuadTree 如何存储有关地球的信息?我是否将顶点存储在叶子四叉树节点中?如果是这样,我如何在不破坏纹理和法线的情况下将顶点数据分成 4 组。如果是这种情况,我是否使用索引?

所以简而言之,我的问题是:

我如何将我的顶点数据存储在四叉树中,以便我可以分割地球上的地形,以便地球在更近的范围内变得更详细。我假设这是通过使用相机作为分割节点的对象来完成的。

我已经阅读了很多文章,其中大多数都没有涵盖这一点。Quadtree 是我的应用程序中最重要的东西之一,因为它可以让我同时渲染许多行星,同时仍然能够在陆地上获得良好的清晰度。我的星球的一张漂亮照片,它是高清太阳: 我的星球的一张漂亮照片,它是高清太阳!

也可以在此处找到该星球的视频。

我已经设法在一个平面上实现了一个简单的四叉树,但是我一直有很多洞,因为我认为我的位置是错误的。这是这里的最后一篇文章 - http://www.gamedev.net/topic/637956-opengl-procedural-planet-generation-quadtrees-and-geomipmapping/你也可以在那里获得 src。任何想法如何解决它?

4

2 回答 2

1

您正在寻找的是一种类似于ROAM(实时优化适应网格)的算法,能够根据相机的距离提高或降低模型的精度。然后该算法将使用您的四叉树。

查看 gamasutra 上的这个系列,了解如何渲染实时程序宇宙

编辑:使用这些方法使用四叉树的原因是尽量减少不需要细节的区域(例如平坦地形)的顶点数量。维基百科上的四叉树定义非常好,您应该以此为起点。目标是为您的四叉树创建子节点,您可以在其中更改“高度”(您可以使用高度图生成立方体的边),直到达到预定义的深度。也许,作为第一遍,您应该尝试避免四叉树并使用简单的网格。当你开始工作时,你可以通过添加四叉树来“优化”你的过程。

于 2013-01-27T23:32:29.637 回答
0

要了解四叉树和地形数据如何协同工作以实现基于 LOD 的渲染,请阅读本文。通过说明性示例易于理解。

我曾经在一个球体上实现了一个 LOD。这个想法是从一个简单的双金字塔开始,上金字塔代表北球,下金字塔代表南球。金字塔的底部与赤道对齐,尖端位于两极。然后通过连接三角形边缘的中点将每个三角形细分为 4 个更小的三角形。尽可能多地取决于您的需求,到相机的距离和物体放置可能是您进行细分的触发器

于 2013-01-30T07:34:37.447 回答