c++ - 创建巨大的低多边形地形

标签 c++ blender terrain vertices

我正在使用 GLFWGLEWC++ 中开始一个新项目。

计划是拥有一个相当大的 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 处理)。

Java OpenGL terrain

最常见的是,我认为我见过一个四叉树系统,其中有地形 block ,每个 block 又 segmentation 为四个其他 block ,具体取决于条件(无论是与相机的距离还是屏幕空间大小)。

这就是标准的四叉树 LOD 系统的样子,特别是对于游戏 Kerbal Space Program。

enter image description here

在此过程中,您需要弄清楚如何解决一些问题,例如如何消除两个具有不同 LOD 级别的地形 block 之间的裂缝和缝隙。 Kerbal Space Program 解决了这个问题,方法是对边缘顶点进行不同的排列处理,并且不允许任何两个相邻地形 block 的差异超过一个 LOD 级别。

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

前段时间我发了一个视频,里面是我自己弄的,基本的四叉树模式,裂纹的问题,然后是顶点插值的方法。有些人在 CPU 上创建补丁,其他人在 GPU 上创建补丁,并使用变换反馈读回任何必要的信息(例如物理信息)。做事的方式有很多种,我希望能重新投入其中。

TerrainPatches

关于c++ - 创建巨大的低多边形地形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48079678/

相关文章:

opengl - 有没有人在 3D 程序生成地形或分形地形生成方面有很好的资源?

c++ - 无法从 'const std::string [3]' 转换为 'std::string'

c++ - 不能重复使用画笔绘制文本和矩形

c++ - 数组中对象的私有(private)成员不可修改

unity3d - 将带有纹理的搅拌器对象导出到 unity3d

python - 在种子中生成随机数

java - 打造简约的城市街道

c++ - 获取 vector 中的特定元素

three.js - 为什么在 ThreeJs 中两张脸看不见?

c++ - 来自文本文件的 OPENGL 地形