2009-10-15 138 views
0

約一半的網格使用三角形,另一半使用三角形網格。 我想卸載這些到一個頂點緩衝區對象,但我不太清楚如何做到這一點。三角形球迷都有不同的頂點數...例如,一個可能有5個和另一個7.使用頂點緩衝對象渲染不同的三角形類型和三角形扇形? (OpenGL)

VBO的使用普通三角形是相當直接,但我不知道如何使用它們與三角形粉絲或用不同的三角形類型。我很確定我需要一個索引緩衝區,但我不太清楚我需要做什麼。

我知道在運行時有多少個頂點組成每個風扇......我想我可以用它來調用類似glArrayElement

這裏任何幫助,將不勝感激!

回答

2

VBOs和索引緩衝區是一個正交的東西。 如果你還沒有使用索引緩衝區,也許一次只移動一個步驟會更明智。

所以......關於你的問題。如果你把你所有的三角形風扇採用VBO,唯一你需要拉攏他們是設置您的VBO並通過指數在它爲您的風機啓動

glBindBuffer(GL_VERTEX_BUFFER, buffer); 
    glVertexPointer(3, GL_FLOAT, 0, NULL); // 3 floats per vertex 
    for each i in fans 
     glDrawArrays(GL_TRIANGLE_FAN, indef_of_first_vertex_for_fan[i], fan_vertex_count[i]) 

編輯:我不得不說你可能會更好地將你的粉絲變成正三角形集合,並且爲所有的三角形使用glDrawArrays(GL_TRIANGLES)。每個原語的呼叫很少有效。

+0

Bahbar,謝謝你的提示!我讀過關於將粉絲轉化爲三角形的方法......但是我可能會有20萬個三角粉絲的基元。當然,我只需要這樣做一次,所以你認爲轉換它們然後做glDrawArrays或者我應該爲每個prim調用它會更便宜嗎?謝謝 – Polaris878 2009-10-15 20:41:06

+0

好吧,如果你有200K三角迷,那麼你有多少**每幀**。考慮將風扇轉換爲三角形所需的一些加載時間(或更好的離線處理時間)的成本。太陽提出了一個擴展,因爲這是10年前*的開銷太多。天花板/雜色的工作比例只是增加。 http://www.opengl.org/registry/specs/SUN/triangle_list.txt – Bahbar 2009-10-16 06:55:48

+0

爲了完整,我應該補充說[原始重啓](http://www.opengl.org/registry/specs/NV/ primitive_restart.txt)是一個你可以使用的擴展(但需要索引你的基元,你應該看看)。 [glMultiDrawArrays](http://www.opengl.org/sdk/docs/man/xhtml/glMultiDrawArrays.xml)是減少開銷的另一種嘗試,但很少在驅動程序中實際優化。 – Bahbar 2009-10-16 07:07:36