Platform SDK: DirectX

クリップ面の設定と取得

[C++]

ユーザー定義クリップ面は、IDirect3DDevice7::SetClipPlane および IDirect3DDevice7::GetClipPlane メソッドを呼び出して設定および取得する。平面を定義する係数は、4 つの要素を持つ D3DVALUE 型の配列に格納される。

SetClipPlane メソッドは、2 つのパラメータを受け取る。第 1 パラメータには、設定するクリップ面の 0 から始まるインデックスを指定する。第 2 パラメータには、一般平面式の係数を格納するバッファのアドレスを指定する。

 :  SetClipPlane に渡す係数は一般平面式の形をとる。メソッドで渡す配列の値がA、B、C、および D (メモリ内で現れる順序) であるとすると、これらの値はこの式に従い Ax + By + Cz + D = 0 になる。Ax + By + Cz + D >= 0 が成り立つ場合、ワールド空間座標 (x, y, z) の点が平面で区切られた半分の空間に表示される。クリップ面上またはその後方にある点はシーンから切り取られる。

次のコードは、C++ におけるこのメソッドの呼び出し方法を示す。

// この例では、pd3dDevice 変数は IDirect3DDevice7 インターフェイスへの
// 有効なポインタである。

// x<=0 を満たす頂点をクリッピングするように
// クリップ面を設定する。
D3DVALUE clip[4];
ZeroMemory( (LPVOID)clip, sizeof(clip) );

clip[0] = 1.0f;
pd3dDevice->SetClipPlane( 0, clip );

クリップ面の係数を設定しても、その面によるクリッピングが有効になるわけではない。詳細については、「クリップ面の有効/無効」を参照すること。

クリップ面は最大 32 個 (D3DMAXUSERCLIPPLANES) まで定義できる。したがって、SetClipPlane メソッドに渡すことができる最大インデックスは 31 である。無効な値を渡すとメソッドは失敗し、DDERR_INVALIDPARAMS を返す。

IDirect3DDevice7::GetClipPlane メソッドは、意味論的には IDirect3DDevice7::SetClipPlane メソッドに類似したメソッドである。次の C++ コードは、インデックス 2 のクリップ面に現在設定されている係数を取得する。

// この例では、pd3dDevice 変数は IDirect3DDevice7 インターフェイスへの
// 有効なポインタである。

D3DVALUE clip[4];
pd3dDevice->GetClipPlane( 2, clip );
[Visual Basic]

ユーザー定義クリップ面は、Direct3DDevice7.SetClipPlane および Direct3DDevice7.GetClipPlane メソッドを呼び出して設定および取得する。平面を定義する係数は、4 つの要素を持つ D3DVALUE 型の配列に格納される。

SetClipPlane への第 1 パラメータには、設定するクリップ面の 0 から始まるインデックスを指定する。その他のパラメータには、一般平面式の係数を格納する。

 :  SetClipPlane に渡す係数は一般平面式の形をとる。メソッドで渡す配列の値がA、B、C、および D (メモリ内で現れる順序) であるとすると、これらの値はこの式に従い Ax + By + Cz + D = 0 になる。Ax + By + Cz + D >= 0 が成り立つ場合、ワールド空間座標 (x, y, z) の点が平面で区切られた半分の空間に表示される。クリップ面上またはその後方にある点はシーンから切り取られる。

次のコードは、Visual Basic におけるこのメソッドの呼び出し方法を示す。

' この例では、d3dDevice 変数は Direct3DDevice オブジェクトへの
' 有効な参照である。

' x<=0 を満たす頂点をクリッピングするように
' クリップ面を設定する。
Dim A As Single, B As Single, _
C As Single, D As Single
           
A = 1#
    
Call d3dDevice.SetClipPlane(0, A, B, C, D)

クリップ面の係数を設定しても、その面によるクリッピングが有効になるわけではない。詳細については、「クリップ面の有効/無効」を参照すること。

クリップ面は最大 32 個 (D3DMAXUSERCLIPPLANES) まで定義できる。したがって、SetClipPlane メソッドに渡すことができる最大インデックスは 31 である。無効な値を渡すとメソッドは失敗し、DDERR_INVALIDPARAMS を返す。

Direct3DDevice7.GetClipPlane メソッドは、意味論的には Direct3DDevice7.SetClipPlane メソッドに類似したメソッドである。次の Visual Basic コードは、インデックス 2 のクリップ面に現在設定されている係数を取得する。

' この例では、d3dDevice 変数は Direct3DDevice オブジェクトへの
' 有効な参照である。

Dim A As Single, B As Single, _
C As Single, D As Single
    
Call d3dDevice.GetClipPlane(2, A, B, C, D)