【发布时间】:2014-02-18 13:32:11
【问题描述】:
我有一个 3D 应用程序,我在其中将地形渲染为高度图。地形离相机越远,它的分辨率就越低。除了为每个分辨率创建一个顶点缓冲区对象/显示列表之外,还有其他选择吗?或者是否有办法以最高分辨率创建一个顶点缓冲区对象/显示列表,并以某种方式告诉 GPU 只使用部分数据?
【问题讨论】:
标签: java opengl graphics lwjgl
我有一个 3D 应用程序,我在其中将地形渲染为高度图。地形离相机越远,它的分辨率就越低。除了为每个分辨率创建一个顶点缓冲区对象/显示列表之外,还有其他选择吗?或者是否有办法以最高分辨率创建一个顶点缓冲区对象/显示列表,并以某种方式告诉 GPU 只使用部分数据?
【问题讨论】:
标签: java opengl graphics lwjgl
您需要实现一个细节层次 (LOD) 算法。可以在here 找到带有彩色图片的算法的完整列表。我建议将geomipmapping 作为一个简单的起点。还有一些有趣的implementations,你可以重复使用或学习。
在大多数简单的实现中,通常有几个用于不同细节级别的索引缓冲区和一个或多个用于地形不同部分的顶点缓冲区。 GPU 自身无法降低几何体的细节水平,除了镶嵌着色器,它也被用于使用顶点纹理进行地形渲染(然后地形数据在纹理中而不是在 VBO 中,并且粗糙度由不同的细分级别)。
【讨论】:
您必须使用本地位置坐标创建 VBO。将此坐标发送到您的着色器并将转换应用到着色器上的世界坐标,具有特殊的分辨率视图,您可以将其作为统一绑定到着色器。
最后一件事:“永远不要碰现有的 VBO!” ;-)
【讨论】: