directx初第四卷

顶点缓存

声明变量

LPDIRECT3DVERTEXBUFFER9 g_vertexBuffer = NULL;

设计顶点结构

struct d3dVertex
{
float x, y, z, rhw; //经过变换的坐标
unsigned long color; //颜色
};
//(FVF)灵活的顶点格式
#define d3dfvf_vertex (D3DFVF_XYZRHW | D3DFVF_DIFFUSE) //标识为:包含经坐标变换的顶点坐标值|包含漫反射颜色值

填充顶点结构

//设置d3d格式的白色颜色
unsigned long col = D3DCOLOR_XRGB(255, 255, 255);
//写入数组
d3dVertex objData[] =
{
{ 420, 150, 0.5f, 1, col },
{ 420, 350, 0.5f, 1, col },
{ 220, 150, 0.5f, 1, col },
{ 220, 350, 0.5f, 1, col },
};

创建顶点缓存

//创建顶点缓存(顶点缓存的大小,无附加属性,顶点格式,默认(顶点缓存存在显存中),把结果存到顶点缓存指针,基本为null)
if (FAILED(g_pd3dDevice->CreateVertexBuffer(sizeof(objData),0,d3dfvf_vertex,D3DPOOL_DEFAULT,&g_vertexBuffer,NULL)))
{
return FALSE;
}

访问顶点缓存

void *ptr;
//加锁处理(内存起始位置到加锁位置的偏移量,加锁区域大小,加锁对象指针,无加锁方式)
if (FAILED(g_vertexBuffer->Lock(0, sizeof(objData), (void**)&ptr, 0)))
return FALSE;
//将objData内容复制到ptr地址
memcpy(ptr, objData, sizeof(objData));
//解锁处理
g_vertexBuffer->Unlock();

绘制顶点

//顶点缓存关联渲染流水线(不指定与该顶点缓存相关联的数据流,包含顶点数据的顶点缓存指针,无偏移量,顶点结构大小)
g_pd3dDevice->SetStreamSource(0, g_vertexBuffer, 0, sizeof(d3dVertex));
//指定灵活顶点格式
g_pd3dDevice->SetFVF(d3dfvf_vertex);
//图形绘制(线列模式,从位置0开始读取顶点缓存,绘制2个图元)
g_pd3dDevice->DrawPrimitive(D3DPT_LINELIST, 0, 2);

运行结果:

文章目录
  1. 1. 顶点缓存