» 詳しい使用方法や、エラーで展開できない際の対応方法などはこちら
[公式ガイドサンプル] ポリゴンを生成して3D空間に配置する
このプログラムは、 「 VCSSL 3DCG開発ガイド 」 の 「 ポリゴンの生成・配置と各種ポリゴン 」 の回に登場するサンプルコードです。 ここでは、そのサンプルコードを実行環境ごとダウンロードして、実際に実行してみる事ができます。 プログラミングガイド的な詳しい解説については、上記ページをご参照ください。
スポンサーリンク
使用方法
ダウンロードと展開(解凍)
まず、PC(スマホは未対応)で上の画面の「 ダウンロード 」ボタンを押してください。 するとZIP形式で圧縮されたファイルがダウンロードされます。
その後、ZIPファイルを右クリックして「すべて展開」や「ここに展開」などで展開(解凍)してください。 展開が成功すると、ZIPファイルと同じ名前のフォルダができ、その中にZIPファイルの中身が入っています。
» 展開がエラーで止まってしまう場合や、ファイル名が文字化けしてしまう場合は…
プログラムの起動
Windows をご使用の場合
上記でZIPファイルを展開したフォルダ内にある、以下のバッチファイルをダブルクリック実行してください:
もしプログラムを書き変えながら使いたい場合は、代わりに「 VCSSL_Editor__プログラム編集はこちら.bat 」を実行してください。
正常に起動できると、初回のみ、Java実行環境を入手するか等を尋ねられるので、適時答えて済ませると、プログラムが起動します。 2回目以降はすぐに起動します。
Linux 等をご使用の場合
ZIPファイルを展開したフォルダ内へコマンドライン端末で cd して、以下の通り入力して実行してください:
(プログラムの内容を書き変えながら使いたい場合は、代わりに VCSSL_Editor.jar を実行)
» javaコマンドが使用できない等のエラーが表示される場合は…
起動後
起動すると、3DCGの表示ウィンドウが表れ、そこに3D空間の内容が表示されます(下図)。 表示ウィンドウ上で、マウスでの視点操作や拡大・縮小も可能です。
今回のサンプルコードでは、上図の通り、 3D空間内に点や線、三角形や四角形などの基本的な図形を配置しています。 VCSSLでは、このような基本的な形をした、3D空間内での描画要素を「 ポリゴン 」と呼びます。 複雑な立体形状も、ポリゴンをたくさん組み合わせて構成されます。
なお、カラフルな3つの矢印は、3D空間の向きやスケール感を把握しやすくするために配置している座標軸モデルで、 赤色がX軸、緑色がY軸、青色がZ軸の方向を表しています。矢印の長さはちょうど 3.0 です。
ポリゴンの裏面を描画するには?
ところで、マウスで視点を操作するとわかるのですが、標準では下図の通り、三角形および四角形のポリゴンの裏面は描画されません:
これは、三角形および四角形ポリゴンが、通常は立体の表面を構成する要素に使用される事が多いため、 見る機会の少ない裏面の描画を省いて負荷を軽減する「カリング」という機能が、標準で働いているからです。 カリングは、必要に応じて無効化する事もできます。詳細は下のコード解説の最後で触れます。
コード解説
このプログラムのコードはVCSSLで記述されています。
内容を書き変えて改造したい場合には、 プログラムのコード「 Polygon.vcssl 」をテキストエディタで開いて改造してください。 スクリプト言語なので、コンパイラなどの別ソフトは不要で、コードを書き換えるだけでOKです。 VCSSLはC系の単純な文法の言語なので、C言語などに触れた事のある方なら簡単に読めると思います。
コード全体は以下の通りです。
以上です。50行程度の比較的短いコードですね。 ポリゴン1個ずつの生成・配置に要している行は、それぞれ2〜3行ほどです。
このコードは 「 VCSSL 3DCG開発ガイド 」 の 「 ポリゴンの生成・配置と各種ポリゴン 」 の回に登場するサンプルコードなので、詳しい説明はそちらのページをご参照ください。
以下では、コード先頭から軽く流し読みする感じで、各行で何をやっているのかを見ていきます。 まずは先頭です:
最初の行は文字化け対策で、コードを書いてあるファイルの文字コードが「Shift_JIS」である事を明示しています。 文字コードは他にも「UTF-8」などを使用できます。
その後の2行は、VCSSLの標準ライブラリから、3DCGを扱うための 「 Graphics3D 」ライブラリと 「 Graphics3DFramework 」ライブラリを読み込んでいます。 Graphics3D ライブラリだけでも3DCGの描画は可能なのですが、それだと表示画面の構築や、毎秒数十回の画面更新処理などを、 自分で書く必要が生じます(参照)。 ただ、そういった処理は大体決まりきった内容なので、自分で書くのは面倒です。 そこで、そういった土台周りの処理を自動で行ってくれる、一種の簡易フレームワークが Graphics3DFramework ライブラリです(参照)。
続きです:
ここでは onStart という関数を宣言していますが、この関数はコード内のどこからも呼んでいません。 では一体どこから呼ばれて実行されるのかというと、先ほど読み込んだ Graphics3DFramework です。
Graphics3DFramework を import したプログラムでは、 起動と同時に背後でフレームワークが動き始め、あとは適時、必要な処理を自動で行ってくれます。 プログラム全体の「流れ」も、フレームワークがコントロールします。 ではコード内には何を書くかというと、特定のタイミングでフレームワークに行ってほしい処理を、 あらかじめ決まっている名前の関数の中に書きます。 例えば最初に一回だけ行いたい処理は onStart 関数、毎秒数十回の画面更新毎に行いたい処理は onUpdate 関数、といった具合です (参照)。 するとフレームワークが、適切なタイミングでその関数を実行してくれます。
さて、ここで宣言している onStart 関数は、フレームワークが起動後に、 画面構築や3D描画エンジン(レンダラー)の生成などの準備が終わった段階で、1回だけ呼び出されます (引数には、3D描画エンジンのID番号が渡されます。これは、各種設定や立体の配置などを行う際に使用します)。 通常はこの onStart 関数内に、立体を3D空間に配置したり、初期設定を行ったり、といった処理を記述します。
実際に今回の onStart 関数の内容を見ていきましょう。先頭は:
のように、まず画面の初期設定を行って、さらに3D空間を把握しやすくするための座標軸モデルを配置しています。
そこからが、今回のサンプルコードのメインテーマである、ポリゴンを生成して配置していく処理です。 最初の点ポリゴンの生成と配置をクローズアップして見てみましょう:
ここで呼んでいる「 newPointPolygon 」という名前の関数は、 点ポリゴンを生成する関数です。 他にも、「 new〜Polygon 」という名前で、線や三角形、四角形ポリゴンなどを生成する関数があります。 一覧と詳細については、VCSSL 3DCG開発ガイドの 「 ポリゴンの生成・配置と各種ポリゴン 」の回をご参照ください。
さて、ポリゴン生成関数( new〜Polygon 関数 )は、 生成したポリゴンに整数のID番号を割りふって、それを戻り値として返します。 ポリゴンを配置したり変形・移動させたりする際は、 それが「どのポリゴンに対する操作なのか」を指定するために、このID番号が必要になります。
実際に上では、生成した点ポリゴンのID番号を、int 型の変数 point に控えています。 そして、その直後に mountPolygon 関数で、そのID番号を引数に渡して、 点ポリゴンを3D空間に配置しています。
さて、コードの残りの部分です:
ここでは、先ほどの点ポリゴンの場合と全く同じ要領で、線、三角形、四角形ポリゴンを生成して、3D空間に配置しています。 重なると見づらいので、 movePolygon 関数でポリゴンを移動させて、位置を微調整したりもしています。 ここでも、移動対象のポリゴンを指定するために、変数に控えておいたポリゴンのID番号を引数に渡しています。
ところで、冒頭でも少し触れた通り、標準ではポリゴン裏面の描画を省く「カリング」という機能が効くため、 三角形および四角形ポリゴンの裏面は描画されません:
裏面を描画させたい場合は、setPolygonCull 関数で、カリングを無効化します。 いまの場合は、onStart 関数内の最後に、以下のように追記すれば OK です:
これで、ちゃんと裏面が描画されるようになります。
※ 点や線に比べて、三角形や四角形がやや暗い色に見えるのは、面のあるポリゴンには光の加減が加味されるためです。
コード内容は以上です。
ライセンス
このVCSSL/Vnanoコード( 拡張子が「.vcssl」や「.vnano」のファイル )は実質的な著作権フリー(パブリックドメイン) である CC0 の状態で公開しています※。 記事中にC言語/C++/Java言語などでのサンプルコードが掲載されいてる場合は、それらについても同様です。 そのままでのご利用はもちろん、改造や流用などもご自由に行ってください。
※ ただし、このコードの配布フォルダ内には、ダウンロード後すぐに実行できるように、 VCSSLの実行環境も同梱されており、そのライセンス文書は「 License 」フォルダ内に同梱されています (要約すると、商用・非商用問わず自由に使用できますが、使用の結果に対して開発元は一切の責任を負いません、といった具合の内容です)。 配布フォルダ内の各構成物の一覧やライセンスについては「 ReadMe_使用方法_必ずお読みください.txt 」をご参照ください。
※ Vnano の実行環境については、別途スクリプトエンジンのソースコードも一般公開しており、 何らかのソフトウェア内に組み込んでご利用いただく事も可能です。詳細はこちらをご参照ください。
この記事中の商標などについて
- OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。
- Windows は、米国 Microsoft Corporation の米国およびその他の国における登録商標です。この記事は独立著作物であり、Microsoft Corporation と関連のある、もしくはスポンサーを受けるものではありません。
- Linux は、Linus Torvalds 氏の米国およびその他の国における商標または登録商標です。
- その他、文中に使用されている商標は、その商標を保持する各社の各国における商標または登録商標です。
[公式ガイドサンプル] 立体モデルを回転させるアニメーション |
|
|
「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを、アニメーションで回転させ続けます |
[公式ガイドサンプル] 立体モデルを回転させる |
|
|
「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを、指定した角度だけ回転させます。 |
[公式ガイドサンプル] 立体モデルを移動させるアニメーション |
|
|
「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルの位置を、アニメーションで動かします。 |
[公式ガイドサンプル] 立体モデルを移動させる |
|
|
「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルの位置を移動させます。 |
[公式ガイドサンプル] 立体モデルを生成して3D空間に配置する |
|
|
「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを生成し、3D空間に配置します。 |
[公式ガイドサンプル] ポリゴンを生成して3D空間に配置する |
|
|
「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体の基本的な構成要素となるポリゴンを生成し、3D空間に配置します。 |
※ 点や線に比べて、三角形や四角形がやや暗い色に見えるのは、面のあるポリゴンには光の加減が加味されるためです。