3Dグラフィックスの描画(イミディエイトモード)
ここでは、イミディエイトモードによって 3D グラフィックスを描画する方法について解説します。
目次
イミディエイトモードではリテインモードとは異なり、明示的にカメラやライト等のオブジェクトを設定する必要があります。また、モデルの変換行列の設定も必要となります。
以下に、イミディエイトモードでの 3D グラフィックスの描画について説明を行います。
1. 背景の設定
M3G には、背景を表すクラスとして Background クラスが用意されています。このクラスを使用することで、描画領域の背景を設定することができます。背景の描画には Graphics3D クラスの clear() メソッドを使用します。
ここでは、単色の背景によって描画領域の背景を塗りつぶしています。
* private Graphics3D g3d;
* private Background myBackground;
* private int bgColor = 0x00000000;
*/
/* 背景色を設定 */
myBackground.setColor ( bgColor );
( 中略 )
/* 塗りつぶし */
g3d.clear ( myBackground );
2. ライト及びカメラの設定
3D グラフィックスを描画するためには描画対象となる Graphics3D オブジェクトに対し、ライト及びカメラオブジェクトを設定する必要があります。ライトの追加には Graphics3D クラスの addLight() メソッドを、設定には同じく Graphics3D クラスの setLight() メソッドを、カメラの登録には Graphics3D クラスの setCamera() メソッドを使用します。
* private Camera camera;
* private Light ambLight;
* private Light dirLight;
* private Transform camPos;
*/
/* Graphics3D オブジェクトにカメラ及びライトを登録 */
g3d.setCamera ( camera, camPos );
g3d.resetLights ();
g3d.addLight ( ambLight, null );
g3d.addLight ( dirLight, lgtTrans );
なお、 Graphics3D クラスの resetLights() メソッドはそれまでに設定されていたライトをすべて破棄します。
3. モデルデータの描画
モデルデータの描画にはイミディエイトモードでもリテインモード同様、 Graphics3D クラスの render() メソッドを使用します。ただし、このときメソッドに渡す引数が異なります。リテインモードでは World オブジェクトのみを渡していたのに対し、イミディエイトモードでは Mesh や Group などの Node のサブクラスと、そのモデルが持つモデル座標系からワールド座標系への変換行列を設定する必要があります。
* private MorphingMesh box;
* private Transform boxTrans;
*/
/* モデルの描画 */
g3d.render ( box, boxTrans );
なおこのとき、変換行列に null を指定すると恒等変換を指定したものとして扱われます。
※ ここで使用している M3G データは、説明のためにあらかじめ MorphingMesh クラスを表すノードのみを取り出した状態に加工されています。

描画結果

