サンプル

バンプマッピングの切り替え

バンプマッピングの切り替え - MascotCapsule eruption

ここではバンプマッピングの応用として、バンプマッピングの切り替えについて解説します。
基本的なバンプマッピングの実現方法については、「バンプマッピング」のドキュメントページを参照してください。
※バンプマッピングはオーサリングツール上でマルチテクスチャを用いて設定します。




※ BREW 3.1は非対応となります。

目次





このサンプルリソースでは、床と壁のみにバンプマッピングが適用されており、それぞれのテクスチャのインデックスは以下のとおりになっています。

(テクスチャは各mceFigureのmceAppearanceが保持)


1. バンプマッピングのON

このサンプルでは、決定キーが押されたときに判定用フラグを切り替えることで、ON/OFFを切り替えています。

バンプマッピングをOFFの状態からONに切り替えるには、モデルデータにバンプマップを含むテクスチャの関連付けを行い、インデックス0のテクスチャ種別を法線マップに変更します。

※テクスチャの種別について

バンプマッピングは法線マップを使用するため、通常のテクスチャマッピングとは計算式が異なります。そのため、法線マップから通常マップへと切り替える場合は、テクスチャの種別を変更する必要があります。


/* パンブマップテクスチャの関連付けを切り替える */
if (work->BumpFlag == 0)
{
    /* モデルにテクスチャ(地面)を関連付け */
    exception = mceFigure_bindTexture (work->Figure, work->Textbl_gt);
    if (exception != hi_NoException)
    {
        return 1;
    }

    /* モデルにテクスチャ(地面バンプ)を関連付け */
    exception = mceFigure_bindTexture (work->Figure, work->Textbl_gb);
    if (exception != hi_NoException)
    {
        return 1;
    }

    (中略)

    /* 床のアピアランス属性を取得する(ユーザIDが1のmceAppearanceを取得) */
    work->Appe = ( mceAppearance* )mceObject3D_findObject3D(( mceObject3D* )
                                        work->Figure, ClassId_Appearance, 1);
    if (work->Appe == NULL)
    {
        return 1;
    }
    /* 床のインデックス0番のテクスチャタイプをバンプマップ(法線マップ)に設定 */
    mceAppearance_setTextureType(work->Appe,0,
                    mceAppearance_TextureType_NORMALMAP);

    (中略)

2. バンプマッピングのOFF

バンプマッピングをONの状態からOFFに切り替えるには、インデックス0テクスチャの関連付けを解除し、テクスチャの種別を通常マップに変更します。

/* バンプマップテクスチャを外す */
else
{
    /* 床のアピアランス属性を取得する */
    work->Appe = (mceAppearance *)mceObject3D_findObject3D ((mceObject3D *)
                                        work->Figure, ClassId_Appearance, 1);
    if (work->Appe == NULL)
    {
        return 1;
    }
    /* アピアランス属性の0番テクスチャをNULL指定で解除する */
    exception = mceAppearance_setTexture (work->Appe, 0, NULL );
    if (exception != hi_NoException)
    {
        return 1;
    }
    /* インデックス0番を通常マップに設定 */
    mceAppearance_setTextureType(work->Appe,0,
                                mceAppearance_TextureType_COLORMAP);

    /* 壁のアピアランス属性を取得する */
    work->Appe = (mceAppearance *)mceObject3D_findObject3D ((mceObject3D *)
                                        work->Figure, ClassId_Appearance, 2);
    if (work->Appe == NULL)
    {
        return 1;
    }
    /* アピアランス属性の0番テクスチャをNULL指定で解除する */
    exception = mceAppearance_setTexture (work->Appe, 0, NULL );
    if (exception != hi_NoException)
    {
        return 1;
    }
    /* インデックス0番を通常マップに設定 */
    mceAppearance_setTextureType(work->Appe,0,mceAppearance_TextureType_COLORMAP);
}
描画結果 バンプマッピングON 描画結果 バンプマッピングOFF
バンプマッピングON バンプマッピングOFF
描画結果



このページの先頭へ戻る