现在是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 );