Microsoft DirectX 8.0 (C++) |
ビューポート用の D3DVIEWPORT8 構造体の x、y、Width、および Height メンバに寸法を指定して、レンダリング ターゲット サーフェスのビューポートの位置座標および大きさを定義する。これらの値は、レンダリング ターゲット サーフェスの左上角からのスクリーン座標である。
Microsoft® Direct3D® では、ビューポートの位置座標と寸法を使用して頂点をスケーリングし、レンダリングするシーンをターゲット サーフェス上の適切な位置座標に配置する。内部的には、Direct3D は、各頂点に適用される行列にこれらの値を挿入している。
この行列は、ビューポートの寸法および指定の深度範囲に従って頂点をスケーリングし、その頂点をレンダリング ターゲット サーフェスの適切な位置座標に平行移動する。また、この行列は、y が下方に増加する左上角のスクリーン原点を反映するために y 座標を反転する。この行列を適用した後も、頂点は同次である。つまり、頂点は依然として [x,y,z,w] 頂点として存在するので、ラスタライザに送る前に頂点を非同次にトランスフォームしなければならない。これは、「ラスタ化」で説明するように、単純な除算によって行う。
注 ビューポート スケーリング行列は、頂点をスケーリングする D3DVIEWPORT8 構造体の MinZ および MaxZ メンバを組み込んで深度範囲 [MinZ, MaxZ] を合わせる。これは、これらのメンバがクリッピングに使用されていた旧リリースの Microsoft DirectX のセマンティクスとは異なる。
詳細については、「ビューポート矩形」および「クリッピング ボリューム」を参照すること。アプリケーションでは、通常、MinZ および MaxZ をそれぞれ 0.0 および 1.0 に設定して深度範囲全体へのレンダリングを実行する。ただし、別の値を設定して何らかのエフェクトを得ることもできる。両方の値を 0.0 に設定してすべてのオブジェクトを強制的にフォアグラウンドにレンダリングしたり、両方の値を 1.0 に設定してすべてのオブジェクトをバックグラウンドにレンダリングすることができる。