[ 前へ | 目次 | 次へ ]
Now Loading...
ダウンロード
PC (※スマートフォンでは動きません) でダウンロードし、ZIPファイルを右クリックメニューから展開して、できたフォルダ内の「 VCSSL.bat(バッチファイル) 」をダブルクリックすると起動します。 Linux等では「 VCSSL.jar 」をコマンド実行してください。
» 詳しい使用方法や、エラーで展開できない際の対応方法などはこちら

[公式ガイドサンプル] 立体モデルを生成して3D空間に配置する

このプログラムは、 「 VCSSL 3DCG開発ガイド 」 の 「 モデルの生成・配置と各種標準モデル 」 の回に登場するサンプルコードです。 ここでは、そのサンプルコードを実行環境ごとダウンロードして、実際に実行してみる事ができます。 プログラミングガイド的な詳しい解説については、上記ページをご参照ください。

使用方法

ダウンロードと展開(解凍)

まず、PC(スマホは未対応)で上の画面の「 ダウンロード 」ボタンを押してください。 するとZIP形式で圧縮されたファイルがダウンロードされるので、そのZIPファイルを右クリックして「すべて展開」や「ここに展開」などで展開(解凍)してください。 展開が成功すると、ZIPファイルと同じ名前のフォルダができ、その中にZIPファイルの中身が入っています。

» 展開がエラーで止まってしまう場合は…

なお、Linux® 等をご使用で、右クリックメニューから展開するとファイル名が文字化けしてしまう場合は、 コマンドライン端末でZIPファイルのある場所まで cd した上で「 unzip -O cp932 ZIPファイル名 」で展開してみてください。

プログラムの起動

Microsoft® Windows® をご使用の場合

上記の通りにZIPファイルを展開したフォルダ内にある、 「 VCSSL.bat(種類はバッチファイル) 」をダブルクリック実行してください。 もしプログラムの内容を書き変えながら使いたい場合は、代わりに「 VCSSL_Editor.bat 」を実行してください。

実行すると、最初にメモリー使用量や、(必要な場合のみ)Java®実行環境を自動で入手するか 等を尋ねられるので、適時答えると、プログラムが起動します。2回目以降はすぐに起動します。

※ ここで入手したJava®実行環境は、ZIPファイルを展開した中の「 jre 」フォルダ内にダウンロードされ、このプログラムの実行のみに使用されます。PC全体に影響する形でインストールされる事はありません。

Linux® 等やその他のOSをご使用の場合

ZIPファイルを展開したフォルダ内へコマンドライン端末で cd して、以下の通り入力して実行してください:

java -jar VCSSL.jar
(プログラムの内容を書き変えながら使いたい場合は、代わりに VCSSL_Editor.jar を実行)

» javaコマンドが使用できない等のエラーが表示される場合は…

起動後

起動すると、3DCGの表示ウィンドウが表れ、そこに3D空間の内容が表示されます(下図)。 表示ウィンドウ上で、マウスでの視点操作や拡大・縮小も可能です。

3DCG表示ウィンドウ
3DCG表示ウィンドウ
3D空間の内容が表示されます。マウスでの視点操作や拡大・縮小も可能です。

今回のサンプルコードでは、上図の通り、 3D空間内に球や立方体、円錐や円柱などの基本的な立体モデルを配置しています。 立体モデルは、前回のサンプルコードで扱った「ポリゴン」を組み合わせて自作する事もできますが、 基本的な形状のものは標準で用意されていて、簡単に生成・配置できます。

モデルの内面や裏面を描画するには?

なお、上の図をよく見ると、右のほうにある、ふたの無い円筒モデルの内面が描画されていませんね。 他にも、底の無い円錐モデルの内面や、円盤モデルの内面は、標準では描画されません。

マウスで視点を操作した様子
マウスで視点を操作し、モデルの内面の裏面を見た様子
底の無い円筒/円錐モデルの内面や、円盤モデルの裏面は、標準では描画されません。

