【问题标题】:Masking away an area of a terrain surface in OpenGL在OpenGL中掩盖地形表面的区域
【发布时间】:2019-11-05 09:03:28
【问题描述】:

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

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

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

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

干杯, 托马斯

【问题讨论】:

  • 是否可以选择先绘制建筑物再绘制地形?或者,你能用glDepthFunc(GL_ALWAYS)画出建筑物吗?
  • 我仍然需要建筑模型进行深度测试,包括内部和周围地形,所以我不认为这会很不幸

标签: c++ 3d opengl-es terrain


【解决方案1】:

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

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

【讨论】:

  • 我就是这样做的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 2023-03-18
相关资源
最近更新 更多