2Dと3Dの合成時の処理
2Dと3Dの合成時の処理について説明します。
目次
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合成処理の初期化も行っています。
2.2. MC終了処理で、以下の関数を呼ぶ
当処理内にて、MascotCapsule V4(V3 互換)で使用するOpenGL ES の終了に合わせて、2D/3D合成処理の終了も行っています。
2.3. BREW APIで 2Dを描画する前に以下の関数を呼ぶ ( 推奨 : フレーム処理の先頭 )
2.4. 2Dを描画後に以下の関数を呼ぶ( 最後のBREW 2D APIの後 )
2.5. 画面更新処理
画面更新処理は、IDisplay_Update () / IDisplay_UpdateEx () で行うのではなく、MCV4(V3互換)提供のIMICRO3D_mcext_SwapBuffers () を利用する必要があります。
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を描画

