我正在使用 GLFW 和 GLEW 在 C++ 中开始一个新项目。
计划是拥有一个相当大的 Low Poly 地形。它不会是随机生成的,我打算在 Blender 中制作它。
我的问题是,我无法在 Blender 中创建一个巨大的 Low Poly 地形,因为随着地形的顶点数量增加,程序变得非常慢。我创建了一个 500m x 500m 的地形,并将其 segmentation 为 1000。这给了我很多的顶点,使程序无法使用。
创建巨大地形的最佳方法是什么? 我不确定我将如何继续创建地形 block ,因为我必须对它们进行建模。
- 如何创建一个大的 Low Poly 地形,而不会出现问题 程序运行缓慢?
我的另一个问题显然是将世界加载到我的自定义游戏引擎中。我想像这样的大世界在加载时间方面会有很大的问题。
最佳答案
Unity、Unreal Engine 和 CryEngine 等游戏引擎中的地形与普通静态或骨架网格物体的处理方式不同。不同细节级别的创建通常在运行时完成,这与预先创建 LOD 的普通网格不同。从 Blender 或 3DS Max 等 3D 程序加载网格作为整个地形是不可行的。
rastertek 的 Direct3D 教程非常适合学习,但显然不是 OpenGL。这是在 Java OpenGL 中创建基本地形的基本教程(我不认为这不涉及 LOD 处理)。
最常见的是,我认为我见过一个四叉树系统,其中有地形 block ,每个 block 又 segmentation 为四个其他 block ,具体取决于条件(无论是与相机的距离还是屏幕空间大小)。
这就是标准的四叉树 LOD 系统的样子,特别是对于游戏 Kerbal Space Program。
在此过程中,您需要弄清楚如何解决一些问题,例如如何消除两个具有不同 LOD 级别的地形 block 之间的裂缝和缝隙。 Kerbal Space Program 解决了这个问题,方法是对边缘顶点进行不同的排列处理,并且不允许任何两个相邻地形 block 的差异超过一个 LOD 级别。
我尝试的一种方法是为每个顶点上传两个顶点位置,当前 LOD 位置和 LOD 顶点的位置从一层向下,并根据相机距离在两者之间进行线性插值。但我很确定还有比这更优雅的方法。
前段时间我发了一个视频,里面是我自己弄的,基本的四叉树模式,裂纹的问题,然后是顶点插值的方法。有些人在 CPU 上创建补丁,其他人在 GPU 上创建补丁,并使用变换反馈读回任何必要的信息(例如物理信息)。做事的方式有很多种,我希望能重新投入其中。
关于c++ - 创建巨大的低多边形地形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48079678/