3Dグラフィックスの描画(イミディエイトモード)
ここではイミディエイトモードで 3D グラフィックスを描画する方法について解説します。
イミディエイトモードはリテインモードとは異なり、明示的に背景や、カメラ、ライト等のオブジェクトを設定してモデルを描画するモードです。モデルごとに変換行列の設定が必要となります。
目次
1. 背景の設定
背景は m3dBackground クラスにより表されます。 m3dBackground には色などの属性があり、画像を設定することもできます。 3Dモデルを描画する場合、描画前に IMICRO3Dv4es_m3dGraphics3D_clear() を用いて背景でバッファをクリアする必要があります。
以下は、サンプルコードで単色の背景を作成し描画領域をクリアしている部分です。
pmc -> pBackground = IMICRO3Dv4es_m3dBackground_create ( pMe ->pIM3D );
if ( pmc -> pBackground == NULL ) {
IMICRO3Dv4es_m3dBackground_setColor ( pMe -> pIM3D, pmc -> pBackground, 0x00333333 );
( 中略 )
/* バッファをクリア */
IMICRO3Dv4es_m3dGraphics3D_clear ( pMe -> pIM3D,
pmc -> pBackground );
なお、IMICRO3Dv4es_m3dGraphics3D_clear(inst, graphics3d, buffer, background) メソッドで backgroundとして NULL を渡すと、デフォルトとして黒単色の背景が使用されます。
2. ライト及びカメラの設定
3D グラフィックスを描画するためには、 m3dGraphics3D オブジェクトにライトとカメラを設定する必要があります。
ライトの設定には IMICRO3Dv4es_m3dGraphics3D_addLight() メソッドを、カメラの設定には IMICRO3Dv4es_m3dGraphics3D_setCamera() メソッドを使用します。
以下は、サンプルコードで m3dGraphics3D オブジェクトにライトとカメラを設定しているところです。
IMICRO3Dv4es_m3dGraphics3D_setCamera ( pMe -> pIM3D, pmc -> pG3D, pmc -> pCamera, pmc -> pCameraTrans );
IMICRO3Dv4es_m3dGraphics3D_addLight ( pMe -> pIM3D, pmc -> pG3D, pmc -> pAmbLight, NULL, &pMe -> e );
IMICRO3Dv4es_m3dGraphics3D_addLight( pMe pIM3D, pmc -> pG3D, pmc -> pDirLight, NULL, &pMe -> e );
3. モデルデータの描画
イミディエイトモードではモデルデータを個別に描画します。ここでは、m3dMesh クラスのモデルデータの描画を例にとって説明します。
m3dMesh オブジェクトの描画には IMICRO3Dv4es_m3dGraphics3D_render_n() メソッドを使用します。これは m3dSprite、m3dMesh または m3dGroup オブジェクトを、ローカル座標系からワールド座標に変換して描画するメソッドです。変換行列は呼び出し時に設定する必要があります。
以下は、サンプルコード内で M3G ファイルから取得したモデルを描画している部分です。
if ( m3d_NoException != IMICRO3Dv4es_m3dGraphics3D_render_n ( pMe -> pIM3D,
なお、ここでは変換行列に恒等変換を表す NULL を指定しています。
※ ここで使用している M3G データは、説明のために あらかじめ m3dMorphingMesh クラスを表すノードのみを取り出した状態に加工されています。

描画結果

