Microsoft DirectX 8.0 (C++) |
ここでは、位置と複数のテクスチャ座標を持つ単純な頂点シェーダを初期化および使用するために必要なステップについて説明する。
最初のステップでは、位置と色を格納する構造体を宣言する。これを、次のサンプル コードに示す。
struct XYZBuff { D3DVALUE x, y, z; }; struct Tex0Buff { D3DVALUE tu, tv; }; struct Tex1Buff { D3DVALUE tu2, tv2; }; #define XYZBUFF (D3DFVF_XYZ) #define TEX0BUFF (D3DFVF_TEX1) #define TEX1BUFF (D3DFVF_TEX1)
次のステップでは、頂点シェーダ宣言を作成する。これを、次のサンプル コードに示す。
DWORD decl[] = { D3DVSD_STREAM(0), D3DVSD_REG( D3DVSDE_POSITION, D3DVSDT_FLOAT3 ), D3DVSD_STREAM(1), D3DVSD_REG( D3DVSDE_TEXCOORD0, D3DVSDT_FLOAT2), D3DVSD_STREAM(2), D3DVSD_REG( D3DVSDE_TEXCOORD1, D3DVSDT_FLOAT2), D3DVSD_END() };
次のステップでは、IDirect3DDevice8::CreateVertexShader メソッドを呼び出して頂点シェーダを作成する。
g_d3dDevice->CreateVertexShader( decl, NULL, &vShader, 0);
CreateVertexShader の第 2 パラメータに NULL を渡して、この頂点シェーダで固定機能パイプラインを使用することを Direct3D に指示する。
頂点バッファと頂点シェーダは、作成後はいつでも使用できる。次のサンプル コードは、頂点シェーダの設定方法、ストリーム ソースの設定方法、および新しい頂点シェーダを使用する三角形リストの描画方法を示している。
g_d3dDevice->SetVertexShader( &vShader ); g_d3dDevice->SetStreamSource( 0, xyzbuf, 4 * sizeof(FLOAT)); g_d3dDevice->SetStreamSource( 1, tex0buf, 2 * sizeof(FLOAT)); g_d3dDevice->SetStreamSource( 2, tex1buf, 2 * sizeof(FLOAT)); g_d3dDevice->SetIndices( pIB, 0 ); g_d3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, 0, max - min + 1, 0, count / 3 );