2014-02-18 33 views
1

我有一个3D应用程序,我将地形渲染为一个高度图。离摄像机越远,分辨率就越低。除了为每个分辨率创建顶点缓冲区对象/显示列表之外,还有其他选择,还是有办法在最高分辨率下创建一个,并以某种方式告诉GPU仅使用一些数据?不同的分辨率需要多个VBO/DL吗?

回答

1

您需要实施详细程度(LOD)算法。具有彩色图片的算法的完整列表可以在here找到。我建议geomipmapping作为一个简单的起点。还有一些有趣的implementations,你可能可以重用或学习。

在大多数简单的实现中,通常有几个索引缓冲区用于不同细节层次和一个或多个地形不同部分的顶点缓冲区。除了镶嵌着色器之外,GPU本身不能降低几何图形的细节水平,镶嵌着色器也用于使用顶点纹理进行地形渲染(地形数据在纹理中而不在VBO中,粗糙度由不同的控制tesselation级别)。

0

你必须用本地位置坐标创建你的VBO。将此坐标发送给着色器,并将该变换应用于着色器上的世界坐标,并带有分辨率的特殊视图,您可以将其作为统一信息绑定到着色器。

还有一件事:“绝不要触摸现有的VBO!” ;-)

+0

除了许多地形渲染算法动态地将数据传输到VBO,完全是这样(触摸现有的VBO)。这是必须的,特别是如果地形不适合GPU(全部细节)的内存。 –