Platform SDK: DirectX

ビューポート クリッピング ボリュームの設定

レンダリング デバイスに対してビューポート パラメータを設定するには、単にビューポートのクリッピング ボリュームを設定するのみである。このためには、クリッピング ボリュームとレンダリング ターゲット サーフェス用のクリッピング値を初期化および設定する。ビューポートは、一般には、レンダリング ターゲット サーフェスの全領域にレンダリングするように設定されるが、必ずしもそうする必要はない。

[C++]

C++ でこれを実現するには、D3DVIEWPORT7 構造体のメンバを次のように設定する。

    memset(&viewData, 0, sizeof(D3DVIEWPORT7));
    viewData.dwX = 0;
    viewData.dwY = 0;
    viewData.dwWidth  = width;
    viewData.dwHeight = height;
    viewData.dvMinZ = 0.0f;     
    viewData.dvMaxZ = 1.0f;     

D3DVIEWPORT7 構造体に値を設定した後、IDirect3DViewport7::SetViewport メソッドを呼び出してデバイスにビューポート パラメータを適用する。次の例はこの呼び出しを示す。

    HRESULT hr;
 
    hr = lpD3DDevice->SetViewport(&viewData);
    if(FAILED(hr))
return hr;

この呼び出しが成功すると、ビューポート パラメータが設定され、次回レンダリング メソッドを呼び出したときにこのビューポート パラメータが有効になる。ビューポート パラメータ値を変更する必要がある場合は、D3DVIEWPORT7 構造体の値を更新して、再度 SetViewport 呼び出すだけでよい。

 :  D3DVIEWPORT7 構造体の dvMinZ および dvMaxZ メンバの解釈方法は、旧バージョンの DirectX の場合とはまったく異なる。dvMinZ および dvMaxZ メンバは、現在はシーンがレンダリングされる深度範囲を示し、クリッピングには使用されない。ほとんどのアプリケーションでは、このメンバを 0.0 と 1.0 に設定して、深度バッファ内の深度値の全範囲にレンダリングしている。場合によっては、別の深度範囲を使用して特殊効果を得ることもできる。たとえば、ゲームのヘッドアップ ディスプレイをレンダリングする場合、両方の値を 0.0 に設定してフォアグラウンドのシーン内のオブジェクトを強制的にレンダリングしたり、両方の値を 1.0 に設定して常にバックグラウンドに存在する必要があるオブジェクトをレンダリングすることができる。

[Visual Basic]

次の Visual Basic コードでは、この内容を実現するために D3DVIEWPORT7 型の設定を行う。

Dim viewData As D3DVIEWPORT7

With viewData
.lX = 0:.lY = 0
.lWidth = Width:.lHeight = Height
.minz = 0#:.maxz = 1#
End With

D3DVIEWPORT7 型に値を設定した後、Direct3DDevice7.SetViewport メソッドを呼び出してデバイスにビューポート パラメータを適用する。

' dev 変数には Direct3DDevice7 オブジェクトへの有効な参照が格納される。
Call dev.SetViewport(viewData) 

この呼び出しの後、ビューポート パラメータが設定され、次回レンダリング メソッドを呼び出したときにこのビューポート パラメータが有効になる。ビューポート パラメータ値を変更する必要がある場合は、D3DVIEWPORT7 型の値を更新して、再度 SetViewport 呼び出すだけでよい。