サンプル

ミップマッピング

ミップマッピング - MascotCapsule eruption

ここではミップマッピングについて解説します。




※ 開発環境によってダウンロードするサンプルデータが異なります。

目次





ミップマッピングとはモデルにマッピングするテクスチャ画像を、視界距離に合わせて切り替える手法のことです。
この手法を用いることで、テクスチャ画像を拡大・縮小した時に生じる画質の劣化を、軽減することができます。


1. ミップマッピングの設定

ミップマッピングを行うかどうかの設定は、オーサリングツールから mct ファイルとしてテクスチャデータを出力する際に行います。
プログラム上では、mceAppearance_setTextureFilter( This, ix, type, fmode ) を用いてテクスチャフィルタモードの設定を行う必要があります。
テクスチャフィルタモードは以下の 6 種類が用意されています。

下記のサンプルプログラムでは、テクスチャ縮小時のテクスチャフィルタモードを設定しています。モデルに対するテクスチャの関連付けには、mceFigure_bindTexture( This, textures ) を用いる方法と、mceAppearance_setTexture( This, ix, texture ) を用いる方法がありますが、ここではインデックスの指定ができる後者の方法を採用しています。

typedef struct tagWork
{
    (中略)

    mceFigure       *Figure;         /* Figure       */
    mceTextureTable *Textbl;         /* TextureTable */
    mceTexture      *Texture;        /* Texture      */
    mceAppearance   *Appe;           /* Appearance   */

} WORK;
hi_exception exception;

    (中略)

work->Texture = mceTextureTable_findTexture (work->Textbl, 0);
if (work->Texture == NULL)
{
    return 1;
}

work->Appe = (mceAppearance *)mceObject3D_findObject3D(
                                       (mceObject3D *)work->Figure,
                                       ClassId_Appearance,
                                       0);
if (work->Appe == NULL)
{
    return 1;
}

/* テクスチャを設定 */
exception = mceAppearance_setTexture (work->Appe,
                                      0, work->Texture);
if (exception != hi_NoException)
{
    return 1;
}

/* テクスチャ縮小時のフィルタモードを設定 */
exception = mceAppearance_setTextureFilter (work->Appe,
                             0,
                             MCE_TEXTURE_FILTER_TYPE_MIN,
                             MCE_TEXTURE_FILTER_LINEAR_MIPMAP_NEAREST);
if (exception != hi_NoException)
{
    return 1;
}
描画結果 MCE_TEXTURE_FILTER_NEAREST 描画結果 MCE_TEXTURE_FILTER_LINEAR_MIPMAP_NEAREST
MCE_TEXTURE_FILTER_NEAREST MCE_TEXTURE_FILTER_LINEAR_MIPMAP_NEAREST
描画結果
( 縮小時のテクスチャフィルタモードを変更 )



このページの先頭へ戻る