Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在OpenGL中遮挡地形曲面的一个区域_C++_3d_Opengl Es_Terrain - Fatal编程技术网

C++ 在OpenGL中遮挡地形曲面的一个区域

C++ 在OpenGL中遮挡地形曲面的一个区域,c++,3d,opengl-es,terrain,C++,3d,Opengl Es,Terrain,我正在使用3D地理渲染器在地形表面上构建模型。这些建筑模型是通过摄影测量捕获的,我们遇到的一个问题是,地形表面有时会刺穿建筑模型,因为表面数据和建筑模型不完全匹配 我们希望遮罩建筑模型迹线覆盖区域中的地形曲面。我一直在考虑使用模具缓冲区,可能从模型中挤出某种阴影体积,并在渲染模型之前在建筑模型足迹覆盖的区域中用高值填充z缓冲区。但这需要相当多的处理,我希望有一种更聪明、更有效的方法。另一个想法是制作从上面渲染的模型的正交2d纹理,并使用着色器以某种创造性的方式使用该纹理填充z缓冲区 因此,如果有

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

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

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

我仅限于OpenGL ES 3.0,因此无法使用几何体着色器或其他奇特功能

干杯,
Thomas

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


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

是否可以先绘制建筑物,然后绘制地形?或者,你能用
glDepthFunc(GL_ALWAYS)
绘制建筑吗?我仍然需要建筑模型进行深度测试,包括内部测试和周围地形测试,因此我认为这不会奏效,不幸的是,这正是我要做的