[ 前へ | 目次 | 次へ ]

モデルの生成・配置と各種標準モデル

ここでは、立体モデルの生成と配置方法、および色々な種類の標準立体モデルについて扱います。

スポンサーリンク


モデルとは

モデルとは、3次元の形状を表現するもので、 ポリゴンという微小な多角形の集合で構成されています。 ペーパークラフトのようなものを想像するとよいかもしれません。

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

例えば球モデルは、 ちょうど地球儀の経線と緯線で囲まれる四角形の集合のように、 規則正しく並んだ大量の四角形ポリゴンで構成されています。

VCSSLでは、自分で独自にポリゴンの集合を生成してモデルにまとめる事もできますが、 基本的な形状を表現するモデルは標準で用意されています。

これからしばらくは、この標準モデルを中心に扱っていきます。

モデルの生成

標準モデルの生成

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

- 関数仕様 -

int new〜Model ( 〜 )

この関数は標準モデルを生成し、そのモデルのIDを返します。

独自モデルの生成

自分で生成したポリゴンの集合からモデルを生成するには、 newModel関数を使用します。 なお、ポリゴンの生成や制御に関しては、また後の章で扱います。

- 関数仕様 -

int newModel ( int polygonID[ ] )

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

コピーモデルの生成

newModel関数では、すでに生成したモデルをコピーし、 同型の新しいモデルを作る事も可能です。

- 関数仕様 -

int newModel ( int copyModelID )

引数にcopyModelIDには、コピーしたいモデルのモデルIDを指定します。

モデルの配置

生成したモデルを配置するには、mountModel関数を使用します。

- 関数仕様 -

int mountModel ( int modelID, int rendererID )

引数modelIDには配置するモデルのIDを、 続く引数rendererIDにはレンダラーのIDを指定します。

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

- 関数仕様 -

int mountModel ( int modelID, int rendererID, int coordinateID )

引数modelIDには配置するモデルのIDを、 続く引数rendererIDにはレンダラーのID、 最後の引数coordinateIDには座標系のIDを指定します。

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

各種標準モデル

座標軸モデル ― AxisModel

座標軸モデルの図
座標軸モデル
赤色がX軸、緑色がY軸、青色がZ軸。つまり(X,Y,Z)=(R,G,B)となっている。

座標軸モデル(アキシス)は、3次元空間の方向を指し示すモデルです。 3DCGの舞台設計は、最初にこの座標軸モデルを配置する事から始まるとも言える、 非常に重要なモデルです。

座標軸モデルを生成するには、newAxisModel関数を使用します。

- 関数仕様 -

int newAxisModel ( float lx, float ly, float lz )

引数lx、ly、lzには、それぞれX軸、Y軸、Z軸方向の長さを指定します。

球モデル ― SphereModel

球モデルの図
球モデル
表面の滑らかさはn1とn2で調整可能。

球モデル(スフィア)を生成するには、newSphereModel関数を使用します。

- 関数仕様 -

int newSphereModel (
  float rx, float ry, float rz,
  int n1, int n2
)

引数rx、ry、rzには、底面のX、Y、Z方向半径を指定します。 続く引数n1には緯度方向のポリゴン数、n2には経度方向のポリゴン数を指定します。 モデル全体のポリゴン数はn1×n2となります。

ポリゴン数とは、曲面を表現するのに使用するポリゴンの数です。 ポリゴン数を上げるほど曲面がなめらかに、下げるほどカクカクになります。

直方体モデル ― BoxModel

直方体モデルの図
直方体モデル
一面あたり一枚のポリゴンで構成。

直方体モデル(ボックス)を生成するには、newBoxModel関数を使用します。

- 関数仕様 -

int newBoxModel ( float lx, float ly, float lz )

引数lx、ly、lzには、それぞれX軸、Y軸、Z軸方向の長さを指定します。 なお、中心(重心)が原点に一致するよう配置されます。

円柱モデル ― CylinderModel

円柱モデルの図
円柱モデル
表面の滑らかさはn1とn2で調整可能。

