FVF的应用
下面,我们通过构造和描绘一个 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
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
以上代码,会在屏幕上绘制出一个白色的矩形。