我正在學習WebGL從這個網站:http://learningwebgl.com/blog/?p=370什麼是webgl中的VertexIndices?
我不明白,什麼是VertexIndices,以及爲什麼金字塔沒有他們?
我正在學習WebGL從這個網站:http://learningwebgl.com/blog/?p=370什麼是webgl中的VertexIndices?
我不明白,什麼是VertexIndices,以及爲什麼金字塔沒有他們?
爲3D對象定義幾何圖形時,有兩個基本元素正在使用:頂點和三角形。頂點只是由XYZ座標定義的空間位置(通常是一些附加信息,如紋理座標),三角形只是三個頂點。
定義頂點非常簡單。你通常只是提供一個位置列表,如下所示:
[
1.0, 2.0, 3.0, // vertex 0
4.0, 5.0, 6.0, // vertex 1
7.0, 8.0, 9.0, // vertex 2
// etc..
]
所以現在的問題是我們該如何製作三角形呢?最直接的方式就是說每個三個頂點集合都隱含一個三角形(所以上面的數組將定義一個三角形)。這很容易,因爲它不需要任何附加信息,只需提供三個頂點,剩下的就是硬件。這被稱爲非索引幾何,這是金字塔在您鏈接的教程中使用的方法。
問題是,在大多數模型中,幾個三角形都將共享相同的頂點。想想立方體的角落:至少有三個三角形都需要使用同一個點。使用非索引幾何時,您需要將陣列中該頂點的信息複製三次。這不是非常有效,對於大型複雜網格,最終會產生大量冗餘數據。我們可以通過使用索引幾何來解決這個問題。
帶索引的幾何圖形只需定義一次網格中的每個頂點,然後提供第二個整數索引,它將索引到您的頂點數組中,並基本上「連接點」以告訴您的圖形卡組成三角形的哪些點。
[
0, 1, 2, // Triangle 0, uses vertices 0, 1, and 2
3, 2, 1, // Triangle 2, uses vertices 3, 2, and 1
// etc...
]
這樣做效率更高,節省內存,並且通常渲染速度也更快。這是多維數據集在教程中使用的方法。
這兩種方法都可以正常工作,並且兩種方法都有更好的選擇,但通常您會看到大多數專業應用程序使用索引幾何,因爲內存使用率較低。
這是否清除了所有東西?
謝謝兄弟,我明白了。 – 2011-12-17 22:46:06
我認爲這是有用的補充說,如果一個頂點在幾個三角形之間共享,並且如果每個邊沒有應用相同的紋理,點必須與其他紋理座標重複。這在一定程度上降低了索引的興趣,但仍然可以節省相當多的內存。 – GameAlchemist 2014-03-14 11:53:39