我正在使用 GLFW 和 GLEW 在 C ++ 中开始一个新项目。
计划是拥有一个相当大的低聚地形。它将 NOT 随机生成,我打算在Blender中制作它。
我的问题是,我无法在 Blender 中创建巨大低多边形地形,因为程序变得非常慢,因为地形具有顶点数量。我创建了一个500米x 500米的地形,并将其细分为1000.这给了我 ALOT 的顶点,使程序无法使用。
创造巨大地形的最佳方法是什么? 我不知道如何创建地形块,因为我必须对它们进行建模。
我的另一个关注点显然正在将世界加载到我的自定义游戏引擎中。我认为像这样的大世界在加载时会遇到很大问题。
答案 0 :(得分:3)
我多年前做过类似的事情,发现本教程非常有用:
http://www.rastertek.com/tertut05.html
它描述了创建一个四叉树,其中包含分区为AABB的地形网格中的特定三角形,使用视锥体剔除可以在运行时剔除地形的大部分区域,并且应用程序的性能应该得到改善。只要您有信心导入从混合器导出的网格物体(它们是否在.obj中?),您就可以轻松地使用本教程中概述的策略对不同的三角形进行分区。
进一步的优化可能是根据与摄像机的距离为四叉树中的节点提供各种LOD,即,如果节点距离摄像机的设定距离,则通过跳过某些顶点以生成较小的三角形来渲染较低的多边形网格“崩溃”成更大的。我建议生成特定的索引列表来执行此操作并使用相同的顶点数据,而不是使用单独的预生成的网格块来节省内存。
答案 1 :(得分:3)
Unity,虚幻引擎和CryEngine等游戏引擎中的地形与平均静态或骨架网格物体的处理方式不同。通常在运行时创建不同级别的细节,而不是预先创建其LOD的普通网格。从像Blender或3DS Max这样的3D程序加载网格作为整个地形是不可行的。
rastertek的Direct3D教程非常适合学习,但显然不是OpenGL。这是在Java OpenGL中创建基本地形的基本教程(这不会进入我不认为的LOD处理)。
最常见的是我认为我已经看过一个四叉树系统,你有地形补丁,每个补丁被细分为四个其他补丁,具体取决于条件(相机距离或屏幕空间大小)。
这是标准四树LOD系统的样子,特别是对于Kerbal Space Program游戏。
在此过程中,您需要弄清楚如何解决一些问题,例如如何摆脱具有不同LOD水平的两个地形斑块之间的裂缝和间隙。 Kerbal空间程序通过不同地处理边缘顶点以排队,并且不允许任何两个相邻地形补丁超过一个LOD级别的差异来解决这个问题。
我尝试过的一种方法是为每个顶点上传两个顶点位置,当前LOD位置和LOD顶点从一个级别向下的位置,并根据摄像机距离在两者之间进行线性插值。但我很确定有比这更优雅的方式。
我刚刚发布了一段视频来讨论这个东西,它显示了基本的四叉树模式,裂缝问题,然后是顶点插值方法。有些人在CPU上创建补丁,在GPU上创建其他补丁,并使用变换反馈回读任何必要的信息(例如物理学)。有很多方法可以做,我希望能回到它。