根据OpenGL / DirectX中的道路轮廓进行地形变形

时间:2017-12-04 17:14:34

标签: opengl directx terrain openscenegraph tessellation

我计划根据道路剖面使用OSG(Openscenegraph)进行地形变形。道路网格已单独生成,我将把它放在地形上。 OSG生成的地形必须根据道路剖面自行变形。此外,必须将附加几何体添加到靠近道路边界的地形几何体以获得平滑度,因为地形四边形瓦片单元格可能太大。

这种情况我试图想象如下图所示。 现在我看到的最好的方法是让OSG生成地形图块作为OSGB文件。我知道道路边界点。我可以弄清楚一段道路应该落在哪个地形砖上。假设我知道特定地形四边形瓷砖的道路边界点,如下图所示:

Terrain Top view

现在我需要细分或细分落在道路上的Terrain瓦片单元格。

因此,我需要变形以及增加道路边界处的地形网格。 问题:实现这一目标的最佳方法是什么?

  • 我可能会使用曲面细分着色器方法,但它可能会在任何地方镶嵌我移动相机而不是专门在道路边界。也许创建一个灰度纹理运行时,突出显示路面&将它传递给苔丝着色器以在道路边界镶嵌?
  • 我可能会使用带有绕线顺序的旧opengl GluTess来切割道路上的洞。但是如果单元尺寸很大,那些可能会创建非常长的三角形。 所以请任何人给我一些指示来解决这个问题吗?顺便说一下,每个地形砖也都有路面切割。

OpenGl / DirectX中的任何帮助/建议也会非常有用。 谢谢!

Terrain & road cross section

1 个答案:

答案 0 :(得分:0)

我认为解决方案是为道路创建一个单独的网格,每边都有一个“边缘”网格,形状根据需要模拟切割或路堤。 road-verge网格的外边缘应该具有与它们连接的高度图符合的顶点。高度图应在道路边缘条下方适当扭曲,以确保没有地形元素可以在其上方泄漏。由于无论如何都不应该看到它们,因此可以指定一个特殊的极端负高度,这意味着“不要费心渲染”,这将节省一些GPU周期。所有这些准备工作都可以离线完成。

渲染时,为避免撕裂,在道路和地形之间的任何重合边缘上匹配细分因子非常重要。以某些执行时间为代价,无论其他地方的细节程度如何,边缘细分因子都可以设置为最大值。我还没有看过如何对它进行编码,但是有可能在着色器中检测到这一点,因为每个适用的边都属于一个具有一个极端负顶点和两个普通顶点的三角形。

边缘也可以有替代纹理,这可能对河岸和池塘边缘等物有用,可能需要更多细节。