菜鸟DirectX之顶点缓存

现在是22点43分,刚下班回家,因为游戏要十二月份上线,比之前的计划提前了三个月,拼命的加班啊。。

什么是顶点缓存

在游戏中,物体模型是用多边形网格来描述的,一般的是三角形,顶点缓存就是来存储用来描述物体模型的所有多面形的顶点的信息,这些信息有顶点的三维坐标,顶点颜色,顶点法向量,纹理坐标等。

如何使用顶点缓存

使用顶点缓存分为四步

1 设计顶点缓存

就是用来说明你的顶点中有哪些信息

比如: 

struct MYVERTEX

{

float x,y,z;//顶点的三维坐标 x,y,z

DWORD color;//顶点的颜色值

}

然后用一个宏来描述顶点所包含的信息,以便随后设置到环境中

#deifne D3DFVF_MYVERTEX  (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)

2 创建顶点缓存

函数 CreateVertexBuffer

比如:

LPDIRECT3DVERTEXBUFFER9g_pVertexBuffer = NULL;

if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVertexBuffer, NULL ) ) )
{
return E_FAIL;
}

3 访问顶点缓存

函数 访问之前需要先把顶点缓存的内存锁住,然后读写数据,然后解锁,直接贴出代码

//顶点数据,
CUSTOMVERTEX vertices[] =
{
{ 300.0f, 100.0f, 0.0f, 1.0f,  D3DCOLOR_XRGB(
255,0,0), },
{ 500.0f, 100.0f, 0.0f, 1.0f,  D3DCOLOR_XRGB(255,0,0), }, 
{ 300.0f, 300.0f, 0.0f, 1.0f,  D3DCOLOR_XRGB(255,0,0), },

};


//填充顶点缓冲区
VOID* pVertices;
if( FAILED( g_pVertexBuffer->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) )
return E_FAIL;
memcpy( pVertices, vertices, sizeof(vertices) );
g_pVertexBuffer->Unlock();

4 绘制图形

这里就是绘制三角形

这里要分三小步

(1)设置数据源 

函数 SetStreamSource

(2)设置定点格式

函数 SetFVF

(3)绘制图形

函数 DrawOrimitive

贴代码

g_pd3dDevice->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD);//设置渲染状态
g_pd3dDevice->SetStreamSource( 0, g_pVertexBuffer, 0, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 2 );

你可能感兴趣的:(菜鸟DirectX之顶点缓存)