Microsoft DirectX 8.0 (Visual Basic) |
ここでは、トランスフォーム済み位置、ディフューズ色、スペキュラ色、およびテクスチャ座標を持つ頂点を初期化および使用するために必要なステップについて説明する。
最初のステップでは、次のサンプル コードに示すように、カスタム頂点タイプと FVF を定義する。
Private Type TLVertex x As Single y As Single z As Single rhw As Single diffuse As Long specular As Long tu As Single tv As Single End Type Const VertexFVF = (D3DFVF_XYZRHW Or D3DFVF_DIFFUSE Or _ D3DFVF_SPECULAR Or D3DFVF_TEX1)
次のステップでは、Direct3DDevice8.CreateVertexBuffer メソッドを呼び出して、4 つの頂点を収めるのに十分な領域を確保した頂点バッファを作成する。これを、次のサンプル コードに示す。
Set BigSquareVB = m_D3DDevice.CreateVertexBuffer( _ 4*len(TLVertex), VertexFVF, _ D3DUSAGE_WRITEONLY, D3DPOOL_DEFAULT)
次のステップでは、各頂点の値を処理する。これを、次のサンプル コードに示す。
Dim v(4) As TLVertex Call BigSquareVB.Lock(0, 0, v(), 0) v(0).x = 0.0: v(0).y = 10.0: v(0).z = 10.0: v(0).rhw = 1.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).rhw = 1.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).rhw = 1.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).rhw = 1.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(TLVertex)) Call m_D3DDevice.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0 ,2)
FVF を Direct3DDevice8.SetVertexShader メソッドに渡して、レガシ FVF が使用されること、およびストリーム 0 だけが有効なストリームであることを Direct3D に指示する。