Microsoft DirectX 8.0 (Visual Basic)

LVertex 型レガシ タイプ

ここでは、位置、ディフューズ色、スペキュラ色、およびテクスチャ座標を持つ頂点を初期化および使用するために必要なステップについて説明する。

最初のステップでは、次のサンプル コードに示すように、カスタム頂点タイプと FVF を定義する。

Private Type LVertex
    x As Single
    y As Single
    z As Single
    diffuse As Long
    specular As Long
    tu As Single
    tv As Single
End Type

Const VertexFVF = (D3DFVF_XYZ Or D3DFVF_DIFFUSE Or _
                   D3DFVF_SPECULAR Or D3DFVF_TEX1)

次のステップでは、Direct3DDevice8.CreateVertexBuffer メソッドを呼び出して、4 つの頂点を収めるのに十分な領域を確保した頂点バッファを作成する。これを、次のサンプル コードに示す。

Set BigSquareVB = m_D3DDevice.CreateVertexBuffer( _
                                  4*len(LVertex), VertexFVF, _
                                  D3DUSAGE_WRITEONLY, _
                                  D3DPOOL_DEFAULT)

次のステップでは、各頂点の値を処理する。これを、次のサンプル コードに示す。

Dim v(4) As LVertex
Call BigSquareVB.Lock(0, 0, v(), 0)

v(0).x  = 0.0: v(0).y  = 10.0: v(0).z  = 10.0
v(0).diffuse = &HFFFF0000;
v(0).specular = &HFF00FF00;
v(0).tu = 0.0: v(0).tv = 0.0

v(1).x  = 0.0: v(1).y  = 0.0:  v(1).z  = 10.0
v(1).diffuse  = &HFF00FF00;
v(1).specular = &HFF00FFFF;
v(1).tu = 0.0: v(1).tv = 0.0

v(2).x  = 10.0: v(2).y  = 10.0: v(2).z  = 10.0
v(2).diffuse  = &HFFFF00FF;
v(2).specular = &HFF000000;
v(2).tu = 0.0: v(2).tv = 0.0

v(3).x  = 0.0: v(3).y  = 10.0: v(3).z = 10.0
v(3).diffuse  = &HFFFFFF00;
v(3).specular = &HFFFF0000;
v(3).tu = 0.0: v(3).tv = 0.0

BigSquareVB.Unlock

頂点バッファは初期化され、レンダリングする準備ができている。次のサンプル コードは、レガシ FVF を使用して正方形を描画する方法を示している。

Call m_D3DDevice.SetVertexShader(VertexFVF)
Call m_D3DDevice.SetStreamSource(0, BigSquareVB, 4*len(LVertex))
Call m_D3DDevice.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0 ,2)

FVF を Direct3DDevice8.SetVertexShader メソッドに渡して、レガシ FVF が使用されること、およびストリーム 0 だけが有効なストリームであることを Direct3D に指示する。