円柱モデル(シリンダー)を生成するには、 newCylinderModel関数を使用します。

- 関数仕様 -

int newCylinderModel (
  float rx, float ry, float rz,
  int n1, int n2
)

引数lx、ly、lzには、それぞれX軸方向半径、Y軸方向半径、高さを指定します。 なお、底面の中心が原点に一致するよう配置されます。

底面なしの円筒モデル ― TubeModel

底面なしの円筒モデル
表面の滑らかさはn1とn2で調整可能。円筒の内側は描画されない。

底面なしの円筒モデル(チューブ)を生成するには、 newTubeModel関数を使用します。

- 関数仕様 -

int newTubeModel (
  float rx, float ry, float rz,
  int n1, int n2
)

引数lx、ly、lzには、それぞれX軸方向半径、 Y軸方向半径、高さを指定します。なお、底面の中心が原点に一致するよう配置されます。

続く引数n1には緯度方向のポリゴン数、n2には高さ方向のポリゴン数を指定します。 モデル全体のポリゴン数はn1×n2となります。

円錐モデル ― ConeModel

円錐モデルの例
底面なしの円筒モデル
表面の滑らかさはn1とn2で調整可能。

円錐モデル(コーン)を生成するには、newConeModel関数を使用します。

- 関数仕様 -

int newConeModel (
  float rx, float ry, float rz,
  int n1, int n2
)

引数lx、ly、lzには、それぞれX軸方向半径、Y軸方向半径、 高さを指定します。なお、底面の中心が原点に一致するよう配置されます。

続く引数n1には緯度方向のポリゴン数、 n2には高さ方向のポリゴン数を指定します。 モデル全体のポリゴン数はn1×n2となります。

底面なしの円錐モデル ― ShadeModel

円錐モデルの図
底面なしの円筒モデル
表面の滑らかさはn1とn2で調整可能。円錐の内側は描画されない。

底面なしの円錐モデル(シェード)を生成するには、 newShadeModel関数を使用します。

- 関数仕様 -

int newShadeModel (
  float rx, float ry, float rz,
  int n1, int n2
)

引数lx、ly、lzには、それぞれX軸方向半径、Y軸方向半径、高さを指定します。 なお、底面の中心が原点に一致するよう配置されます。

続く引数n1には緯度方向のポリゴン数、n2には高さ方向のポリゴン数を指定します。 モデル全体のポリゴン数はn1×n2となります。

円盤モデル ― DiskModel

円盤モデルの図
円盤モデル
表面の滑らかさはnで調整可能。裏面は描画されない。

円盤モデル(ディスク)を生成するには、newDiskModel関数を使用します。

- 関数仕様 -

int newDiskModel ( float rx, float ry, int n )

引数lx、lyには、それぞれX軸方向半径、Y軸方向半径を指定します。 なお、中心(重心)が原点に一致するよう配置されます。

続く引数nにはポリゴン数を指定します。 ポリゴン数とは、曲面を表現するのに使用するポリゴンの数です。 ポリゴン数を上げるほど曲面がなめらかに、下げるほどカクカクになります。

面の向きと、裏面の描画省略

モデルには、表面と裏面があります。例えば円盤モデルは、 生成時にZ軸の上の方が表面となり、通常は表面しか描画されません。 つまり裏面から見ても、なにも存在しないように見えます。 見えるようにするには、 setModelCull( modelID, false, false ) で裏面の描画省略を無効化します。

プログラム例

それでは、上で扱った各種標準モデルを実際に使用してみましょう。 以下のように記述し、実行してみてください。

このプログラムを実行すると、黒い背景に様々な標準モデルが表示されます。


実行結果
様々な標準モデルが表示される。

円筒の内側は裏面なので、標準では描画されません。 描画するには円筒モデル生成後に setModelCull( tube, false, false ) ; と追記し、 裏面の描画省略を無効化してください。 底面なしの円錐モデルなどについても同様です。



スポンサーリンク



この階層の目次
[ 前へ | 目次 | 次へ ]
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