Dx10 学习buffer

这个程序是一个3D的彩色立方体,用到的知识点很简单。使用的是《DirectX 3D 游戏编程入门》(我习惯称为龙书,下文同)的框架。

下面只是其中一些步骤中的要点,并无逻辑关联。

1.buffer的建立。

buffer的描述

buffer是什么就不说了,很多书都有定义。D3D的buffer使用D3D10_BUFFER_DESC结构体描述,也即是我们每次建立一个新的buffer,都要建立相对应的DESC结构体。由于龙书是入门性质的书籍,所以作者只给我们介绍了几个对应的参数含义。他们分别是:Usage ByteWidth BindFlags CPUAccessFlags  MiscFlags。意义依次为,buffer是否可更新(是否动态),buffer要多大,这个buffer要绑定到那里(比如顶点缓冲区就是D3D10_BIND_VERTEX_BUFFER,索引缓冲就是D3D10_BIND_INDEX_BUFFER)),CPU的访问权限(一般设为0 ,表示都在GPU中绘制),最后一个不清楚,一般为0。

buffer的创建

md3dDevice->CreateBuffer(..);函数创建buffer,传入参数有上面建立的D3D10_BUFFER_DESC,以及D3D10_SUBRESOURCE_DATA(用来描述buffer数据在内存中的位置)。

2.buffer的绑定及使用

buffer的绑定
buffer在使用之前,要先绑定在设备的输入槽上。

md3dDevice->IASetVertexBuffers(0,1,&mVB,&stride,&offset);//绑定顶点buffer

参数意义分别为:输入槽序号(这里为0,也就是第一个输入槽),输入槽数量(这里是一个),指向buffer的指针,指向步长数组的指针(步长指的是buffer中元素的字节长度,当有多个buffer的时候每个步长数组对应一个缓冲区),指向偏移数组的指针(一个数组元素对应一个buffer,表示想要汇编器跳过该buffer的前多少个字节)
md3dDevice->IASetIndexBuffer(mIB,DXGI_FORMAT_R32_UINT,0);//绑定索引buffer

第二个参数是索引格式,注意要与之前在D3D10_BUFFER_DESC.ByteWidth中指定的长度保持一致。

buffer的使用

在buffer绑定完成之后,要使用buffer通过一下步骤。

顶点buffer:md3ddevice->Draw(..);//参数有2个,第一个表示一共多少个顶点,第二个表示从第几个点开始

索引buffer:当使用索引时,我们用DrawIndexed(..);方法取代Draw方法,参数有3个,第一个表示一共有多少个索引参与绘制(可以不是全部),第二个表示从索引缓冲区哪里开始读取索引数据,第三个是一个与索引相加的数据。(用于全局索引缓冲和全局顶点缓冲的时候)

转载于:https://www.cnblogs.com/CAION/archive/2012/12/07/2807098.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值