首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terrain GeoMipMapping细节消除裂缝

Terrain GeoMipMapping细节消除裂缝
EN

Stack Overflow用户
提问于 2013-03-26 04:22:30
回答 1查看 1.5K关注 0票数 1

我使用的是带有VBO和索引等的现代OpenGL。

首先我从heightmap加载地形,然后我将它分成块(在我的例子中是128x128),我将所有的顶点加载到VBO中(对于每个地形块),然后我有4个LOD级别-索引表-它是非常静态的。

渲染时,我只是根据与摄像头的距离来选择块

代码语言:javascript
复制
    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实现它(如上)。如果能听到一些想法,我会很高兴。

EN

回答 1

Stack Overflow用户

发布于 2014-01-01 00:34:26

请注意,索引缓冲区独立于您正在呈现的块。相同的索引缓冲区可以(重复)用于不同的块(我选择突出显示这一点是因为我不明白为什么你在绘图调用中对cellsi有这种依赖性)。

然后,对于一个块,您需要考虑其4个相邻块的细节级别(LOD)。如果所有4个相邻块都具有与此块相同的LOD,则除了您已执行的操作之外,没有什么可做的。如果此块连接到具有较低LOD的块,则可以应用本文中引用的技巧来隐藏间隙。这意味着对于这些特定的情况,您将需要额外的预先计算的索引缓冲区(或者每次一个完整的索引缓冲区,导致可能2^4 = 16个不同的索引缓冲区,或者您可以拆分绘制调用以单独处理边界)。此外,本文中的技巧仅适用于相邻块之间一个级别最大的间隙。您需要确保您的细节级别以这样的方式在空间上分布,即两个相邻的块在LOD中的间距仅为1。或者你找到另一个技巧/推广这个技巧。遮罩裙子(垂直拉伸块的边界)可用于隐藏具有不同LOD的块之间的较大间隙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15624032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档