如何创建大型地形/景观
How to create large terrain/landscape
我在徘徊如何在opengl中创建大型地形。我的第一个想法是使用搅拌机创建一个平面,对其进行细分,创建地形并将其导出为.obj。在看了一下搅拌机之后,我认为这应该是可能的,但很快我意识到我的六核+ 8GB RAM无法跟上细分,以支持非常大的地形所需的精度。
所以我的问题是,最好的方法是什么?
- 也许尝试另一种3D渲染软件,如cinema4d?
- 在搅拌机中逐步创建地形,稍后将其组合在一起?(保持段之间的比率可能有问题)
- 一些我不知道的方法?
我可以使用随机生成算法创建一个大型景观,但我不想要随机景观,我需要具有许多细节的自定义景观。(高度、深度、路径)
编辑
我要做的是:
- 创建 3 个不同的高度图(1. 洞穴地面(+可能是墙壁高度的一半),2. 洞穴天花板的倒置高度图,3. 标准表面高度图)
- 合并所有三个高度图
- 将它们保存在 obj 文件或任何所需的格式中
- 在 3D 编辑工具中进行一些微调(如果它太大而无法处理,我将创建一个具有 LOD 算法的应用程序,我可以在其中编辑一些小东西)
- 再次将其保存为所需的任何内容(也许可以进行一些优化)
- 很高兴
编辑2我正在创建的地图太大了,以至于 Photoshop 使用了我所有的 8GB RAM,所以我必须将所有 3 个高度贴图分成较小的部分,并在地图上移动时即时组装它们。
我相信你只想制作一个高度图。 图像越大,它就越能延伸得越远。 也许如果你让接缝匹配,你可以平铺它,但如果你想要一个无尽的地形,那么可能值得努力生成一个地形。
要制作高度图,您将制作一个图像,其中每个像素代表一个设置的高度(您实际上不必将其表示为图像,但它使可视化变得非常容易),该图像将成为灰度缩放的颜色。 然后,可以将此值缩放到所需的最大高度(精度由图像的位深度决定)。
如果你想用OpenGL做到这一点,你可以创建一个界面,你可以在其中单击点以提高特定点或区域的高度。
获得此图像后,渲染它不会太难,因为 X 和 Y 坐标是为您的空间设置的,并且图像将为您提供 Z 坐标。
这将具有不允许洞穴和类似特征的缺点(因为一个点只有一个高度)。 如果需要这些功能,可以添加网格或第二个
如果您尝试存储的数据超过内存容量,则需要将大部分数据保存在磁盘上。将地图划分为多个段,根据需要加载较近的段,是该技术。许多组通过四叉树访问地图段,这些四叉树通常不需要太多的遍历即可到达"附近"部分。
变化包括创建较大地图块的较低分辨率版本以用于渲染长视图,因此您保留了整个地图的真正低分辨率版本,此处山谷的中等分辨率版本,以及我正在查看的这片树林的高分辨率副本。
这是复杂的事情,这就是为什么没有人真正把整个事情放在一起,直到关于GTA:圣安地列斯或遗忘。
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C++中高效的大型稀疏块压缩线性方程
- 如何实现高效的算法来计算大型数据集的多个不同值?
- LMDB:在有限的内存系统中打开大型数据库
- 如何在大型c++项目的可视化代码中设置调试
- 仅在大型阵列上出现合并排序分段错误
- 在堆栈上C++大型多维数组
- atoi() 在应用于大型命令行参数时会产生不正确的值
- 如何在 c++ 中通过 http 发送大型视频文件?
- 将公共递归转换为尾递归,因为大型输入的堆栈溢出
- 如何将 OpenMP 和 MPI 导入到大型 CLion CMake 项目中?
- > 64k C++的 DirectX 大型机型
- 使用 RapidXML 解析大型 XML(大小大于 65 KB)文件时出现问题
- 堆分配对于大型块中的分页是否更有效?
- 适用于大型数组的无复制线程安全环形缓冲区
- 为大型数组提供堆大小的编译器
- 使用继承修复大型类
- 在 lldb 中为大型数据结构设置观察点
- 快速排序不适用于大型数组
- 如何创建大型地形/景观