Microsoft DirectX 8.0 (Visual Basic)

マルチテクスチャ シェーダ

ここでは、位置と複数のテクスチャ座標を持つ単純な頂点シェーダを初期化および使用するために必要なステップについて説明する。

最初のステップでは、位置と色を格納する構造体を宣言する。これを、次のサンプル コードに示す。

Private Type XYZBUFF
    x As Single
    y As Single
    z As Single
End Type

Private Type TEX0BUFF
    tu As Single
    tv As Single
End Type

Private Type TEX1BUFF
    tu2 As Single
    tv2 As Single
End Type

Const XYZBUFF_FVF = (D3DFVF_XYZ)
Const TEX0BUFF_FVF = (D3DFVF_TEX1)
Const TEX1BUFF_FVF = (D3DFVF_TEX1)

次のステップでは、頂点シェーダ宣言を作成する。これを、次のサンプル コードに示す。

Dim decl(7) As Long

decl(0) = D3DVSD_STREAM(0)
decl(1) = D3DVSD_REG(D3DVSDE_POSITION, D3DVSDT_FLOAT3)
decl(2) = D3DVSD_STREAM(1)
decl(3) = D3DVSD_REG( D3DVSDE_TEXCOORD0, D3DVSDT_FLOAT2)
decl(4) = D3DVSD_STREAM(2)
decl(5) = D3DVSD_REG( D3DVSDE_TEXCOORD1, D3DVSDT_FLOAT2)
decl(6) = D3DVSD_END()

次のステップでは、Direct3DDevice8.CreateVertexShader メソッドを呼び出して頂点シェーダを作成する。

Call m_D3DDevice.CreateVertexShader( decl, ByVal 0, vShader, 0)

CreateVertexShader の第 2 パラメータに ByVal を渡して、この頂点シェーダで固定機能パイプラインを使用することを Direct3D に指示する。

頂点バッファと頂点シェーダは、作成後はいつでも使用できる。次のサンプル コードは、頂点シェーダの設定方法、ストリーム ソースの設定方法、および新しい頂点シェーダを使用する三角形リストの描画方法を示している。

Call m_D3DDevice.SetVertexShader( vShader )
Call m_D3DDevice.SetStreamSource( 0, xyzbuf, 4 * len(xyzbuf))
Call m_D3DDevice.SetStreamSource( 1, tex0buf, 2 * len(colbuf))
Call m_D3DDevice.SetStreamSource( 2, tex0buf, 2 * len(colbuf))
Call m_D3DDevice.SetIndices( IB, 0 )
Call m_D3DDevice.DrawIndexedPrimitive( D3DPT_TRIANGLELIST, 0, max - min + 1, 0, count / 3 )