2013-03-25 62 views
1

我使用OpenGL的現代與VBO的和指數等地形GeoMipMapping LOD - 消除裂縫

首先,我從高度圖加載地形,然後我把它分成塊(128×128在我的情況) 我加載所有的頂點爲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(上面)實現它。我很樂意聽到一些想法。

+0

最簡單的解決方案可能只是複製下一個南方塊的北行頂點(並適合其他方向),並確保它們在NS/EW軸上排列。您不會丟失任何數據,只需將邊界垂直點複製到相鄰的塊中,以便它們必須排隊。 – ssube 2013-03-25 20:39:22

+0

另一個簡單的解決方案是在有接縫的地方渲染兩個LOD。 – 2013-03-25 20:56:00

回答

0

請注意,索引緩衝區與您正在渲染的塊無關。相同的索引緩衝區可以(重新)用於不同的塊(我選擇突出顯示這個,因爲我不明白爲什麼你在繪製調用中對cell [i]有這種依賴性)。

然後,對於一個塊,您需要考慮其4個相鄰塊的細節等級(LOD)。如果所有4個相鄰的塊都具有與此相同的LOD,那麼除了您已經在做的事情之外,沒有什麼可做的了。如果此塊連接到LOD較低的塊,則可以應用文章中引用的技巧來隱藏這些間隙。這意味着您將需要爲這些特定情況額外預先計算的索引緩衝區(每次完整一次,導致可能有2^4 = 16個不同的索引緩衝區,或者可以分開繪圖調用以單獨處理邊界)。此外,文章中的技巧僅適用於相鄰塊之間的最大一級間隙。您或者需要確保您的詳細程度在空間上分佈,使得兩個相鄰的塊在LOD中只有1的差距。或者你找到另一個技巧/推廣這一個。遮蔽裙(垂直突出塊的邊界)可用於隱藏具有不同LOD的塊之間的寬間隙。