java - 如何为单个对象添加连续 LOD?

标签 java opengl lwjgl

我有一个对象。 高度图。

enter image description here

(忽略旗帜和水 - 我们有想象力,对吧?;))

但是,问题是我将其显示为单个显示列表。因此,我无法“检查 map 与玩家的距离”,也无法使 map 变得不那么详细,因为我只能将 map 视为单个对象。

我尝试过使用着色器,但是这些在管道中为时已晚,无法影响性能(如果我使用着色器删除整个游戏中的所有内容,游戏仍然滞后,就好像它拥有其他所有内容一样)。

那么,如何在为时已晚之前向地形添加连续的细节层次,而不将其分割成大量不同的对象(即使这样也不能很好地工作)?

最佳答案

您可以将 map 分割成可以独立显示的正方形,并且仅在玩家足够接近以可能渲染时才创建这些网格对象,并且仅在玩家视线内时才渲染。

此外,您还可以使用tesselation shader创建连续的细节水平。它涉及绘制平面四边形并使用控制着色器来说明必须绘制多少个顶点,并使用评估着色器根据高度图(作为纹理传入)将它们向上移动。

或者更激进的是,您可以创建一个中心细粒度的平面网格,并进一步减少细节,然后使用顶点着色器,您可以用高度图替换顶点,中心保留在相机下方,但您可以使用相机的位置来偏移高度图(和纹理图)的采样坐标

关于java - 如何为单个对象添加连续 LOD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26329425/

相关文章:

java - 对于类型 TreeMap<MyTime,Integer> ,方法 heavenEntry(MyTime) 未定义

java - Activemq如何分析死信队列中的消息

math - 将 3d 面绘制为 2d

java - JOGL:obj 模型颜色 Material 的奇怪行为

opengl - 如何计算相机的UP和位置?

java - Android 中线程如何与监听器交互?

java - Android - 在java中仅获取列中具有值的行

c++ - 在 OpenGL 中处理顶点的最佳技术? C++

java - LWJGL:变色的纹理

java - 在 LWJGL 中组织代码