Microsoft DirectX 8.1 (Visual Basic) |
The topic shows the steps necessary to initialize and use vertices that have a transformed position, diffuse color, specular color, and texture coordinates.
The first step is to define the custom vertex type and FVF as shown in the code example below.
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)
The next step is to create a vertex buffer with enough room for four vertices by using the Direct3DDevice8.CreateVertexBuffer method as shown in the code example below.
Set BigSquareVB = m_D3DDevice.CreateVertexBuffer( _ 4*len(TLVertex), VertexFVF, _ D3DUSAGE_WRITEONLY, D3DPOOL_DEFAULT)
The next step is to manipulate the values for each vertex as shown in the code example below.
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
The vertex buffer has been initialized and is ready to render. The following code example shows how to use the legacy FVF to draw a square.
Call m_D3DDevice.SetVertexShader(VertexFVF) Call m_D3DDevice.SetStreamSource(0, BigSquareVB, 4*len(TLVertex)) Call m_D3DDevice.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0 ,2)
Passing an FVF to the Direct3DDevice8.SetVertexShader method tells Direct3D that a legacy FVF is being used and that stream 0 is the only valid stream.