[ 前へ | 目次 | 次へ ]

ポリゴンの生成・配置と各種ポリゴン

ここでは、ポリゴンの生成と配置方法、および色々な種類のポリゴンについて扱います。

スポンサーリンク


ポリゴンとは

ポリゴンとは、3次元の微小な面などを表現するもので、 3次元形状を構成する最も細かい基本要素となるものです。 一般に、モデルは複数のポリゴンによって構成されており、 特に曲面を持つモデルでは大量のポリゴンを使用します。

球面をワイヤーフレームで描画した図
球モデルのポリゴン集合
球モデルは、地球儀の経線と緯線で囲まれる四角形のように、規則正しく並んだ大量の四角形ポリゴンで構成されている。

なお、ポリゴンは英語で多角形という意味であるため、 厳密な意味でのポリゴンは三角形や四角形などに限定されます。 しかしVCSSL Graphics3Dでは少し意味を拡張し、 「ベクトルの集合で構成される描画基本要素」の事をすべてポリゴンと呼びます。 従って三角形や四角形はもちろん、点や線、 加えて文字や画像などの描画基本要素もポリゴンと呼びます。

ポリゴンの生成

ポリゴンを生成するには、new〜Polygon関数を使用します。 〜の部分にはポリゴンの種類に固有の名称が入ります。 ポリゴンには様々な種類が存在しますが、各ポリゴンの具体的な生成に関しては次章で扱います。

- 関数仕様 -

int new〜Polygon ( 〜 )

この関数はポリゴンを生成し、そのモデルのIDを返します。

なお、ポリゴンの集合は、newModel関数を用いてモデルにまとめる事が可能です

- 関数仕様 -

int newModel ( int polygonID[ ] )

引数polygonIDには、モデルを構成するポリゴン集合のIDを配列で指定します。 この関数は、受け取ったポリゴンの集合を一つのモデルにまとめ、 そのモデルのIDを返します。ポリゴン集合をモデルにまとめる利点は、 平行移動や回転などを一括して行える事です。

ポリゴンの配置

生成したポリゴンをモデルにまとめず、直接配置するには、mountPolygon関数を使用します。

- 関数仕様 -

int mountPolygon ( int polygonID, int rendererID )

引数polygonIDには配置するポリゴンのIDを、 続く引数rendererIDにはレンダラーのIDを指定します。

なお、次のように座標系を指定して配置する事も可能です。 座標系に関しては、本文書の後半で扱います。

- 関数仕様 -

int mountPolygon ( int polygonID, int rendererID, int coordinateID )

引数polygonIDには配置するポリゴンのIDを、 続く引数rendererIDにはレンダラーのID、 最後の引数coordinateIDには座標系のIDを指定します。

mountModel と addModel との関係
なお、VCSSL3.0以前の世代では、配置にはaddPolygon関数を使用していました。 しかし、add〜という関数名としては引数の順序が混乱を招くという理由により、 VCSSL3.1以降では、関数名を上記のmountPolygonに変えたものが追加されました。 つまりaddPolygon関数とmountPolygon関数は、名称が異なるだけで全く同一のものです。

各種ポリゴン

点ポリゴン ― PointPolygon

点ポリゴンの図
点ポリゴン
丸い形をした、点を表現するための描画要素。

点ポリゴンは、点を表現するためのポリゴンです。 本来は小さな点を表現するために使うものですが、 球を大きな点ポリゴンで代用するといった使い方もできます。 その場合立体感は無くなりますが、描画負荷を大幅に軽減する事が可能です。

点ポリゴンを生成するには、newPointPolygon関数を使用します。

- 関数仕様 -

int newPointPolygon (
  float x, float y, float z,
  float size
)

引数( x, y, z )で中心の位置を、続く引数sizeで半径を指定します。

線ポリゴン ― LinePolygon

線ポリゴンの図
線ポリゴン
2つの頂点ベクトルを結ぶ、線を表現するための描画要素。

線ポリゴンは、直線を表現するためのポリゴンです。1ピクセルの細い線のほか、遠近感のある太い線も扱えます。

線ポリゴンを生成するには、newLinePolygon関数を使用します。

- 関数仕様 -

int newLinePolygon (
  float x1, float y1, float z1,
  float x2, float y2, float z2
)

三角形ポリゴン ― TrianglePolygon

