第三章 初始化Direct3D.ppt

  1. 1、本文档共78页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 初始化Direct3D

第三章 初始化Direct3D 张红艳 主要内容 3.1 Direct3D概述 3.2 COM 3.3 一些准备工作 3.4 初始化Direct3D 3.5 初始化Direct3D实例 3.1 Direct3D概述 Direct3D 是一种底层图形API ,它能让我们利用3D 硬件加速来渲染3D 世界。我们可以把Direct3D 看作是应用程序和图形设备之间的中介。 例如通知图形设备清空屏幕,应用程序将调用Direct3D 的IDirect3DDevice9::Clear 方法。下图 显示了应用程序、Direct3D 和图形设备之间的关系。 3.1 Direct3D概述 图中Direct3D所表示的是Direct3D中已定义的,供程序员使用的Direct3D接口和函数的集合。 这些接口和函数代表了当前版本的Direct3D所支持的全部特性。注意:仅仅因为Direct3D支持某种特性,并不意味着你所使用的图形硬件(显卡)也能支持它。 3.1 Direct3D概述 在Direct3D 和图形设备之间有一层中介——硬件抽象层(HAL,Hardware Abstraction Layer)。Direct3D 不能直接作用于图形设备,因为现在市面上的显卡种类实在是太多了,并且每种显卡都有不同的性能和处理事件的方式。因此,Direct3D 要求设备制造商实现HAL。 HAL 是一组指示设备执行某种操作的特殊设备代码的集合。用这种方法,Direct3D 避免了必须去了解某个设备的特殊细节,使它能够独立于硬件设备。 3.1 Direct3D概述 设备制造商在HAL中实现他们的产品所支持的所有特性。HAL将不会实现那些Direct3D支持但硬件产品不支持的特性。 调用一个HAL中没有实现的Direct3D的函数将会出错,除非它是顶点处理操作,因为这个功能可以由软件模拟来实现。因此当使用某些仅由市面上少数显卡所支持的高级特性时,必须检测一下设备是否支持。 3.1.1 REF设备 此外,Direct3D还提供了REF设备(参考光栅化器,reference rasterizer),它用软件模拟了所有的Direct3D API。允许程序员写并测试那些所用显卡不支持的Direct3D特性的代码。 例如某些人的显卡可能会不支持顶点和像素着色器。但仍然能够使用REF设备测试示例代码。 REF设备只会和DirectX SDK一起被装载,而不会发布给最终用户。另外,REF设备实在是太慢了,除了测试以外它没有任何利用价值。 3.1.2 D3DDEVTYPE 在代码中,用D3DDEVTYPE_HAL来定义HAL设备,它是D3DDEVTYPE枚举类型的一个成员。 同样的,REF设备则由D3DDEVTYPE_REF来定义,它也属于D3DDEVTYPE枚举类型。 typedef enum D3DDEVTYPE { D3DDEVTYPE_HAL = 1, D3DDEVTYPE_NULLREF = 4, D3DDEVTYPE_REF = 2, D3DDEVTYPE_SW = 3, D3DDEVTYPE_FORCE_DWORD = 0xffffffff }D3DDEVTYPE, *LPD3DDEVTYPE; 3.2 COM 组件对象模型(COM, Component Object Model)是一种能使DirectX独立于编程语言和具有向下兼容性的技术。通常把COM对象作为一个接口,可以把它当作达到某种目的的C++类来使用它。 当使用C++写DirectX程序的时候,COM的大部分细节对我们来说是透明。我们只需要明白:DirectX是基于COM规范的,它已经将组件封装好了,我们只需要通过接口来使用它,而不需要知道它实现的细节。 COM接口都有一个前缀I,IDirct3DSurface9表示表面的COM接口。 3.3 一些准备工作 3.3.1 表面 表面是一个像素点阵,在Direct3D中主要用来存储2D图形数据。下图指明了表面的一些成分。 由图可以看出表面数据就像一个矩阵,像素数据实际上存储在线性数组里面。 表面的Width和Height是按像素计算的。Pitch以字节为单位。而且Pitch有可能比Width大且依赖于底层硬件,所以不能单纯的认为Pitch = Width * sizeof (pixelFormat)。 3.3.1 表面 在代码中,可以使用IDirect3DSurface9接口来描述表面。这个接口提供若干方法来直接读写表面数据并且还有一个方法用来返回表面信息。IDirect3DSurface9中最重要的方法是: LockRect——获得一个指向表面内存

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档