縮退ポリゴン

Last-modified: 2008-06-15 (日) 23:54:53

縮退ポリゴン
他にも次の呼び方がある
『縮退三角形』
『degenerate triangle』

BBXより=====================================================
 ストリップは「-1」では区切れるようにはなっていないようですが、
「面積0の見えない三角形を挿入して、ストリップをつないで一まとめにし
(Batching)、DrawIndexedPrimitive()を1回で済ませる」ことはできるようです。
面積0の三角形(縮退三角形 = Degenerate Triangle)は「頂点の重複」で作れる感じです。
ただ、ストリップ長が短いと、つなぐために導入した余計な頂点と三角形の処理コストが問題になるようですが。


(1) 前のストリップの頂点数が偶数の場合 → つなげるために、頂点2個増加、縮退三角形4個増加

 前のストリップの最後の頂点を1回重複させ、次のストリップの最初の頂点も1回重複させる

例. 「0→1→2→3」と「4→5→6」の2つのストリップをつなげたい場合は「0→1→2→3→3→4→4→5→6」

(2) 前のストリップの頂点数が奇数の場合 → つなげるために、頂点3個増加、縮退三角形5個増加

 前のストリップの最後の頂点を2回重複させ、次のストリップの最初の頂点を1回重複させる

例. 「0→1→2」と「4→5→6」の2つのストリップをつなげたい場合は「0→1→2→2→2→4→4→5→6」

 インデックスバッファを使っての描画の場合、頂点重複によるコストは次の(1)~(3)な感じと考えました。

(1) インデックスバッファのサイズと、ビデオチップへのインデックスデータの転送量が、頂点インデックス2個または3個分増える

 これはどうしようもない感じです

(2) 頂点データの読み込みと、頂点データ単位の処理(頂点シェーダなど)が、頂点データ2個または3個分増える

 重複頂点は頂点キャッシュにヒットするのでこの分はほぼ省略されると思われます

(3) 表示する必要のない、面積0の三角形の処理が4個または5個分増える


 通常、トライアングルセットアップエンジンの最初の処理で、
辺のベクトルの外積で面積を計算し、三角形の面積が0に近いかどうかを判定し、
面積が0に近い三角形を捨てている(カリング)と思われます。
この外積の符号で同時に裏面カリング(Backface Culling)の判定も行われます。
ですから、面積0の縮退三角形は、裏面カリングで捨てられる
三角形と同じ程度の処理コストがかかっていると思われます。

 「-1」で区切れれば、上記のコストはなくなる感じですが。