三角形ポリゴンの図
三角形ポリゴン
3つの頂点ベクトルを結ぶ、三角形を表現するための描画要素。

三角形ポリゴンは、微小な三角形を表現するためのポリゴンです。

三角形ポリゴンを生成するには、newTrianglePolygon関数を使用します。

- 関数仕様 -

int 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

四角形ポリゴンの図
四角形ポリゴン
4つの頂点ベクトルを結ぶ、四角形を表現するための描画要素。

四角形ポリゴンは、微小な四角形を表現するためのポリゴンです。 四角形ポリゴンを生成するには、newQuadranglePolygon関数を使用します。

- 関数仕様 -

int 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関数を使用します。

- 関数仕様 -

int newGraphicsPolygon (
  float x, float y, float z,
  float lx, float ly,
  int graphicsID,
)

引数( x, y, z )で表示位置を、 続く引数lx、lyで表示する際の大きさ(幅と高さ)を、 最後の引数graphicsIDで画像のグラフィックスデータのIDを指定します。

画像の位置は、画像の左下が( x, y, z )に一致するように表示されます。 左上では無い事にご注意ください。 また、画像の大きさ(幅と高さ)は、画面上のピクセル数やポイント数では無く、 3次元空間における距離単位で扱われます。

・オフセット設定

画像ポリゴンは、画像の左下が指定位置に一致するように描画されます。 しかし、これを画像中心に一致するようにしたい場合などもあります。 そのような場合には、オフセット設定を行います。オフセット設定とは、 テキストポリゴンや画像ポリゴンを、描画時に上下左右方向にずらす設定です。

- 関数仕様 -

int setPolygonOffset (
  int polygonID,
  float dx, float dy,
)

最初の引数で設定対象のポリゴンIDを、続く引数dxで右方向へのオフセット量を、 dyで上方向へのオフセット量を指定します。すると、描画時に画面上下左右方向へオフセットされます。 なお、オフセット量は、画面上のピクセル数では無く、3次元空間での距離単位で扱われます。

テキストポリゴン ― TextPolygon

テキストポリゴンは、文字列を表現するためのポリゴンです。 テキストポリゴンで表現される文字列は、いわゆる立体文字では無く、 常に画面の方向を向いている文字として扱われます。 モデルの横にコメントなどを添えるのに使用します。

テキストポリゴンを生成するには、newTextPolygon関数を使用します。

- 関数仕様 -

int newTextPolygon (
  float x, float y, float z,
  float size,
  string text,
)

引数( x, y, z )で表示位置を、続く引数sizeで文字の大きさ(高さ)を、 最後の引数textで文字を指定します。textの内容が単一の文字でなく文字列の場合は、 画面上にも文字列が表示されます。

文字の位置は、textに指定した最初の文字の左下が ( x, y, z )に一致するように表示されます。 また、文字の大きさ(高さ)は、画面上のピクセル数やポイント数では無く、 3次元空間における距離単位で扱われます。

・フォント設定

テキストポリゴンのフォントを指定するには、setPolygonFont関数を使用します。 ただし、どのようなフォントが使用できるかは、環境に依存しますのでご注意ください。

- 関数仕様 -

int setPolygonFont ( int polygonID, string fontName )

最初の引数polygonIDで設定対象のポリゴンのIDを、続く引数fontNameでフォント名を指定します。

・オフセット設定

テキストポリゴンは、文字の左下が指定位置に一致するように描画されます。 しかし、これを中心に一致するようにしたい場合などもあります。 そのような場合には、オフセット設定を行います。 オフセット設定とは、テキストポリゴンやグラフィックスポリゴンを、 描画時に上下左右方向にずらす設定です。

オフセット設定を行うには、setPolygonOffset関数を使用します。

- 関数仕様 -

int setPolygonOffset (
  int polygonID,
  float dx, float dy,
)

最初の引数で設定対象のポリゴンIDを、続く引数dxで右方向へのオフセット量を、 最後の引数で上方向へのオフセット量を指定します。 すると、描画時に画面上下左右方向へオフセットされます。

なお、オフセット量は、画面上のピクセル数やポイント数では無く、 3次元空間における距離単位で扱われます。

プログラム例

それでは、これまでに扱った各種ポリゴン(グラフィックスとテキストを除く)を、実際に使用してみましょう。以下のように記述し、実行してみてください。

