我有一个3D应用程序,其中我将地形渲染为高度图。 地形离摄像机越远,分辨率就越低。 除了为每个分辨率创建一个顶点缓冲区对象/显示列表之外,还有其他选择,或者是否有一种方法可以在最高分辨率下拥有一个,并以某种方式告诉 GPU 仅使用部分数据?
您需要实现详细级别 (LOD) 算法。可以在此处找到带有彩色图片的算法的完整列表。我建议将地理映射作为一个简单的起点。还有一些有趣的实现,你可以重用或学习。
在大多数简单实现中,通常有多个用于不同细节层次的索引缓冲区,以及用于地形不同部分的一个或多个顶点缓冲区。GPU 无法自行降低几何体的细节级别,但镶嵌着色器除外,这些着色器也已用于使用顶点纹理进行地形渲染(然后地形数据位于纹理中而不是 VBO 中,粗糙度由不同的镶嵌级别控制)。
您必须使用本地位置坐标创建 VBO。将此坐标发送到着色器,并将变换应用于着色器上的世界坐标,并具有分辨率的特殊视图,您可以将其作为统一绑定到着色器。
最后一件事:"永远不要碰现有的 VBO! ;-)