黄色のいこあんのブログ -4ページ目

マスコットカプセル for brew - 半透明描画 -

さて、前回2D/3Dの合成描画行ったわけです。
うん、なんか普通にメソッド呼び出し順に描画されるから、難しいこと考えなくていーのかも。
とりあえず、マスコットカプセル描画のあとに毎回flush入れているんだけど、これって大丈夫なのかな。
負荷かかったりしないかな?心配。。。


さて、それはさておき、ついに半透明描画について!

プリミティブの半透明描画とスプライトの半透明描画の2つがあります。3Dモデルとかの描画はおそらくスプライトと同じ方法で大丈夫なはず。それについては後ほど。

で、共通でやらなきゃいけないこと。
CompositeModeでアルファ値書き込みを有効にしつつ、アルファブレンドモードの設定をすること。
設定したCompositeModeをAppearanceにセットすること。
この2点が必要になります。

さて次にそれぞれで行うこと。
プリミティブでは簡単。
色のVertexArrayのアルファ値のところをお好みでセットしてください。以上。
ちゃんとVertexArrayの1ピクセルあたりの色エントリ数っていうか、なんたらを4にしたりするのを忘れないでね。

次にスプライト。これ少し悩んだんだけど、簡単ですた。
m3dNodeにある関数に
IMICRO3Dv4es_m3dNode_setAlphaFactor
っつーのがある。これの第2引数にアルファ値をいれればOK。
ちなみにこの関数の第一引数がm3dNode型のポインタなので、たぶんスプライトだけじゃなくm3dNodeを継承したものすべてに使えるはず。

簡単ですねー。


ちなみにテクスチャが2のべき乗×2のべき乗サイズじゃないと使えないのは不便だと思うんだ。。。


さて、これでとりあえずマスコットカプセルについてはおしまい。
3Dモデルの描画は今のところ範囲外だし。

次はなにしよーかねー。

マスコットカプセル for brew - 2D/3Dの合成 -

さて、今回マスコットカプセルを勉強し始めるにあたり、目的は2つありました。

1.半透明描画
2.マスコットカプセルの描画とbrewの標準APIの描画を同時にしたい

1については、いずれ書くとして。

2について、プログラミングガイドにやたらむずかしめのことが書いてあって(難しいと感じたのはおれだけ…?)
やたらややこしい思いをした覚えがあります。

けどなんてことはありません。
単純に呼び出し順に描画されるだけです。
普通となんら変わりありません。

ただし、必要な動作として
2D描画をする前に
IMICRO3Dv4es_mcext_BindColorBuffer でカラーバッファをバインドし
IMICRO3Dv4es_mcext_ReleaseColorBuffer でカラーバッファを解放する。
その間でAPIを呼び出せばよさげ。
だと思う。。。
自信なし。。。

だって動いてはいるけど、書いてあることとちげーんだもん。

V3/V4互換のところのサンプルでは上記のとおりに書いてあるんだけど、
V4のプログラミングガイドには
まず3D描画して、
レンダリングターゲットを解放した後、まずGLのキューにたまったものをフラッシュ、
そのあとに
カラーバッファのバインド
API呼び出し
カラーバッファの解放
って書いてあるんすよねー。

これ、どうゆうことなんでしょーか?


この違いでコードの組み方がだいぶ変わってくるので、どうにかしてほしいもんです。

HI さんにメールでも投げてみるかなぁ。

マスコットカプセル for brew - プリミティブの描画3(描画) -

さて、前回まででカメラ・光源の設定およびプリミティブの準備をしてきました。

いよいよ描画になります。


いたって簡単。
描画したいタイミングでまず
IMICRO3Dv4es_m3dGraphics3D_bindTarget_g でレンダリングターゲットとの結合
これ、実は僕はよくわかっていません。
この引数で与える target って初期化のタイミングで
『OpenGL/ES 使用時にはフレームバッファは渡さないので非零値を渡しておく』
なんて書いてあって、(void*)0x01なんつーのが入っています。
ES使わないときは渡すんですかね。。。
勉強しときます。。。

さて次に、
IMICRO3Dv4es_m3dGraphics3D_clear でバッファのクリア。
第3引数でクリアするバッファを指定。ってもカラーバッファとデプスバッファの2つしかないけど。

~ ここで描画 ~
IMICRO3Dv4es_m3dGraphics3D_render とか IMICRO3Dv4es_m3dGraphics3D_render_n とか使って
描画しちゃって下さい。
リテインモードはよくしらね。

そして最後に
IMICRO3Dv4es_mcext_ReleaseTarget でターゲットを解放します。

重要なのは
IMICRO3Dv4es_m3dGraphics3D_bindTarget_g と
IMICRO3Dv4es_mcext_ReleaseTarget の間で描画をすること。

以上、ここまで