これは、通常はあまり見る機会の無い、立体の内面/裏面の描画を省いて負荷を軽減する「カリング」という機能が、標準で働いているからです。 カリングは、必要に応じて無効化する事もできます。詳細は下のコード解説の最後で触れます。 カリングを無効化すると、下図のようにちゃんと内面/裏面も描画されるようになります:

カリングを無効化した結果
カリングを無効化した結果
底の無い円筒/円錐モデルの内面や、円盤モデルの裏面が、ちゃんと描画されるようになります。

面の細かさについて

ところで、立体モデルの表面に注目すると、 球や円錐など、本来は曲面であるべき面がカクカクしていますね。 これは、立体モデルの面が、 細かい三角形や四角形のポリゴン(前回のサンプルコード参照) を組み合わせて構成されているためです。

近代的な3DCG関連のソフトでは、ふつうはこのようなポリゴンのカクカクを目立たなくする機能があるのですが、 残念ながらVCSSLには(少なくとも今のところは)ありません。 VCSSLの描画機能は、簡易&即席用途に的を絞ったもので、 現状では「フラットシェーディング」という単純な方式の描画しかサポートされていません。 これは、1枚のポリゴンを1色でベタ塗りするもので、必然的にポリゴンの境界は折り紙のようにカクカクになります。

滑らかな曲面を使用したい場合は、素直に本格的な3DCGソフトを使用するのがおすすめです。 ただ、VCSSLで即席で描いた内容を、どうしても滑らかに描画したい、という場合は、 やや強引ですが、立体モデルで使用するポリゴンの数を増やすという方法もあります。 ポリゴンの数は、立体モデル生成関数の引数で指定できます(参照)。 これを思いっきり増やすと:

立体モデルのポリゴン数を増やした結果
立体モデルのポリゴン数を増やした結果
曲面がなめらかになります。半面、描画処理は重くなります。

このように、立体モデルの曲面がなめらかになります。半面、描画処理は重くなり、重さがある程度を超えると、マウス処理がカクついたりもします。 特にVCSSLでは、プラットフォームに依存しないポータブルな実行環境で動作する事を重視するため、 少なくとも現状では、3DCGの内部処理にGPUは使用されず、光線や陰影の計算も含めて基本的にCPUで処理されます。 そのため、一般的な3D環境の基準からすると、処理はだいぶ重めの部類に入ります。 従ってこの方法は、一枚絵の画像の作成には有用かもしれませんが、アニメーションなどには向かない、あくまでもややゴリ押しの方法です。

コード解説

このプログラムのコードはVCSSLで記述されています。

内容を書き変えて改造したい場合には、 プログラムのコード「 Model.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 関数の内容を見ていきましょう。先頭は:

のように、まず画面の初期設定を行っています。

そこからが、今回のサンプルコードのメインテーマである、立体モデルを生成して配置していく処理です。 最初の座標軸モデルの生成と配置をクローズアップして見てみましょう:

ここで呼んでいる「 newAxisModel 」という名前の関数は、 座標軸モデル(後述)を生成する関数です。 他にも、「 new〜Model 」という名前で、各種の基本的な立体モデルを生成する関数があります。 一覧と詳細については、VCSSL 3DCG開発ガイドの 「 モデルの生成・配置と各種標準モデル 」の回をご参照ください。

さて、立体モデル生成関数( new〜Polygon 関数 )は、 生成した立体モデルに整数のID番号を割りふって、それを戻り値として返します。 立体モデルを配置したり変形・移動させたりする際は、 それが「どの立体モデルに対する操作なのか」を指定するために、このID番号が必要になります。

実際に上では、生成した座標軸モデルのID番号を、int 型の変数 axis に控えています。 そして、その直後に mountModel 関数で、そのID番号を引数に渡して、 座標軸モデルを3D空間に配置しています。

