c++ - 在 OpenGL 中屏蔽掉地形表面的一个区域

标签 c++ 3d opengl-es terrain

我正在使用 3D 地理渲染器在地形表面上构建模型。这些建筑模型是通过摄影测量捕获的,我们遇到的一个问题是地形表面有时会穿透建筑模型,因为表面数据和建筑模型不完全匹配。

我们想要遮盖掉建筑模型足迹覆盖区域中的地形表面。我一直在考虑使用模板缓冲区,可能会从模型中挤出某种阴影体积,并在渲染模型之前在建筑模型足迹覆盖的区域中用高值填充 z 缓冲区。不过这需要大量的处理,我希望有更智能、更高效的处理方式。另一个想法是制作从上方渲染的模型的正交 2d 纹理,并使用它以某种创造性的方式使用着色器填充 z 缓冲区。

因此,如果有人以前做过类似的事情或有任何想法,我会很高兴听到他们的意见:-)

我仅限于 OpenGL ES 3.0,所以我不能使用几何着色器或其他奇特的功能。

干杯, 托马斯

最佳答案

您必须了解地形网格以及建筑物在地形上的实际位置。最明显的解决方法是对地形网格进行预处理,以“平整”每个建筑物地基周围的区域。这只需要做一次,所以它只是一次性成本而不是每帧成本。

想不出任何直接明显的更简洁的方法 - 深度测试的需要,除非你不想要它,并不能很好地转化为算法;)

关于c++ - 在 OpenGL 中屏蔽掉地形表面的一个区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58707781/

相关文章:

c++ - 快速排序最坏情况的提示

c++ - 如何正确删除C++中的指针?

math - 基于四元数的 3D 相机应该累积四元数还是欧拉角?

algorithm - 3D 凸非平面多边形的线段相交

android - Android 模拟器是否支持 OpenGL ES 3.0?

c++ - 未定义的函数引用

c++ - OpenGL - 索引缓冲困难

ios - 如何从 RGBA 图像创建 ARGB 图像

iphone - 我们如何为 GLFloat 赋值以在 iPhone 应用程序中画一条线?

c++ - 通过指针传递不更新内存地址