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);

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值