Microsoft DirectX 8.0 (C++)

ミップマップ セットの作成

次の例は、IDirect3DDevice8::CreateTexture メソッドを呼び出して、サイズ 256 × 256、128 × 128、64 × 64、32 × 32、および 16 × 16 の 5 つのミップマップ レベルのチェーンを作成する方法を示している。

// このサンプル コードでは、変数 d3dDevice は IDirect3DDevice8 インターフェイスへの
// 有効なポインタであると仮定している。

IDirect3DTexture8 * pMipMap;

d3dDevice->CreateTexture(256, 256, 5, 0, D3DFMT_R8G8B8, D3DPOOL_MANAGED, &pMipMap);

CreateTexture が受け取る最初の 2 つのパラメータは、最上位テクスチャのサイズと幅である。第 3 パラメータには、テクスチャのレベル数を指定する。このパラメータをゼロに設定すると、Microsoft® Direct3D® はサーフェスのチェーンを作成する。各サーフェスは、直前のサーフェスよりも 2 の累乗ずつ小さくなり、最終的に 1 × 1 の最小サイズになる。第 4 パラメータには、このリソースの使用方法を指定する。ここではゼロが指定されているので、リソースには特定の使用方法はないことを示す。第 5 パラメータには、テクスチャのサーフェス フォーマットを指定する。このパラメータには、D3DFORMAT 列挙型の値を使用する。第 6 パラメータには、作成したリソースを配置するメモリ クラスを示す D3DPOOL 列挙型のメンバを指定する。動的テクスチャを使用しているのでなければ、D3DPOOL_MANAGED を勧める。最後のパラメータは、IDirect3DTexture8 インターフェイスへのポインタのアドレスとする。

  ミップマップ チェーンの各サーフェスの大きさは、直前のサーフェスの半分になる。最上位ミップマップの大きさが 256 × 128 の場合、2 番目のレベルのミップマップの大きさは 128 × 64 になり、3 番目のレベルは 64 × 32 という順にミップマップの大きさは小さくなり、最終的には 1 × 1 になる。Levels でミップマップ レベルの数を指定することはできない。Levels では、チェーンのミップマップの幅または高さのいずれかが 1 より小さくなることがある。4 × 2 を最上位ミップマップ サーフェスとする単純なケースでは、Levels の最大値は 3 になる。最上位の大きさは 4 × 2 で、次のレベルの大きさは 2 × 1 で、その次のレベルの大きさは 1 × 1 である。Levels の値が 3 より大きいと、第 2 レベルのミップマップの高さは分数になる。したがって、これは許可されない。