Platform SDK: DirectX

ブレンディング行列の設定

[C++]

IDirect3DDevice7::SetTransform メソッドを呼び出して、システムがブレンドする際のトランスフォーム行列を設定する。第 1 パラメータに D3DTRANSFORMSTATETYPE 列挙型から "D3DTRANSFORMSTATE_WORLD" メンバを設定し、第 2 パラメータには設定する行列のアドレスを設定する。

次の C++ コードは、2 つのワールド行列を設定する。これらの行列間でジオメトリをブレンドして腕をつなげる。

// この例では、pd3dDevice 変数は
// 初期化された 3D シーン用の IDirect3DDevice7 インターフェイスへの
// 有効なポインタであるとする。
float     fBendAngle = 3.1415926f / 4.0f; // 45°
D3DMATRIX matUpperArm, matLowerArm;

// 上腕は動かない。単位行列を使用する。
D3DUtil_SetIdentityMatrix( matUpperArm );
pd3dDevice->SetTransform( D3DTRANSFORMSTATE_WORLD,  &matUpperArm );

// 下腕は x 軸を中心に回転する。これは上腕につなげる。
D3DUtil_SetRotateXMatrix( matLowerArm, -fBendAngle ); 
pd3dDevice->SetTransform( D3DTRANSFORMSTATE_WORLD1, &matLowerArm );

ブレンディング行列を設定しても、システムはその行列を後で使用できるように単にキャッシュするだけで、頂点のブレンドを開始するわけではない。詳細については、「ジオメトリ ブレンディングの有効化」を参照すること。

[Visual Basic]

Direct3DDevice7.SetTransform メソッドを呼び出して、システムがブレンドする際のトランスフォーム行列を設定する。第 1 パラメータに CONST_D3DTRANSFORMSTATETYPE 列挙から "D3DTRANSFORMSTATE_WORLD" メンバを設定し、第 2 パラメータには設定する行列のアドレスを設定する。

次の Visual Basic コードは、2 つのワールド行列を設定する。これらの行列間でジオメトリをブレンドして腕をつなげる。

' この例では、d3dDevice 変数は
' 初期化された 3D シーン用の Direct3DDevice7 オブジェクトへの
有効な参照であるとする。dx 変数は DirectX7 オブジェクトへの有効な参照である。
Dim nBendAngle As Single
Dim matUpperArm As D3DMATRIX, _
matLowerArm As D3DMATRIX

nBendAngle = 3.1415926 / 4#  ' 45°

' 上腕は動かない。単位行列を使用する。
Call dx.IdentityMatrix(matUpperArm)
Call d3dDevice.SetTransform(D3DTRANSFORMSTATE_WORLD, matUpperArm)

' 下腕は x 軸を中心に回転する。これは上腕につなげる。
Call dx.RotateXMatrix(matLowerArm, -nBendAngle)
Call d3dDevice.SetTransform(D3DTRANSFORMSTATE_WORLD1, matLowerArm)

ブレンディング行列を設定しても、システムはその行列を後で使用できるように単にキャッシュするだけで、頂点のブレンドを開始するわけではない。詳細については、「ジオメトリ ブレンディングの有効化」を参照すること。