FVF的应用

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 

以上代码,会在屏幕上绘制出一个白色的矩形。



你可能感兴趣的:(FVF的应用)