Platform SDK: DirectX

ステップ 4 : 深度バッファリングを有効にする

[Visual Basic]

ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「Direct3D 直接モード Visual Basic チュートリアル」を参照すること。

[C++]

深度バッファをレンダリング ターゲット サーフェスにアタッチすると、レンダリング ターゲットからレンダリング デバイスを作成することができる。

アプリケーションで深度バッファを使用する場合、ビューポートおよび深度バッファの両方をクリアする必要がある。深度バッファをクリアするには、IDirect3DDevice7::Clear メソッドに D3DCLEAR_ZBUFFER フラグを指定する。

    pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,
                       0x000000ff, 1.0f, 0L );

レンダリング デバイスが用意されると、そのデバイスの D3DRENDERSTATE_ZENABLE レンダリング ステートを設定して、深度バッファリングを有効にすることができる。D3DZBUFFERTYPE 列挙型には、深度バッファのレンダリング ステートを設定するメンバが含まれている。D3DZB_TRUE メンバ (または TRUE) により、z バッファリングを有効にする。サンプル ZBuffer は、アプリケーション定義関数 App_Render でのシーンのレンダリング中に、z バッファリングを有効にしている。次のコードは、App_Render からの該当部分の抜粋である。

    // z バッファリングを有効にする (注 :  実際にはこの処理をフレームごとに行う必要はない)。
    pd3dDevice->SetRenderState( D3DRENDERSTATE_ZENABLE, TRUE );

このチュートリアルでは、フレーム単位に深度バッファリングを有効にしているが、これは必須ではない。実際のアプリケーションでは、シーンの初期化中に D3DRENDERSTATE_ZENABLE レンダリング ステートを設定しておき、深度バッファリングを無効にしたり、深度バッファリングの別のタイプを選択するときにだけ変更するのが普通である。

 :  D3DZBUFFERTYPE 列挙型には、準拠ハードウェアでの W ベースの深度比較を有効にする D3DZB_USEW 値が含まれる。詳細については、「深度バッファ」を参照すること。