我使用的是带有VBO和索引等的现代OpenGL。
首先我从heightmap加载地形,然后我将它分成块(在我的例子中是128x128),我将所有的顶点加载到VBO中(对于每个地形块),然后我有4个LOD级别-索引表-它是非常静态的。
渲染时,我只是根据与摄像头的距离来选择块
if(distance > 768.0)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cells[i].elementbuffer_lod4);
else if(distance > 512.0)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cells[i].elementbuffer_lod3);
else if(distance > 128.0)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cells[i].elementbuffer_lod2);
else
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cells[i].elementbuffer_lod1);在这里我遇到了一个问题。一切运行良好,但我有真正丑陋的裂缝之间的不同lod级别的块。我在谷歌搜索时发现了这样的pdf:http://www.flipcode.com/archives/article_geomipmaps.pdf,我理解这个想法,但我真的不知道如何使用VBO实现它(如上)。如果能听到一些想法,我会很高兴。
发布于 2014-01-01 00:34:26
请注意,索引缓冲区独立于您正在呈现的块。相同的索引缓冲区可以(重复)用于不同的块(我选择突出显示这一点是因为我不明白为什么你在绘图调用中对cellsi有这种依赖性)。
然后,对于一个块,您需要考虑其4个相邻块的细节级别(LOD)。如果所有4个相邻块都具有与此块相同的LOD,则除了您已执行的操作之外,没有什么可做的。如果此块连接到具有较低LOD的块,则可以应用本文中引用的技巧来隐藏间隙。这意味着对于这些特定的情况,您将需要额外的预先计算的索引缓冲区(或者每次一个完整的索引缓冲区,导致可能2^4 = 16个不同的索引缓冲区,或者您可以拆分绘制调用以单独处理边界)。此外,本文中的技巧仅适用于相邻块之间一个级别最大的间隙。您需要确保您的细节级别以这样的方式在空间上分布,即两个相邻的块在LOD中的间距仅为1。或者你找到另一个技巧/推广这个技巧。遮罩裙子(垂直拉伸块的边界)可用于隐藏具有不同LOD的块之间的较大间隙。
https://stackoverflow.com/questions/15624032
复制相似问题