なお、ここで使用した座標軸モデルは、カラフルな直行する3つの矢印を持つモデルで、赤い矢印がX軸、緑がY軸、青がZ軸の方向を表しています。 3D空間に立体を配置する際は、空間の向きやスケール感を把握しやすくするため、とりあえず最初に置いておくと便利です。 矢印の長さは、newAxisModel 関数の引数で指定でき、ここでは 3.0 としています。

座標軸モデル
座標軸モデル
カラフルな直行する3つの矢印を持つモデルで、赤い矢印がX軸、緑がY軸、青がZ軸の方向を表しています。 3D空間に立体を配置する際は、空間の向きやスケール感を把握しやすくするため、とりあえず最初に置いておくと便利です。

さて、コードの残りの部分です:

ここでは、先ほどと全く同じ要領で、色々な立体モデルを生成して、3D空間に配置しています。 配置が見やすくなるように、 moveModel 関数で立体モデルを移動させて、位置を微調整したりもしています。 ここでも、移動対象の立体モデルを指定するために、変数に控えておいたポリゴンのID番号を引数に渡しています。

なお、曲面のある立体モデルの生成関数では、引数で使用するポリゴン数を指定できます。 例えば上で球モデルを生成している「 newSphereModel( 0.5, 0.5, 0.5, 10, 7 ) 」では、 最初の「 0.5, 0.5, 0.5 」がサイズの指定で、残りの「 10, 7 」がポリゴン数の指定です。 ここでは 軽度方向10 x 緯度方向7 = 70 ポリゴンの球が生成されます。 ポリゴン数を増やすほど曲面がなめらかになりますが、描画処理が重くなります。

ところで、冒頭でも少し触れた通り、標準では立体モデルの内面や裏面の描画を省く「カリング」という機能が効くため、 ふたの無い円筒モデルの内面が描画されません。 他にも、底の無い円錐モデルの内面や、円盤モデルの内面は、標準では描画されません。

マウスで視点を操作した様子
マウスで視点を操作し、モデルの内面の裏面を見た様子
底の無い円筒/円錐モデルの内面や、円盤モデルの裏面は、標準では描画されません。

内面/裏面を描画させたい場合は、setModelCull 関数で、カリングを無効化します。 いまの場合は、onStart 関数内の最後に、以下のように追記すれば OK です:

これで、ちゃんと裏面が描画されるようになります。

カリングを無効化した結果
カリングを無効化した結果
底の無い円筒/円錐モデルの内面や、円盤モデルの裏面が、ちゃんと描画されるようになります。

コード内容は以上です。

詳しいVCSSLのプログラミングガイド(無料)はこちらへ!

上記のコードはプログラミング言語VCSSLで記述されており、VCSSLのプログラミングガイドは下記で無料公開しています。 上記のコードを改造したい方や、新しいコードを書いてみたい方はぜひご活用ください!

ブラウザで読めるWeb版だけでなく、PDF版も無料で配布しています!

スタートアップガイド( プログラミングがはじめての方向け )
プログラミングの入門書に相当する内容です。プログラミングが初めての方はこちらがおすすめです。
即席ガイド( C系言語ユーザー向け )
C言語や C++ などのC系の言語を扱われている方が、即席でVCSSLを扱うための簡易ガイドです。
文法ガイド
VCSSLの文法や基本的な機能を淡々とまとめた、リファレンスマニュアル的な位置づけのガイドです。
GUI開発ガイド
ボタンや入力項目などのGUI部品が並ぶ、画面を備えたVCSSLプログラムを開発するためのガイドです。
2DCG開発ガイド
画面上や画像ファイルなどに、2次元的な描画を行うVCSSLプログラムを開発するためのガイドです。
3DCG開発ガイド
画面上や画像ファイルなどに、3次元的な描画を行うVCSSLプログラムを開発するためのガイドです。
標準ライブラリ 仕様書
コード内で呼び出される関数は、大半が標準ライブラリのものです。その詳細仕様を掲載しています。

