代码之家  ›  专栏  ›  技术社区  ›  Grim Reaper

创建巨大的低多边形地形

  •  2
  • Grim Reaper  · 技术社区  · 7 年前

    我正在开始一个新项目 C++ 使用 GLFW公司 GLEW公司 .

    计划是有一个相当大的低多边形地形。会的 不是 随机生成,我计划在搅拌机中制作。

    我的问题是,我无法创建 巨大的 低多边形地形 搅拌机 ,因为随着地形顶点数量的增加,程序变得非常缓慢。我创建了一个500m x 500m的地形,并将其细分为1000。这让我 很多 ,使程序不可用。

    创建巨大地形的最佳方法是什么? 我不确定我将如何继续创建大块地形,因为我必须对它们进行建模。

    • 如何创建一个大的低多边形地形,而不存在以下问题 程序运行缓慢?

    另一个 我的担忧显然是将世界加载到我的自定义游戏引擎中。我想这样一个大世界在加载时间方面会有很大的问题。

    2 回复  |  直到 7 年前
        1
  •  3
  •   Zebrafish    7 年前

    游戏引擎中的地形,如Unity、Unreal Engine和CryEngine,与一般静态或骨架网格的处理方式不同。通常在运行时创建不同级别的细节,而不是预先创建LOD的普通网格。从Blender或3DS Max等3D程序加载网格作为整个地形是不可行的。

    rastertek的Direct3D教程非常适合学习,但显然不是OpenGL。这里是一个在Java OpenGL中创建基本地形的基本教程(我不认为这会涉及LOD处理)。

    Java OpenGL terrain

    最常见的情况是,我认为我见过一个四叉树系统,其中有地形块,每个块都细分为其他四个块,这取决于条件(与摄影机的距离或屏幕空间大小)。

    这就是标准四叉树LOD系统的外观,尤其是对于游戏Kerbal Space程序。

    enter image description here

    在此过程中,您将需要找出如何解决一些问题,例如如何消除具有不同LOD级别的两个地形面片之间的裂缝和间隙。Kerbal Space程序解决了这一问题,方法是以不同的方式处理边顶点以对齐,并且不允许任何两个相邻的地形面片具有超过一个LOD级别的差异。

    我尝试的一种方法是为每个顶点上载两个顶点位置,当前LOD位置和LOD顶点的位置,从一个级别向下,然后根据相机距离在这两个顶点之间进行线性插值。但我很确定还有比这更优雅的方式。

    不久前我发布了一段视频,视频中我在胡闹这些东西,它显示了基本的四叉树模式、裂缝问题,然后是顶点插值方法。有些人在CPU和GPU上创建补丁,并使用变换反馈读取任何必要的信息(例如物理信息)。做事情有很多方法,我希望能重新开始。

    TerrainPatches

        2
  •  3
  •   Baum mit Augen    7 年前

    多年前,我做了类似的事情,发现本教程非常有用:

    http://www.rastertek.com/tertut05.html

    它描述了使用从地形网格中分割到AABBs的特定三角形创建四叉树,使用截锥剔除可以在运行时剔除地形的大部分,并且应用程序的性能应该会提高。只要您有信心导入从blender导出的网格(它们是否在.obj中?)您应该能够使用教程中概述的策略轻松地划分不同的三角形。

    进一步的优化可能是根据与摄影机的距离为四叉树中的节点提供各种LOD,即如果节点与摄影机的距离为设定的距离,则通过跳过某些顶点来渲染较低的多边形网格,从而使较小的三角形“塌陷”为较大的三角形。我建议生成特定的索引列表来实现这一点,并使用相同的顶点数据,而不是使用单独的预生成网格块来节省内存。