在地球上实现QuadTree地形(Geomipmapping)

时间:2013-01-27 22:08:49

标签: c++ opengl terrain quadtree

我有一个QuadTree,可以通过在节点中放置对象进行细分。我还有一个以Quad Sphere形式在OpenGL中制作的行星。问题是我不知道如何把它们放在一起。 QuadTree如何存储有关Planet的信息?我是否在叶子Quad Tree节点中存储顶点?如果是这样,我如何将顶点数据分成4组而不破坏纹理和法线。如果是这种情况,我会使用指数吗?

所以我的问题很简单就是:

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

我读过很多文章,其中大多数都未能涵盖这一点。 Quadtree是我应用程序中最重要的事情之一,因为它允许我同时渲染许多行星,同时仍能在陆地上获得良好的定义。我的星球和它的高清太阳的漂亮照片:  A pretty picture of my planet and it's HD sun!

也可以找到地球的视频Here.

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

2 个答案:

答案 0 :(得分:1)

您正在寻找的是像ROAM(实时最佳匹配网格)这样的算法,可以根据摄像机的距离来提高或降低模型的精度。该算法将使用您的四叉树。

在gamasutra上查看有关如何呈现Real-time Procedural Universe

的系列文章

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

答案 1 :(得分:0)

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

我曾经在球体上实现过LOD。我们的想法是从一个简单的Dipyramid开始,上部金字塔代表北部球体,下部金字塔代表南部球体。金字塔的底部与赤道对齐,尖端在杆上。 然后通过连接三角形边缘的中点,将每个三角形细分为4个较小的,根据需要尽可能多取决于您的需求,与相机的距离和对象展示位置可能是细分的触发器