ライセンス

このVCSSLコード( 拡張子が「.vcssl」のファイル )は実質的な著作権フリー(パブリックドメイン) である CC0 の状態で公開しています。 そのままでのご利用はもちろん、言語の種類を問わず、改造や流用などもご自由に行ってください。

※ ただし、このVCSSLコードの配布フォルダ内には、ダウンロード後すぐに実行できるように、 VCSSLの実行環境も同梱されており、そのライセンス文書は「 License 」フォルダ内に同梱されています (要約すると、商用・非商用問わず自由に使用できますが、使用の結果に対して開発元は一切の責任を負いません、といった具合の内容です)。 配布フォルダ内の各構成物の一覧やライセンスについては「 ReadMe_使用方法_必ずお読みください.txt 」をご参照ください。

この記事中の商標などについて

  • OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。
  • Windows は、米国 Microsoft Corporation の米国およびその他の国における登録商標です。この記事は独立著作物であり、Microsoft Corporation と関連のある、もしくはスポンサーを受けるものではありません。
  • Linux は、Linus Torvalds 氏の米国およびその他の国における商標または登録商標です。
  • その他、文中に使用されている商標は、その商標を保持する各社の各国における商標または登録商標です。

[ 前へ | 目次 | 次へ ]
[公式ガイドサンプル] 立体モデルを生成して3D空間に配置する

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを生成し、3D空間に配置します。
[公式ガイドサンプル] ポリゴンを生成して3D空間に配置する

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体の基本的な構成要素となるポリゴンを生成し、3D空間に配置します。
この階層の目次
お知らせ

リニアングラフ3DのVCSSL用APIにカメラ制御関数を追加、回転アニメーションツールも同梱
2019年10月09日 - RINEARNでは10月9日にソフトウェアの最新版をリリースしました。VCSSLのAPI関数の追加や、リニアングラフ3Dのアニメーションツールの追加など行っています。その概要をお知らせします。

小型関数電卓 RINPn(旧称リニアンプロセッサー nano)の公式ページを開設
2019年10月02日 - 現在オープンソースで開発中の、「シンプル&コンパクト」を目指した小型プログラマブル関数電卓ソフト「 RINPn 」の公式ページが、RINEARNサイト内にオープンしました。その概要をお知らせします。

Vnanoの公式サイトがオープン、チュートリアルやAPI仕様書等も掲載
2019年08月07日 - オープンソースのアプリケーション組み込み用スクリプトエンジン「 Vnano 」の公式サイトを開設しました。チュートリアルや、スクリプトエンジンのAPI仕様書などが参照できます。その概要をお知らせします。

新着
3Dグラフを回転アニメーションさせるツール

3Dグラフを、Z軸まわりにゆっくりと回転アニメーションさせるツールです。全角度のグラフを、連番の画像ファイルに保存する事もできます。
2019年10月09日
[公式ガイドサンプル] ユーザーのGUI操作に対して処理を行う

「VCSSL GUI開発ガイド」内のサンプルコードです。ユーザーがGUIを操作した際に行う処理を実装します。
2019年07月28日
[公式ガイドサンプル] 各種GUIコンポーネントを画面上に配置する

「VCSSL GUI開発ガイド」内のサンプルコードです。色々な種類のGUI部品を画面上に配置します。
2019年07月28日
連番ファイルから3Dグラフをアニメーション描画するツール

フォルダ内の連番データファイルを読み込み、3Dグラフを高速で連続描画して、アニメーションさせるツールです。グラフを連番の画像ファイルに保存する事もできます。
2019年06月03日
連番ファイルから2Dグラフをアニメーション描画するツール

フォルダ内の連番データファイルを読み込み、2Dグラフを高速で連続描画して、アニメーションさせるツールです。グラフを連番の画像ファイルに保存する事もできます。
2019年05月24日
開発元Twitterアカウント