ビューポート矩形

ビューポート矩形

C++ のビューポート矩形は、D3DVIEWPORT9 構造体を使って定義する。D3DVIEWPORT9 構造体は、IDirect3DDevice9 インターフェイスが公開する次のビューポート操作メソッドを使う。

D3DVIEWPORT9 構造体には XYWidthHeight の 4 つのメンバがある。これらを使って、シーンがレンダリングされるレンダリング ターゲット サーフェイス領域を定義する。これらの値は、次の図に示すように、転送先の矩形、つまりビューポート矩形に対応する。

ビューポート矩形

D3DVIEWPORT9 構造体の XYWidthHeight メンバに指定する値は、レンダリング ターゲット サーフェイスの左上角からのスクリーン座標である。この構造体は、シーンがレンダリングされる深度範囲を示す 2 つの追加メンバ MinZ および MaxZ を定義する。

Microsoft® Direct3D® では、ビューポートのクリッピング ボリュームの範囲は、X 方向については -1.0 ~ 1.0、Y 方向については 1.0 ~ -1.0 と想定している。この値は、過去のアプリケーションで最もよく使われた設定値である。射影トランスフォームの際、クリッピングを行う前にビューポートのアスペクト比を調整できる。このタスクについては、「射影トランスフォーム」で説明している。

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