2

我计划根据道路剖面使用 OSG(Openscenegraph)进行地形变形。道路网格已单独生成,我将其放在地形上。OSG 生成的地形必须根据道路轮廓自行变形。此外,必须将额外的几何图形添加到靠近道路边界的地形几何图形中,以实现平滑,因为地形四边形图块单元可能太大。

我试图想象这种情况,如下图所示。现在我看到的最好的方法是让 OSG 将地形图块生成为 OSGB 文件。我知道道路边界点。我可以算出一段路段会落在哪个地形上。假设我根据此图知道特定地形四边形图块的道路边界点:

地形顶视图

现在我需要对落在道路路径上的地形瓦片单元进行镶嵌或细分。

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

  • 我可能会使用镶嵌着色器方法,但它可能会在我移动相机的任何地方进行镶嵌,而不是专门在道路边界处。也许创建一个灰度纹理运行时突出显示路面并将其传递给 Tess 着色器以在道路边界进行镶嵌?
  • 我可能会使用带有缠绕顺序的旧 opengl GluTess 在道路通行的地形上切割孔。但如果单元格大小很大,这些可能会创建非常长的三角形。那么请任何人都可以给我一些指示来解决这个问题吗?顺便说一句,每个地形图块也有其道路切割片。

OpenGL / DirectX 中的任何帮助/建议也应该很有帮助。谢谢!

地形和道路横截面

4

1 回答 1

0

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

渲染时,为避免撕裂,沿道路和地形之间的任何重合边缘匹配细分因子非常重要。以牺牲一些执行时间为代价,可以将边缘镶嵌因子设置为最大值,而不管其他地方的详细程度如何。我还没有研究如何对其进行编码,但可能会在着色器中检测到这一点,因为每个适用的边都属于一个三角形,该三角形具有一个极端负顶点和两个普通顶点。

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

于 2018-03-03T14:52:04.090 回答