MascotCapsule アプリケーションの基本構成
3D描画処理
3D描画の中心となる、描画キャンバスクラスの処理について説明します。3D描画処理は次のように分類することができます。
初期化処理
・3Dデータの読込みおよび変数等セットアップ処理
画面更新処理
・3D描画パラメータのセットアップと3D描画処理(周期起動)
ユーザインターフェース処理
・キー入力等の処理
画面更新処理の場合、実際には次のように2ステップに分けて処理されることに注意してください。
周期起動処理
・3D描画パラメータのセットアップ#1およびrepaint()呼出しによる描画要求
実描画処理(paint())
・3D描画パラメータのセットアップ#2および3D描画メソッド( drawFigure() )呼出し
周期起動処理の最後に repaint() を呼ぶと、システムが適当なタイミングで paint() を呼出してくれます。そして drawFigure() が3D描画を実行します。
描画パラメータのセットアップは初期化処理、画面更新処理およびユーザインタフェース処理に自由に割り当てることができますが、以下では、典型的なケースを想定して説明することとします。
初期化処理
各種変数の生成と初期化、MascotCapsule 用データの読込みを行います。 具体的には、コンストラクタおよび各初期化子、初期化ブロックあるいはスレッドの run() メソッドのループ前処理で行います。典型的には以下のような処理を行います。
各変数の生成/初期設定
・視点設定
・光源設定
・光源対応モード設定
・その他
各3Dデータの読込み
・モデルデータ
・アクションデータ
・テクスチャデータ
・環境マップ用テクスチャデータ(環境マッピングを行わない場合は不要)
・プリミティブ描画用データ
典型的にはリソースデータとしてストリームから読込むことになります。(プラットフォームによりローカル記憶領域のデータあるいはサーバからのダウンロードデータを読込むことも可能です。)
プリミティブ描画用のデータは最終的に int[] で renderPrimitives() へ渡されます。それ以前のデータ形式やロードの方法には特に規定はありません。
※ MascotCapsule データの読込みが初期化時に限るわけではありません。アクションの切換え等処理途中で読込まれることもあります。
ユーザインターフェース系のセットアップ
・ソフトキーの設定
・その他
画面更新処理
最初に説明したように、画面更新は以下の2段階に分けて処理されます。
・周期起動処理3D描画パラメータのセットアップ#1および repaint() 呼出しによる描画要求
・実描画処理(paint())
3D描画パラメータのセットアップ#2および3D描画メソッド( drawFigure() )呼出し
3D描画パラメータのセットアップはどのように配分してもかまいませんが、実描画処理( paint() )での処理は最小限にとどめるのが一般的です。
周期起動処理
通常はスレッドの run() メソッド内ループ処理またはタイマイベント処理として、一定間隔で起動されます。実際の描画時に必要なデータをセットアップした上で repaint() 呼出しによって実際の描画を起動します。
実描画処理( paint() )
これは paint() メソッド処理自体であり、描画依頼( repaint() )後、適切なタイミングでシステムから呼出されます。ここでは上記周期起動処理で実行していないセットアップ処理の残りを行った上で、画面のクリア処理を行い、最終的に、唯一のMicro3D描画実行メソッドである drawFigure() を呼出します。
※ MascotCapsule では drawFigure() というひとつのメソッドで、一連の座標系変換計算、陰面処理からピクセル描画処理までを実行しています。
MascotCapsule の主要描画パラメータとしては次のようなものがあります。
・描画モード関連設定パラメータ(各描画モード、光源設定等)
・モデルの姿勢設定パラメータ(アクションインデックス、アクションフレーム値)
・座標変換パラメータ(変換行列、スクリーン中心、スケール)
・プリミティブ描画パラメータ
これらについて、時間経過およびユーザ操作等を反映させながら設定していくことが MascotCapsule 処理の基本となります。以下、個別に説明を加えます。
描画モード関連設定パラメータ
以下の設定項目があります。
・描画モード設定 :
光源対応描画モード
環境マッピングモード
トゥーンシェーディングモード
半透明モード
・光源設定 :
平行光源(方向と強度)
環境光(強度)
・トゥーンシェーディングのレベル設定(閾値、High、Low)
・投影方法設定 :
平行投影
透視投影
なお、途中で変更しないのであれば、初期化処理で済ませてしまうのがいいでしょう。
モデルの姿勢設定パラメータ
読込まれたアクションデータを用いて、どのアクション(アクションインデックスで指定)のどの状態(アクションフレーム値で指定)とするかを設定します。
通常、時間経過を元にアクションフレーム値を増減させることでアニメーション効果を実現します。
座標変換パラメータ
以下のような設定が可能です。
・視点座標変換(変換行列)
・スクリーン座標変換(スクリーン中心、スケール)
これらは座標変換(モデル座標系⇒視点座標系⇒スクリーン座標系)の際に使用され、モデルの平行移動、回転、拡大縮小が可能となります。
MascotCapsuleで最終的に drawFigure() に渡される変換行列は1個だけなので、各回転や視点変換は行列積計算で合成した上で設定する必要があります。
MascotCapsule では座標変換系用の多くのサポートメソッドが用意されています。
ユーザインターフェース処理
キー入力等のユーザ操作を3D描画に反映させ、モデルの拡大縮小や回転等を実現するための処理です。これ自体は MascotCapsule 固有の処理ではなく、下記のような一般的な入力処理です。
・キー入力(テンキー等)
・ソフトキー入力
・その他
キープレスまたはリリース時のイベントを拾って処理するのが典型的で、この場合は他の処理とは非同期で起動されることになります。複数キーの同時プレスやリピート処理に対応するために、キー状態入力系のメソッドを使用することも多いかと思います。これらの入力処理で内部状態を変更し、次の描画タイミングで描画に反映させるのが一般的です。

