Platform SDK: DirectX |
注 : DirectX 7.0 で使用するビューポート構造体は、旧リリースで推奨された D3DVIEWPORT2 構造体とはまったく異なる。次の説明にしっかり目を通したうえで、ビューポート パラメータを適切に使用すること。
C++ のビューポート矩形は、D3DVIEWPORT7 構造体を使用して定義する。D3DVIEWPORT7 構造体は、IDirect3DDevice7 インターフェイスが提供するビューポート操作メソッドのIDirect3DDevice7::SetViewport および IDirect3DDevice7::GetViewport で使用する。D3DVIEWPORT7 構造体には dwX、dwY、dwWidth、および dwHeight の 4 つのメンバがある。これらを使用して、シーンがレンダリングされるレンダリング ターゲット サーフェス領域 "ビューポート矩形" を定義する。
これらの値は、次の図に示すように、転送先の矩形、つまりビューポート矩形に対応する。
D3DVIEWPORT7 構造体の dwX、dwY、dwWidth、および dwHeight メンバに指定する値は、レンダリング ターゲット サーフェスの左上角からのスクリーン座標である。この構造体は、シーンがレンダリングされる深度範囲を示す 2 つの追加メンバ dvMinZ および dvMaxZ を定義する。
DirectX 7.0 で使用するビューポート構造体は、旧リリースで推奨された D3DVIEWPORT2 構造体とはまったく異なる。つまり、D3DVIEWPORT7 構造体は従来の構造体を簡素化したもので、3D 射影空間におけるビューポートのサイズおよび寸法を記述するメンバがなくなっている。大部分のアプリケーションでは、現在存在していないメンバは常に同じ値に設定するが、ビューポートのアスペクト比の調整するためにそれらのメンバを使用するアプリケーションもわずかにある。このエフェクトを正確かつ確実に実行するのは困難である。
Direct3D では、ビューポートのクリッピング ボリュームの範囲は、X 方向については -1.0 〜 1.0、Y 方向については 1.0 〜 -1.0 と想定している (この値は、過去のアプリケーションで最もよく使用された設定値である)。旧リリースの DirectX と同様、DirectX 7.0 の場合も、射影トランスフォームの際、クリッピングを行う前にビューポートのアスペクト比を調整することができる。このタスクについては、「射影トランスフォーム」で説明する。
注 : D3DVIEWPORT7 構造体の dvMinZ および dvMaxZ メンバの解釈方法は、旧リリースの DirectX の場合とはまったく異なる。dvMinZ および dvMaxZ メンバは、現在はシーンがレンダリングされる深度範囲を示し、クリッピングには使用されない。ほとんどのアプリケーションでは、このメンバを 0.0 と 1.0 に設定して、深度バッファ内の深度値の全範囲にレンダリングしている。場合によっては、別の深度範囲を使用して特殊効果を得ることもできる。たとえば、ゲームのヘッドアップ ディスプレイをレンダリングする場合、両方の値を 0.0 に設定してフォアグラウンドのシーン内のオブジェクトを強制的にレンダリングしたり、両方の値を 1.0 に設定して常にバックグラウンドに存在する必要があるオブジェクトをレンダリングすることができる。
Visual Basic アプリケーションでは、D3DVIEWPORT7 型を使用してビューポート矩形を定義する。D3DVIEWPORT7 型は、Direct3DDevice7 クラスが提供するビューポート操作メソッドの Direct3DDevice7.SetViewport および Direct3DDevice7.GetViewport で使用する。D3DVIEWPORT7 型には lX、lY、lWidth、および lHeight の 4 つのメンバがある。これらを使用して、シーンがレンダリングされるレンダリング ターゲット サーフェス領域 "ビューポート矩形" を定義する。
これらの値は、次の図に示すように、転送先の矩形、つまりビューポート矩形に対応する。
D3DVIEWPORT7 型の lX、lY、lWidth、および lHeight メンバに指定する値は、レンダリング ターゲット サーフェスの左上角からのスクリーン座標である。この型は、シーンがレンダリングされる深度範囲を示す 2 つの追加メンバ minz および maxz を定義する。
Direct3D では、ビューポートのクリッピング ボリュームの範囲は、X 方向については -1.0 〜 1.0、Y 方向については 1.0 〜 -1.0 と想定している (この値は、過去のアプリケーションで最もよく使用された設定値である)。旧リリースの DirectX と同様、DirectX 7.0 の場合も、射影トランスフォームの際、クリッピングを行う前にビューポートのアスペクト比を調整することができる。このタスクについては、「射影トランスフォーム」で説明する。