?/TD>
Microsoft DirectX 9.0

LVertex Legacy Type


This topic shows the steps necessary to initialize and use vertices that have a position, diffuse color, specular color, and texture coordinates.

The first step is to define the custom vertex type and flexible vertex format (FVF) as shown in the code example below.

struct LVertex
{
    FLOAT    x, y, z;
    D3DCOLOR specular, diffuse;
    FLOAT    tu, tv;
};

const DWORD VertexFVF = (D3DFVF_XYZ | D3DFVF_DIFFUSE |
                         D3DFVF_SPECULAR | D3DFVF_TEX1 );

The next step is to create a vertex buffer with enough room for four vertices by using the IDirect3DDevice9::CreateVertexBuffer method as shown in the code example below.

g_d3dDevice->CreateVertexBuffer( 4*sizeof(LVertex), VertexFVF, 
                 D3DUSAGE_WRITEONLY, D3DPOOL_DEFAULT, &pBigSquareVB);

The next step is to manipulate the values for each vertex as shown in the code example below.

LVertex * v;
pBigSquareVB->Lock( 0, 0, (BYTE**)&v, 0 );

v[0].x  = 0.0f;  v[0].y  = 10.0;  v[0].z  = 10.0f;
v[0].diffuse  = 0xffff0000;
v[0].specular = 0xff00ff00;
v[0].tu = 0.0f;  v[0].tv = 0.0f;

v[1].x  = 0.0f;  v[1].y  = 0.0f;  v[1].z  = 10.0f;
v[1].diffuse  = 0xff00ff00;
v[1].specular = 0xff00ffff;
v[1].tu = 0.0f;  v[1].tv = 0.0f;

v[2].x  = 10.0f; v[2].y  = 10.0f; v[2].z  = 10.0f;
v[2].diffuse  = 0xffff00ff;
v[2].specular = 0xff000000;
v[2].tu = 0.0f;  v[2].tv = 0.0f;

v[3].x  = 0.0f; v[3].y  = 10.0f;  v[3].z = 10.0f;
v[3].diffuse  = 0xffffff00;
v[3].specular = 0xffff0000;
v[3].tu = 0.0f; v[3].tv = 0.0f;

pBigSquareVB->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.

g_d3dDevice->SetFVF( VertexFVF );
g_d3dDevice->SetStreamSource( 0, pBigSquareVB, 4*sizeof(LVertex) );
g_d3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0 ,2);

Passing an FVF to IDirect3DDevice9::SetFVF method specifies a legacy FVF and that stream 0 is the only valid stream.



© 2002 Microsoft Corporation. All rights reserved.