三角帶
三角帶是一個三角形列表,其中每個三角形都與前一個三角形共享一邊,圖14.2顯示了一個三角帶的例子。

注意頂點列出的順序使得每三個連續(xù)的點都能構(gòu)成一個三角形。例如:
(1)頂點1、2、3構(gòu)成第一個三角形。
(2)頂點2、3、4構(gòu)成第二個三角形。
(3)頂點3、4、5構(gòu)成第三個三角形。
在圖14.2中,頂點以構(gòu)成三角形帶的順序編號。"索引"信息不再需要,因為頂點順序已經(jīng)隱式定義了三角形。通常,列表前部有頂點數(shù)目,或末尾處有一特殊碼表示"列表結(jié)束"。
注意到,頂點順序在順指針和逆時針間不斷變換(見圖14.3)。某些平臺上,需要指出第一個三角形的頂點順序,而有些平臺上順序是固定的。

最佳情況下,三角帶可用n+2個頂點存儲n個面。n很大時,每個三角形平均發(fā)送一個頂點,遺憾的是,這只是最佳情況。實踐中,很多網(wǎng)格是一個三角形帶無法表達(dá)的,不僅如此,3個以上三角形共享的頂點還是要多次發(fā)送給圖形卡。從另一方面說,每個三角形至少要發(fā)送一個頂點。但在頂點緩存機(jī)制中,有可能將每個三角形發(fā)送的頂點數(shù)降到一個以下。當(dāng)然,頂點緩存需要額外的簿記信息(索引和緩存管理數(shù)據(jù)),可是盡管這些額外信息對單個頂點來講相對較大,操作速度也會相對下降,但發(fā)送頂點數(shù)最少的系統(tǒng)在特定平臺上速度最快。
假設(shè)用一種生成三角帶的直接方法,用三角帶表示三角網(wǎng)需要的頂點數(shù)為t+2s,t為三角形數(shù)目,s為三角帶數(shù)目。每個三角帶的第一個三角形對應(yīng)三個頂點,以后每個三角形對應(yīng)一頂點。因為我們希望最小化發(fā)往圖形卡的頂點數(shù),所以三角帶的數(shù)目應(yīng)盡可能少,即三角帶越長越好。STRIPE方法給出了一種三角帶數(shù)目接近理論下限的生成手段。
另一個希望減少三角形帶數(shù)目的原因在于建立各三角形需要額外時間。從另一方面說,分別渲染兩個長為n的三角帶所需時間長于渲染一個長為2n的三角帶,即使這個三角帶中的三角形數(shù)多于兩個分開帶中三角形數(shù)量的和。于是,我們經(jīng)常通過使用退化三角形連接多個三角帶,從而將整個網(wǎng)格置于一個連續(xù)的三角帶中,退化的意思是面積為0。圖14.4顯示了如何重復(fù)頂點以將兩個三角形合并為一個。

圖14.4的含義不太明顯,但這里有四個退化三角形用于連接兩個三角帶從而維持正確的順指針、逆時針順序。頂點7、8間的邊實際包含兩個退化三角形,圖14.5指出了圖14.4中包含的三角形。

退化三角形面積為0不需要渲染,所以不會影響效率。實際上要發(fā)送到圖形卡的頂點仍然只是第一列的頂點:
1,2,3,4,5,6,7,8,9,10,11,12,13
這符合我們每三個連續(xù)頂點表示一個三角形的約定。
一些硬件(如PS2上的GS)可以跳過三角帶中的三角形,方法是通過一個頂點上的標(biāo)志位指出"不必繪制"此三角形。這給我們一種方法可以有效的從任意點開始新三角形帶而不必重復(fù)頂點或使用退化三角形。例如,圖14.4中的兩個三角帶可以如圖14.6那樣連接,其中灰色表示頂點被標(biāo)記"不必繪制"。

三角扇
三角扇和三角帶類似,但不如三角帶靈活,所以很少使用。圖14.7所示即為三角扇。

三角扇使用n+2個頂點存儲n個面,和三角帶相同。但是,第一個頂點必須為所有三角形共享,所以實踐中不太經(jīng)常能找到大型三角扇應(yīng)用的場合。并且,三角扇不能像三角帶那樣連接。所以,三角扇只能在特殊場合應(yīng)用,對一般應(yīng)用來說,三角帶更靈活。