Japanese | English | Korean

Samples

テクスチャ貼り替え

ここではモデルデータのテクスチャ貼り替えについて解説します。


m3dTexture2D クラスによるテクスチャ貼り替え

m3dTexture2D はテクスチャ画像をどのようにサブメッシュに適用するのかについて、一連の属性をカプセル化しているクラスです。属性には貼り付け、フィルタリング、ブレンドやテクスチャの座標変換が含まれます。
モデルデータのテクスチャ貼り替えは、m3dTexture2D オブジェクトに新たな画像を設定することで行います。画像の設定には IMICRO3Dv4es_m3dTexture2D_setImage ( inst, texture2d, image ) メソッドを用います。image がテクスチャに設定される m3dImage2D オブジェクトです。

以下は、サンプルコードでテクスチャ画像を読み込み、モデルのテクスチャ画像を貼り替えているところです。
ここで注意しなければならない点は、テクスチャ切り替えのためにテクスチャを複数用意した際に参照されなくなるテクスチャオブジェクトがあるという点です。

オブジェクトは参照されなくなった時点で、通常は破棄されてしまいます。
これを防ぐために、リファレンスカウントを加算するする必要があります。リファレンスのカウンティングについては、MascotCapsule V4 C API for BREW プログラマーズマニュアルを参照してください。

/* テクスチャの取得 */
pmc -> pTexture = ( m3dTexture2D* ) IMICRO3Dv4es_m3dObject3D_find ( pMe -> pIM3D,
  ( m3dObject3D* ) pmc -> pWorld, UID_TEX );

/* 初期テクスチャ画像の取得 */
pmc -> pTexImage [ TEX_DEF ] = IMICRO3Dv4es_m3dTexture2D_getImage ( pMe -> pIM3D, pmc -> pTexture );

/* 参照カウントを加算( 非参照時にオブジェクトを保持するため ) */
IMICRO3Dv4es_m3dObject3D_ref ( pMe -> pIM3D, ( m3dObject3D* ) pmc -> pTexImage [ TEX_DEF ] );

( 中略 )

/* ビットマップ画像を読み込む */
pmc -> pTexImage [ TEX_LOG ] = IMICRO3Dv4es_m3dLoader_loadBMP ( pMe -> pIM3D, ( IIstream* ) pURIIstream );

( 中略 )

/* 画像の切り替え */
pmc -> texImage = ( pmc -> texImage == TEX_DEF ) ? TEX_LOG : TEX_DEF;

/* テクスチャ画像の貼り替え */
IMICRO3Dv4es_m3dTexture2D_setImage ( pMe -> pIM3D, pmc -> pTexture, pmc -> pTexImage [ pmc -> texImage ] );

テクスチャ貼り替えの描画結果