下面,我们通过构造和描绘一个 Vertex Buffer,来介绍FVF的应用;
要构建一个vertex buffer,需要按下列步骤进行。
1>声明指针变量
2>定义顶点资料结构与常数
3>产生vertex buffer
4>设定vertex buffer的资料
1 LPDIRECT3DVERTEXBUFFER9 m_pMyVB;//定义指针
2
3 //****定义顶点资料****
4 struct MY_VERTEX
5 {
6 D3DXVECTOR3 p ;//座标值
7 DWORD color;//defuse色
8 };
9
10 //****定义常量****
11 #define MY_VERTEX_FVF (D3DFVF_XYZ | D3DFVF_DIFFUSE)
12
13 //****产生Vertex Buffer****
14 if(FAILED(pD3Device->CreateVertexBuffer(
15 4 * sizeof(MY_VERTEX),//VertexBuffer的大小
16 D3DUSAGE_WRITEONLY ,//VB的使用方式
17 MY_VERTEX_FVF ,//VB的FVF格式
18 D3DPOOL_MANAGED ,//系统的VB操作方式
19 &m_pMyVB ,//存放VB的变量
20 NULL) ) ) //永远指定为NULL
21 {
22 return E_FALL;
23 }
24
25 //****设定资料****
26
27 MY_VERTEX* pVertex;
28 //以0填充vertex buffer的内容
29 m_pMyVB->Lock(0,0,(void**)&pVertex,0);
30 //顶点资料:顶点坐标的设定(假定几个坐标点)
31 pVertex[0].p = D3DVECTOR3(-1.5f, 1.5f , 0.0f);
32 pVertex[1].p = D3DVECTOR3(1.5f , 1.5f , 0.0f);
33 pVertex[2].p = D3DVECTOR3(-1.5f, -1.5f, 0.0f);
34 pVertex[3].p = D3DVECTOR3(1.5f , -1.5f, 0.0f);
35
36 //顶点资料:顶点的基本颜色的(全为白色)
37 pVertex[0].color=pVertex[1].color=pVertex[2].color=pVertex[3].color=D3DXCOLOR(1.0f,1.0f,1.0f,1.0f);
38
39 //解锁
40 m_pMyVB->UnLock();
41
42 //将Vertex buffer设定到Rendering pipeline
43 pD3DDevice->SetStreamSource(0,m_pMyVB,0,sizeof(MY_VERTEX));
44
45 //设定顶点资料的FVF格式
46 pD3DDevice->SetFVF(MY_VERTEX);
47
48 //把图形绘制出来
49 pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);
50
51
以上代码,会在屏幕上绘制出一个白色的矩形。