ポリゴンの生成・配置と各種ポリゴン
ここでは、ポリゴンの生成と配置方法、および色々な種類のポリゴンについて扱います。
スポンサーリンク
ポリゴンとは
ポリゴンとは、3次元の微小な面などを表現するもので、 3次元形状を構成する最も細かい基本要素となるものです。 一般に、モデルは複数のポリゴンによって構成されており、 特に曲面を持つモデルでは大量のポリゴンを使用します。
なお、ポリゴンは英語で多角形という意味であるため、 厳密な意味でのポリゴンは三角形や四角形などに限定されます。 しかしVCSSL Graphics3Dでは少し意味を拡張し、 「ベクトルの集合で構成される描画基本要素」の事をすべてポリゴンと呼びます。 従って三角形や四角形はもちろん、点や線、 加えて文字や画像などの描画基本要素もポリゴンと呼びます。
ポリゴンの生成
ポリゴンを生成するには、new〜Polygon関数を使用します。 〜の部分にはポリゴンの種類に固有の名称が入ります。 ポリゴンには様々な種類が存在しますが、各ポリゴンの具体的な生成に関しては次章で扱います。
- 関数仕様 -
この関数はポリゴンを生成し、そのモデルのIDを返します。
なお、ポリゴンの集合は、newModel関数を用いてモデルにまとめる事が可能です
- 関数仕様 -
引数polygonIDには、モデルを構成するポリゴン集合のIDを配列で指定します。 この関数は、受け取ったポリゴンの集合を一つのモデルにまとめ、 そのモデルのIDを返します。ポリゴン集合をモデルにまとめる利点は、 平行移動や回転などを一括して行える事です。
ポリゴンの配置
生成したポリゴンをモデルにまとめず、直接配置するには、mountPolygon関数を使用します。
- 関数仕様 -
引数polygonIDには配置するポリゴンのIDを、 続く引数rendererIDにはレンダラーのIDを指定します。
なお、次のように座標系を指定して配置する事も可能です。 座標系に関しては、本文書の後半で扱います。
- 関数仕様 -
引数polygonIDには配置するポリゴンのIDを、 続く引数rendererIDにはレンダラーのID、 最後の引数coordinateIDには座標系のIDを指定します。
なお、VCSSL3.0以前の世代では、配置にはaddPolygon関数を使用していました。 しかし、add〜という関数名としては引数の順序が混乱を招くという理由により、 VCSSL3.1以降では、関数名を上記のmountPolygonに変えたものが追加されました。 つまりaddPolygon関数とmountPolygon関数は、名称が異なるだけで全く同一のものです。
各種ポリゴン
点ポリゴン ― PointPolygon
点ポリゴンは、点を表現するためのポリゴンです。 本来は小さな点を表現するために使うものですが、 球を大きな点ポリゴンで代用するといった使い方もできます。 その場合立体感は無くなりますが、描画負荷を大幅に軽減する事が可能です。
点ポリゴンを生成するには、newPointPolygon関数を使用します。
- 関数仕様 -
float x, float y, float z,
float size
)
引数( x, y, z )で中心の位置を、続く引数sizeで半径を指定します。
線ポリゴン ― LinePolygon
線ポリゴンは、直線を表現するためのポリゴンです。1ピクセルの細い線のほか、遠近感のある太い線も扱えます。
線ポリゴンを生成するには、newLinePolygon関数を使用します。
- 関数仕様 -
float x1, float y1, float z1,
float x2, float y2, float z2
)
三角形ポリゴン ― TrianglePolygon
三角形ポリゴンは、微小な三角形を表現するためのポリゴンです。
三角形ポリゴンを生成するには、newTrianglePolygon関数を使用します。
- 関数仕様 -
float x1, float y1, float z1,
float x2, float y2, float z2,
float x3, float y3, float z3
)
引数( x1, y1, z1 )で頂点1の位置を、( x2, y2, z2 )で頂点2の位置を、 ( x3, y3, z3 )で頂点3の位置を指定します。
三角形ポリゴンには、裏表の向きが存在します。 頂点1、2、3が反時計回りに見える方向から見ると、 それが表面となります。別の言い方をすると、 頂点1、2、3の回転方向へ右ネジを回すと進む向きが、 表面の方向ベクトルとなります。
三角形ポリゴンは、表側から見た場合のみ描画され、 裏側から見てもなにも存在しないように見えます。
四角形ポリゴン ― QuadranglePolygon
四角形ポリゴンは、微小な四角形を表現するためのポリゴンです。 四角形ポリゴンを生成するには、newQuadranglePolygon関数を使用します。
- 関数仕様 -
float x1, float y1, float z1,
float x2, float y2, float z2,
float x3, float y3, float z3,
float x4, float y4, float z4
)
引数( x1, y1, z1 )で頂点1の位置を、 ( x2, y2, z2 )で頂点2の位置を、( x3, y3, z3 )で頂点3の位置を、 ( x4, y4, z4 )で頂点4の位置を指定します。
四角形ポリゴンには、裏表の向きが存在します。 頂点1、2、3、4が反時計回りに見える方向から見ると、 それが表面となります。別の言い方をすると、 頂点1、2、3、4の回転方向へ右ネジを回すと進む向きが、 表面の方向ベクトルとなります。
四角形ポリゴンは、表側から見た場合のみ描画され、 裏側から見てもなにも存在しないように見えます。
画像ポリゴン ― ImagePolygon
画像ポリゴンは、画像や、別のレンダラーでの描画結果など、 グラフィックスデータの内容を表示するためのポリゴンです。 画像ポリゴンで表現される画像は、 いわゆるテクスチャーマッピングでは無く、 常に画面の方向を向いている画像として扱われます。
画像スポリゴンを生成するには、newImagePolygon関数を使用します。
- 関数仕様 -
float x, float y, float z,
float lx, float ly,
int graphicsID,
)
引数( x, y, z )で表示位置を、 続く引数lx、lyで表示する際の大きさ(幅と高さ)を、 最後の引数graphicsIDで画像のグラフィックスデータのIDを指定します。
画像の位置は、画像の左下が( x, y, z )に一致するように表示されます。 左上では無い事にご注意ください。 また、画像の大きさ(幅と高さ)は、画面上のピクセル数やポイント数では無く、 3次元空間における距離単位で扱われます。
・オフセット設定
画像ポリゴンは、画像の左下が指定位置に一致するように描画されます。 しかし、これを画像中心に一致するようにしたい場合などもあります。 そのような場合には、オフセット設定を行います。オフセット設定とは、 テキストポリゴンや画像ポリゴンを、描画時に上下左右方向にずらす設定です。
- 関数仕様 -
int polygonID,
float dx, float dy,
)
最初の引数で設定対象のポリゴンIDを、続く引数dxで右方向へのオフセット量を、 dyで上方向へのオフセット量を指定します。すると、描画時に画面上下左右方向へオフセットされます。 なお、オフセット量は、画面上のピクセル数では無く、3次元空間での距離単位で扱われます。
テキストポリゴン ― TextPolygon
テキストポリゴンは、文字列を表現するためのポリゴンです。 テキストポリゴンで表現される文字列は、いわゆる立体文字では無く、 常に画面の方向を向いている文字として扱われます。 モデルの横にコメントなどを添えるのに使用します。
テキストポリゴンを生成するには、newTextPolygon関数を使用します。
- 関数仕様 -
float x, float y, float z,
float size,
string text,
)
引数( x, y, z )で表示位置を、続く引数sizeで文字の大きさ(高さ)を、 最後の引数textで文字を指定します。textの内容が単一の文字でなく文字列の場合は、 画面上にも文字列が表示されます。
文字の位置は、textに指定した最初の文字の左下が ( x, y, z )に一致するように表示されます。 また、文字の大きさ(高さ)は、画面上のピクセル数やポイント数では無く、 3次元空間における距離単位で扱われます。
・フォント設定
テキストポリゴンのフォントを指定するには、setPolygonFont関数を使用します。 ただし、どのようなフォントが使用できるかは、環境に依存しますのでご注意ください。
- 関数仕様 -
最初の引数polygonIDで設定対象のポリゴンのIDを、続く引数fontNameでフォント名を指定します。
・オフセット設定
テキストポリゴンは、文字の左下が指定位置に一致するように描画されます。 しかし、これを中心に一致するようにしたい場合などもあります。 そのような場合には、オフセット設定を行います。 オフセット設定とは、テキストポリゴンやグラフィックスポリゴンを、 描画時に上下左右方向にずらす設定です。
オフセット設定を行うには、setPolygonOffset関数を使用します。
- 関数仕様 -
int polygonID,
float dx, float dy,
)
最初の引数で設定対象のポリゴンIDを、続く引数dxで右方向へのオフセット量を、 最後の引数で上方向へのオフセット量を指定します。 すると、描画時に画面上下左右方向へオフセットされます。
なお、オフセット量は、画面上のピクセル数やポイント数では無く、 3次元空間における距離単位で扱われます。
プログラム例
それでは、これまでに扱った各種ポリゴン(グラフィックスとテキストを除く)を、実際に使用してみましょう。以下のように記述し、実行してみてください。
このプログラムを実行すると、黒い背景に様々なポリゴンが表示されます。