2010-09-09 169 views
3

我目前正在開發自己的3D引擎,它在幾何渲染方面的能力非常有限,我想擴展它。我感興趣的是如何在存儲幾何對象和繪製它們的過程中完成它。在渲染中使用三角形條和三角形扇有什麼好處?

現在我的抽象僅支持(在Direct3D方面D3DPT_TRIANGLELIST)呈現幾何形狀爲三角形的泛型列表。還有其他兩種表示物體的方式 - 例如三角形條紋(D3DPT_TRIANGLESTRIP)或三角形扇形(D3DPT_TRIANGLEFAN)。

我的問題是 - 它們在現代3D引擎中繪製幾何圖形時是否實際使用?

他們的使用如何受益,並且他們在某種程度上適合遊戲創作渠道? (我的意思一樣,可以讓他們利用這些strips/fans技術發展的藝術家他們的模型?)

回答

4

有表示所述對象的 其他一些方法 - 諸如 三角形帶(D3DPT_TRIANGLESTRIP) 或三角形扇(D3DPT_TRIANGLEFAN )。

我的問題是 - 他們實際上是 在現代 3d引擎中繪製幾何時使用?

TriangleStrip經常用於地形繪製或其他與重啓帶索引(0xFFFF或0xFFFFFFFF的)或變性條一起選擇類型網格的。它們提供了每個索引存儲三角形的最佳比例。如果你有良好的頂點緩存優化網格,他們將完全統治世界。

TriangleFan存在於D3D9但從D3D10和D3D11已被刪除。我的建議,避免使用它們。他們不再好的原因是因爲就屬性插值而言(比如texcoord或法線),他們做了一件糟糕的工作,因爲你可以用它們做非常細長的三角形。

你可以說你可以做到這一點有條或三角形名單,是的,當然,但實際上做球迷的能力導致不友善(人工製品明智)齧合。通過從D3D中刪除它,內容創建工具可能會輸出tesselation,避免具有銳角的長三角形。

長和細的三角形也是不好的(性能方面),因爲它在光柵化過程中會產生次最佳的四分片段(請參見出色的Humus post on triangulation)。

當然這個建議適用於編寫高性能/高質量的渲染引擎,如果你正在做業餘愛好代碼,你可能不太關心這一點。

5

三角條是非常普遍的,因爲他們可以更有效地代表表面而不是三角名單。此外,您可以縫合視覺上分離的三角形條紋,以便可以將整個不相交的幾何形狀呈現爲單個條紋。您可以通過複製第一個條的最後一個頂點和第二個條的第一個頂點來完成此操作,從而創建兩個簡化三角形,這些三角形橋接間隙但不渲染。

風扇並不常見。他們可以派上用場來繪製凸多邊形,但即使是那些通常也可以像條帶一樣高效地完成。

+0

此外,現在圖形API暴露特殊的indice值,避免你做這樣的技巧,請參閱我的答案。 – Stringer 2010-09-09 15:33:59

2

好處是它們減少了必須傳輸到渲染引擎的數據量。發送N列表中的三角形需要指定3*N分;如果它們可以被表示爲條或風機,那麼只需要指定N+2