Microsoft DirectX 8.0 (C++) |
次のサンプル コードは、頂点タイプと宣言を設定した後で、固定機能による頂点トゥイーニングを実現する方法を示している。
//この例で使用される変数。 DWORD handle; float TweenFactor = 0.3f;
最初の手順は、次のコードに示すように、IDirect3DDevice8::CreateVertexShader メソッドを使用して頂点シェーダを作成することである。
m_d3dDevice->CreateVertexShader( decl, NULL, &handle, 0 );
CreateVertexShader が受け取る第 1 パラメータは、ベクトル シェーダ宣言へのポインタである。この例では、「頂点の宣言の設定」で宣言した宣言が使用されている。第 2 パラメータは、頂点シェーダ関数の配列へのポインタとなる。この例では、頂点シェーダ関数は使用しないので、このパラメータには NULL を設定する。第 3 パラメータは、返される頂点を表す頂点シェーダ ハンドルへのポインタとなる。第 4 パラメータには、頂点シェーダの使用コントロールを指定する。D3DUSAGE_SOFTWAREPROCESSING フラグを使用して、頂点シェーダがソフトウェア頂点処理を使用する必要があることを指示することができる。この例では、このパラメータをゼロに設定して、頂点処理はハードウェアで行う必要があることを指示している。
次の手順は、次のコードに示すように、IDirect3DDevice8::SetVertexShader メソッドを呼び出して、現在の頂点シェーダを設定することである。
m_d3dDevice->SetVertexShader( handle );
SetVertexShader は、頂点シェーダへのハンドルを受け取る。このパラメータの値として、CreateVertexShader から返るハンドルまたは FVF コードを使用できる。この例では、最後の手順で呼び出される CreateVertexShader から返されるハンドルを使用する。
次の手順は、現在のレンダリング ステートを設定して頂点トゥイーニングを有効にし、トゥイーン係数を設定し、ストリーム ソースを設定することである。次のコードでは、IDirect3DDevice8::SetRenderState および IDirect3DDevice8::SetStreamSource を使用してこの手順を実行している。
m_d3dDevice->SetRenderState( D3DRS_VERTEXBLEND, D3DVBF_TWEENING ); m_d3dDevice->SetRenderState( D3DRS_TWEENFACTOR, *(DWORD*) &TweenFactor ); m_d3dDevice->SetStreamSource( 0 ,vb, 12*sizeof(float));
現在の頂点シェーダに対して複数のストリームを指定した場合は、トゥイーニング エフェクトに使用されるストリームごとに SetStreamSource を呼び出す必要がある。この時点で、頂点トゥイーニングが有効になる。レンダリング関数を呼び出すと、自動的に頂点トゥイーニングが適用される。