Lecture 6 Drawing in Direct3D.pptVIP

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Lecture 6 Drawing in Direct3D

M Lecture 6 Drawing in Direct3D ——D3D绘制 Contents Vertex/Index Buffers Render States Drawing Preparations Drawing with Vertex/Index Buffers D3DX Geometric Objects Sample Applications M Vertex/Index Buffers 顶点和索引缓存有相似的接口并且共享相似的方法,均是一块连续的存储了数据(顶点、索引)的内存。我们使用顶点和索引缓存保存我们的数据是因为它们能被放置在显存中。渲染显存中的数据要比渲染系统内存中的数据快的多。 顶点缓存是通过IDirect3DVertexBuffer9接口定义。 引缓存是通过IDirect3DIndexBuffer9接口定义。 M Vertex/Index Buffers 顶点缓存的创建: HRESULT IDirect3DDevice9::CreateVertexBuffer( UINT Length, //分配给缓存的字节大小 DWORD Usage, //指定关于怎样使用缓存的额外信息 DWORD FVF, //存储在缓存中的顶点格式 D3DPOOL Pool //缓存放置在哪一个内存池中 IDirect3DVertexBuffer9** ppVertexBuffer, //返回创建好的顶点缓存的指针 HANDLE* pSharedHandle //没有使用;设置为0 ); M 如为0,表示无需附加属性 D3DUSAGE_DYNAMIC——设置这个参数可以使缓存是动态的。 D3DUSAGE_POINTS——这个参数指定缓存存储原始点。 D3DUSAGE_SOFTWAREPROCESSING——使用软件顶点处理 D3DUSAGE_WRITEONLY——指定应用程序只能写缓存。它允许驱动程序分配最适合的内存地址作为写缓存。注意如果从创建好的这种缓存中读数据,将会返回错误信息。 Vertex/Index Buffers 顶点缓存的创建: HRESULT IDirect3DDevice9::CreateIndexBuffer( UINT Length, //分配给缓存的字节大小 DWORD Usage, //指定关于怎样使用缓存的额外信息 D3DFORMAT Format, //指定索引的大小,D3DFMT_ INDEX16:16位索引,D3DFMT_ INDEX32:32位索引。 D3DPOOL Pool //缓存放置在哪一个内存池中 IDirect3DIndexBuffer9** ppIndexBuffer, //返回创建好的索引缓存的指针 HANDLE* pSharedHandle //没有使用;设置为0 ); M Vertex/Index Buffers 注意: 1)不使用D3DUSAGE_DYNAMIC参数创建的缓存被叫做静态缓存。静态缓存通常被放置在显存中,在其中的数据能被很有效的处理。对于静态缓存,从中读取和写入数据是很慢的,因此,我们用静态缓存存储静态数据。静态缓存应该在应用程序初始话的时候就被填充好 2)使用D3DUSAGE_DYNAMIC 参数创建的缓存被叫做动态缓存。动态缓存通常被放在AGP 内存中,这种内存中的数据能被很快的更新。假如你需要经常更新缓存中的数据,那么你就应该使用动态缓存。 3)在程序中读取显存和AGP 内存都是非常慢的。因此,假如你在运行时需要读取你的几何物体,最好的方案是指定一块系统内存,都在其中拷贝并且读取数据。 M Vertex/Index Buffers 创建一个静态顶点缓存,该缓存能存储8 个顶点: IDirect3DVertexBuffer9* vb; _device-CreateVertexBuffer( 8 * sizeof( Vertex ), 0, D3DFVF_XYZ, D3DPOOL_MANAGED, vb, 0 ); M IDirect3DIndexBuffer9* ib; _device-CreateIndexBuffer( 36 * sizeof( WORD ), D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_MANAGED, ib, 0 ); Vertex/Index Buffers 访问缓冲内存 为了访问一个顶点/索引缓存,我们需要得到一个指针。我们通过一个指针获得缓存数据必须使用Lock 方法。当我们访问完缓存后必须对它解锁。一旦有一个指向内存的指针,我们就能对它进行读写。 M Vertex/I

文档评论(0)

l215322 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档