2010-09-25 105 views
13

我想通過使用opengl繪製體素,但它似乎並不支持。我製作了一個具有24個頂點(每個面4個頂點)的立方體繪圖函數,但是當您繪製2500個立方體時,它會降低幀速率。我希望有更好的辦法。理想情況下,我只想向顯卡發送位置,邊緣大小和顏色。我不確定是否可以通過使用GLSL來編譯指令作爲片段着色器或頂點着色器的一部分。在opengl中繪製體素(立方體)的最有效方法是什麼?

我搜索谷歌,發現有關點精靈和廣告牌小精靈(同樣的事情?)。那些可以用來替代更快地繪製立方體嗎?如果我使用6個,每個面對一個,那麼看起來這樣會將更少的信息發送到顯卡,並希望獲得更好的幀速率。

另一個想法是,也許我可以使用一個drawelements調用繪製多個立方體?

也許有一種我不知道的更好的方法?任何幫助表示讚賞。

回答

12

用立方體繪製立體像素幾乎總是錯誤的方法(例外情況是光線跟蹤)。你通常想要做的是將數據放入3D紋理中,並根據相機位置渲染切片。看到這個頁面:https://developer.nvidia.com/gpugems/GPUGems/gpugems_ch39.html,你可以通過搜索「volume rendering gpu」找到其他技術。

+0

是的,沿着與視線方向最一致的軸回到前面。首先渲染具有透明度的四邊形。一旦這個工作,你可以嘗試在每個圖層之間插入「邊」。 – phkahler 2010-09-27 16:58:15

+0

您的鏈接已被破壞。 – Ruslan 2017-05-06 18:29:32

+0

@Ruslan更新 – ybungalobill 2017-05-06 18:33:47

5

你在找什麼叫做實例。你可以看看glDrawElementsInstancedglDrawArraysInstanced有幾種可能性。請注意,這些只是作爲最近的核心操作(OGL 3.1)添加的,但已經可以延長很長時間了。

nVidia的OpenGL SDK有一個OpenGL實例化繪圖的例子。

0

首先你真的應該看看使用GLSL的OpenGL 3+。這已經是相當長一段時間的標準。其次,大多數Minecraft樣式實現在CPU側使用網格創建。該技術涉及查看所有塊位置並創建渲染所有暴露面的三角形的頂點緩衝區對象。 VBO僅在體素改變並在幀之間持續時生成。一個理想的實現可以將具有相同紋理的共面面組合成更大的面。

相關問題