Platform SDK: DirectX |
ユーザー定義クリップ面は、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 );
ユーザー定義クリップ面は、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)