Japanese | English | Korean

Samples

1. 2Dと3Dの合成による問題点

BREWでは、OpenGL ESが描画に使うバッファと、BREW 2D APIが描画に使うバッファが(機種によっては)異なります。
このため、2Dと3Dの合成を行わなかった場合、フレームごとに2Dバッファの内容と3Dバッファの内容が別々に描画される恐れがあります。


フレームごとに2Dと3Dモデルが別々に描画される


注意 : BREWで2D描画を行う API と OpenGL ES の間では一部動作が保障されておりません。詳細は、KDDIの開発者向けサイト「SPICE」にありますアプリガイドラインをご参照下さい。





2. 問題解決の手法(サンプルコード)

上記の問題を解決するため、2Dレンダリングと3Dレンダリングで同一のバッファを用いる必要があります。この処理は、MascotCapsule V4(V3互換)のAPIを用いることで内部的に行われます。

どのような端末でも問題なく2Dと3Dを合成するためには、以下の流れで処理を行ってください。

2.1. MC初期化処理で、以下の関数を呼ぶ

当処理内にて、MascotCapsule V4(V3互換) で使用するOpenGL ES の初期化に合わせて、2D/3D合成処理の初期化も行っています。

IMICRO3D_mcext_Start ( pMe -> pIM3D, &pMe -> applet ) ;

2.2. MC終了処理で、以下の関数を呼ぶ

当処理内にて、MascotCapsule V4(V3 互換)で使用するOpenGL ES の終了に合わせて、2D/3D合成処理の終了も行っています。

IMICRO3D_mcext_End ( pMe -> pIM3D ) ;

2.3. BREW APIで 2Dを描画する前に以下の関数を呼ぶ ( 推奨 : フレーム処理の先頭 )

IMICRO3D_mcext_BindColorBuffer ( pMe -> pIM3D, &pMe -> applet ) ;

2.4. 2Dを描画後に以下の関数を呼ぶ( 最後のBREW 2D APIの後 )

IMICRO3D_mcext_ReleaseColorBuffer ( pMe -> pIM3D, &pMe -> applet ) ;

2.5. 画面更新処理

画面更新処理は、IDisplay_Update () / IDisplay_UpdateEx () で行うのではなく、MCV4(V3互換)提供のIMICRO3D_mcext_SwapBuffers () を利用する必要があります。

IMICRO3D_mcext_SwapBuffers( pMe -> pIM3D ) ;



3. 実際の手順(まとめ)

最後に、上記のサンプルコードの簡単な処理の流れについて説明します。

MC初期化処理内 2-1. IMICRO3D_mcext_Start() 2D/3D合成処理の初期化
フレーム処理内
(アプレットが終了されない限り右をループ)
2-3-1. IMICRO3D_mcext_BindColorBuffer ()
2-3-2. BREW 2D API をコール
2-3-3. IMICRO3D_xxxx ()
2-3-4. IMICRO3D_Render_flush ()
2-3-5. BREW 2D API をコール
毎回フレームの先頭でコール
2Dを背面に描画
MC 3D API をコール
3Dモデルを描画
2Dを前面に描画
2-4. IMICRO3D_mcext_ReleaseColorBuffer () 2Dの描画終了が毎回コール
2-5. IMICRO3D_mcext_SwapBuffers () 描画内容をアップデート
MC終了処理内 2-2. IMICRO3D_mcext_End() 2D/3D合成処理の終了

3Dモデルの背面(左)と前面(右)に2Dを描画