Platform SDK: DirectX

ミップマップの選択と表示

[C++]

IDirect3DDevice7::SetTexture メソッドを呼び出して、カレント テクスチャの一覧内の先頭のテクスチャとしてミップマップ テクスチャを設定する。詳細については、「マルチ テクスチャ ブレンディング」を参照すること。

ミップマップ テクスチャ セットを選択した後、D3DTEXTUREMIPFILTER 列挙型からの値を D3DTSS_MIPFILTER テクスチャ ステージ ステートに割り当てなければならない。これにより、Direct3D ではミップマップ テクスチャ フィルタリングを自動的に実行する。

また、IDirectDrawSurface7::GetAttachedSurface メソッドを使用し、DDSCAPS2 構造体の DDSCAPS_MIPMAP および DDSCAPS_TEXTURE フラグを指定することで、ミップマップ サーフェスのチェーンを手動でトラバースできる。次の例では、最高解像度から最低解像度までミップマップ チェーンをトラバースする。

LPDIRECTDRAWSURFACE7 lpDDLevel, lpDDNextLevel; 
DDSCAPS2 ddsCaps; 
HRESULT ddres;
 
lpDDLevel = lpDDMipMap; 
lpDDLevel->AddRef(); 
ddsCaps.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_MIPMAP; 
ddres = DD_OK; 
while (ddres == DD_OK) 
{ 
// このレベルを処理する。
    . 
    . 
    . 
    ddres = lpDDLevel->GetAttachedSurface( 
&ddsCaps, &lpDDNextLevel); 
    lpDDLevel->Release(); 
    lpDDLevel = lpDDNextLevel; 
} 
if ((ddres != DD_OK) && (ddres != DDERR_NOTFOUND)) 
{
// エラー処理コード
}
. 
. 
. 

チェーンの各サーフェスにビットマップ データをロードするために、アプリケーションではミップマップ チェーンを手動でトラバースする必要がある。通常、この理由からチェーンをトラバースする。

Direct3D では、ミップマップ チェーンのレベルの数を明示的に格納する。アプリケーションでミップマップのサーフェス情報を取得すると (IDirectDrawSurface7::Lock または IDirectDrawSurface7::GetSurfaceDesc メソッドを呼び出す)、DDSURFACEDESC2 構造体の dwMipMapCount メンバに、最上位レベルを含めミップマップのレベルの数が格納される。ミップマップの最上位レベル以外のレベルについては、dwMipMapCount メンバが、そのミップマップから最小ミップマップまでのレベルの数を指定する。

[Visual Basic]

Direct3DDevice7.SetTexture メソッドを呼び出して、カレント テクスチャの一覧内の先頭のテクスチャとしてミップマップ テクスチャを設定する。詳細については、「マルチ テクスチャ ブレンディング」を参照すること。

ミップマップ テクスチャ セットを選択した後、CONST_D3DTEXTUREMIPFILTER 列挙型からの値を D3DTSS_MIPFILTER テクスチャ ステージ ステートに割り当てなければならない。これにより、Direct3D ではミップマップ テクスチャ フィルタリングを自動的に実行する。

また、DirectDrawSurface7.GetAttachedSurface メソッドを使用し、DDSCAPS2 型の DDSCAPS_MIPMAP および DDSCAPS_TEXTURE フラグを指定することで、ミップマップ サーフェスのチェーンを手動でトラバースできる。次の例では、最高解像度から最低解像度までミップマップ チェーンをトラバースする。

On Local Error Resume Next

Dim DDLevel As DirectDrawSurface7, _
DDNextLevel As DirectDrawSurface7

Dim ddsCaps As DDSCAPS2

DDLevel = DDMipMap
ddsCaps.lCaps = DDSCAPS_TEXTURE Or DDSCAPS_MIPMAP
While Err.Number = DD_OK
' このレベルを処理する。
    ' .
    ' .
    ' .
Set DDNextLevel = DDLevel.GetAttachedSurface(ddsCaps)
DDLevel = DDNextLevel
Wend
If ((Err.Number <> DD_OK) And (Err.Number <> DDERR_NOTFOUND)) Then
' エラー処理コード
End If
. 
. 
. 

チェーンのミップマップ サーフェスの各サーフェスにビットマップ データをロードするために、アプリケーションではミップマップ チェーンを手動でトラバースする必要がある。通常、この理由からチェーンをトラバースする。

Direct3D では、ミップマップ チェーンのレベルの数を明示的に格納する。アプリケーションでミップマップのサーフェス情報を取得すると (DirectDrawSurface7.Lock または DirectDrawSurface7.GetSurfaceDesc メソッドを呼び出す)、DDSURFACEDESC2 型の lMipMapCount メンバに、最上位レベルを含めミップマップのレベルの数が格納される。ミップマップの最上位レベル以外のレベルについては、lMipMapCount メンバが、そのミップマップから最小ミップマップまでのレベルの数を指定する。