サンプル
ミップマッピング
ここではミップマッピングについて解説します。
※ 開発環境によってダウンロードするサンプルデータが異なります。
目次
ミップマッピングとはモデルにマッピングするテクスチャ画像を、視界距離に合わせて切り替える手法のことです。
この手法を用いることで、テクスチャ画像を拡大・縮小した時に生じる画質の劣化を、軽減することができます。
1. ミップマッピングの設定
ミップマッピングを行うかどうかの設定は、オーサリングツールから mct ファイルとしてテクスチャデータを出力する際に行います。
プログラム上では、mceAppearance_setTextureFilter( This, ix, type, fmode ) を用いてテクスチャフィルタモードの設定を行う必要があります。
テクスチャフィルタモードは以下の 6 種類が用意されています。
- MCE_TEXTURE_FILTER_NEAREST
ミップマップレベルの切り替えは行いません。
ピクセルの色は最近傍法により求めます。 - MCE_TEXTURE_FILTER_LINEAR
ミップマップレベルの切り替えは行いません。
ピクセルの色は 4x4 近傍の加重平均を採用します。 - MCE_TEXTURE_FILTER_NEAREST_MIPMAP_NEAREST
最適なミップマップレベルを 1 つ採用した上で、
最近傍法によりピクセルの色を求めます。 - MCE_TEXTURE_FILTER_LINEAR_MIPMAP_NEAREST
最適なミップマップレベルを 1 つ採用した上で、
4x4 近傍の加重平均をピクセルの色にします。 - MCE_TEXTURE_FILTER_NEAREST_MIPMAP_LINEAR
最適なミップマップレベルを 2 つ採用した上で、
それぞれで最近傍法によりピクセル色を求め、2 つを加重平均します。 - MCE_TEXTURE_FILTER_LINEAR_MIPMAP_LINEAR
最適なミップマップレベルを 2 つ採用した上で、
それぞれで 4x4 近傍の加重平均によりピクセル色を求め、2 つを更に加重平均します。
下記のサンプルプログラムでは、テクスチャ縮小時のテクスチャフィルタモードを設定しています。モデルに対するテクスチャの関連付けには、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 |
| 描画結果 ( 縮小時のテクスチャフィルタモードを変更 ) |
|



