ポリゴンのプリミティブタイプの違いと使いどころ


OpenGL などの描画 API を使ってポリゴンを描画する時にプリミティブタイプを選択することになります。一般的には下図に示したようなプリミティブから選択することになります。左から「トライアングルリスト(triangle list)」、「トライアングルストリップ(triangle strip)」、「トライアングルファン(triangle fan)」です。

一番直感的なのはトライアングルリストだと思います。トライアングルストリップ、トライアングルファンに至ってはわざわざ選択する必要があるのかどうかもすぐには感じられません。とはいえ、描画手段が用意されているのですから何かしら使いどころはあるはずです。一体、それぞれの使いどころはどのようなところなのでしょうか?



トライアングルリスト

トライアングルリストはとにかく直感的で扱いやすいところが特徴です。その反面、「ポリゴン数 x 3」(x Byte 数)というその他のプリミティブに比べるとデータ量が多くなってしまうことが難点です。

トライアングルストリップ

トライアングルストリップは最初のポリゴンは3頂点分のデータが必要ですが、その後は1頂点分のデータ量で1ポリゴンを描画し続けることが出来ます。トライアングルリストと比べるとポリゴン数が増えれば増えるほど経済的に有利になります。また、同じポリゴン数であればトライアングルリストよりも描画効率が良くなります。そのため可能であればトライアングルストリップとして描画すると良いでしょう。

しかし、マテリアルなどの関係上どうしてもつなげられないポリゴンも出来てしまいます。そうした場合は、

  • 複数のトライアングルリストとしてまとめて描画する
  • 三角形一つのトライアングルストリップとして一つずつ描画する

とすることになります。

トライアングルファン

一番使いどころがなさそうなトライアングルファンですが、次のような場合には有用です。

  • 多角形ポリゴンを三角形ポリゴンに分割する
  • 三角形ポリゴンをある矩形領域に収まるように分割する

まずは「多角形ポリゴンを三角形ポリゴンに分割する」場合を考えてみます。なぜモデルデータにポリゴンを使うのかでも書きましたが、一般的には三角形ポリゴンでないと描画が出来ません。しかし、モデルデータとして多角形のデータが含まれている場合は三角形に分割して描画 API に渡すことになります。その際はトライアングルファンとして描画すれば、トライアングルリストなどで描画するよりも簡単に出来ます。

次に「三角形ポリゴンをある矩形領域に収まるように分割する」場合を考えます。下図の様な矩形領域にポリゴンを収めたいとします。ポリゴンと矩形の各辺との交点を結ぶと三角形から多角形になります。ここからは先ほどと同じでこの多角形を三角形に分割し、トライアングルファンとすれば良いです。

このようにプリミティブタイプには複数の種類が存在しますが、それぞれの特性を理解して場合によって使い分けると、効率的に処理することが出来ます。

Posted in: CG, OpenGL by satoyuichi No Comments