このプログラムを実行すると、黒い背景に様々なポリゴンが表示されます。

各種ポリゴンを配置した図
実行結果
様々なポリゴンが表示される。



スポンサーリンク



この階層の目次
[ 前へ | 目次 | 次へ ]
RINEARN からのお知らせ
※ VCSSL は RINEARN が開発しています。

Exevalator 2.2 をリリース、TypeScript 対応によりWebブラウザ上で動作可能に
2024-10-22 - オープンソースの式計算ライブラリ「Exevalator(エグゼバレータ)」の2.1をリリースしました。新たに TypeScript に対応し、Webブラウザ上での式計算にも使えるようになりました。詳細を解説します。

アシスタントAI作成の舞台裏(その2、作成編)
2024-10-12 - アシスタントAIの作成方法解説の後編です。実際にChatGPTの「GPTs」機能を用いて、アシスタントAIを作成する手順や、独自の知識をもたせたり、精度を出すためのノウハウなどを解説しています。

アシスタントAI作成の舞台裏(その1、基礎知識編)
2024-10-07 - アシスタントAI作成方法解説の前編です。今回はまず、アシスタントAIを作る前に抑えておきたい、基礎知識を延々と解説しています。そもそもLLM型AIとはどんな存在か? RAGとは何か? 等々です。

ソフトの利用をサポートしてくれるアシスタントAIを提供開始!
2024-09-20 - RINEARN製ソフトの使い方の質問応答や、一部作業のお手伝いをしてくれる、アシスタントAIを提供開始しました。ChatGPTアカウントさえあれば、誰でも無料で使用できます。使い方を解説します。

Exevalator 2.1 をリリース、新たに Visual Basic に対応
2024-07-28 - オープンソースの式計算ライブラリ「Exevalator(エグゼバレータ)」の2.1をリリースしました。今回から、新たに Visual Basic(VB.NET)でも使用できるようになりました。詳細を解説します。

関数電卓 RINPn(りんぷん)、Esc キーで計算式の一発クリアが可能に
2024-07-20 - 関数電 RINPn の Ver.1.0.2 をリリースしました。今回から、キーボードの「 Esc 」キーを押すと、入力中の計算式を一発でクリアできるようになりました。詳細を解説します。

Exevalator 2.0 をリリース、互換性に注意が必要なバグ修正が 1 件
2024-07-14 - オープンソースの式計算ライブラリ「Exevalator (エグゼバレータ)」の2.0をリリースしました。今回の更新では、互換性に注意を要する 1 件のバグ修正があります。詳細を解説します。

各ソフトウェアをアップデート、リニアングラフのコマンド拡張やVCSSLの英語対応など
2024-02-05 - 各ソフトの一斉アップデートの内容をお知らせします。今回は、リニアングラフのコマンド機能を大幅拡張したのがメインです。また、VCSSLのメッセージ類の英語対応も行いました。

Vnano の Ver.1.1 で実装した反復計算高速化の内側
2024-01-17 - 前回のお知らせ記事の続編です。スクリプトエンジン Vnano の Ver.1.1 において実施した高速化を、エンジン内部の実装面から掘り下げて解説します。

スクリプトエンジン Vnano の Ver.1.1 を公開、同じ内容の反復実行が劇的に高速化
2023-12-22 - スクリプトエンジン Vnano の最新版を公開しました。同じ計算式やスクリプトを反復実行する速さが、大幅に向上しました。次期版リニアングラフ3D内での活用例を交えつつ、詳しく解説します。

新着
[公式ガイドサンプル] 各種の図形や画像を描画する

「VCSSL 2DCG開発ガイド」内のサンプルコードです。図形や画像などを描画します。
2022-12-16
角度の「度」とラジアンとを相互変換し、図示もするツール

45度などの「度」の値と、ラジアンの値とを相互に変換できるツールです。対応する角度の図示もできます。
2022-11-22
[公式ガイドサンプル] 立体モデルを回転させるアニメーション

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを、アニメーションで回転させ続けます
2022-11-18
[公式ガイドサンプル] 立体モデルを回転させる

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを、指定した角度だけ回転させます。
2022-11-17
[公式ガイドサンプル] 四則演算の計算順序や、カッコを使った順序指定

「VCSSLスタートアップガイド」内のサンプルコードです。四則演算が計算される順序や、カッコを使って順序を指定する方法を例示します。
2022-10-31