Direct3D基础——Direct3D概述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DY_1024/article/details/84074843

概述

Direct3D是一套底层图形API,借助该API我们可以利用硬件加速功能来实现3D场景的绘制,Direct3D可以视为应用程序和底层设备的交互。下图展示了Direct3D和硬件之间的交互关系:

图中Direct3D部分是一套已经定义好的,由Direct3D提供给应用程序和开发人员的接口函数,这些接口代表了当前Direct3D支持的所有功能。

注意:有些功能Direct3D支持,但是硬件设备却未必支持。

在上述的图中,Direct3D和硬件设备之间有一个环节:HAL(硬件抽象层),因为市面上的图形卡的种类太多了,Direct3D无法直接和硬件设备进行交互,例如:同样的一个清屏操作,不同的图形卡之间的操作可能大不一样。所以Direct3D就需要设备的制造商来实现一个HAL。

HAL是一个指示设备完成某些操作的设备相关的代码集,简单地说:HAL是代码集

基于HAL,Direct3D就可以不必关心底层硬件,其规范的指定便可以独立于硬件设备。

总结:设备制造商将自己硬件所支持的所支持的全部功能,都是实现到HAL里面。那些Direct3D支持但是设备不支持的功能就无法在HAL中实现。也就是说:调用一个没有在HAL中实现的Direct3D函数,就会调用失败(除非他是一种顶点处理运算,并且用户已经指定了软件顶点运算处理方式,这点暂时我也不太明白,有时间请教大神之后,再来补充吧)。

所以当你使用仅仅为少数的硬件实现的Direct3D功能的时候,务必要验证自己的硬件是否支持该功能。

REF设备

有时候Direct3D提供的而某些功能,本地的硬件不支持,但是还需要去使用这些功能,为了满足这些功能,Direct3D提供参考光栅设备,也就是REF设备,它能以软件的运行方式完全支持Direct3D API,借助REF设备您可以使用当前硬件不支持的功能,并对这些功能进行测试。

注意:REF设备仅仅应用于开发阶段,它与DirectX SDK绑定在一起,无法发布给最终的用户,此外,REF设备的速度十分的缓慢,在测试以外的场合十分不适用。

D3DDEVTYPE

在代码程序中,HAL设备用值D3DDEVTYPE_HAL来指定,该值是D3DDEVTYPR枚举类型的成员之一。类似的:REF设备用值D3DDEVTYPR_REF来指定,该值也是D3DDEVTYPE,枚举成员之一。

这些设备非常重要,因为我们在创建设备的时候,需要指定使用哪一种设备类型。

COM(组件对象模型)

COM(组件对象模型)是一项使得DirectX独立于编程语言并具备向下兼容特性的技术,我们常称COM对象为接口,可将其视为一个C++的类来使用。

关于COM组件,我们应该铭记以下:

1、我们仅仅需要知道的是:如何通过某个特定的函数或者COM接口的方法来获取指向一COM接口的指针。

2、创建COM接口时,不可以使用C++的关键字new。

3、使用完一个接口,应该调用接口相应的Release方法,而不是C++的关键字delete

4、所有的COM接口都继承自IUnknown,该接口提供了Release方法,使COM对象能够对其掌控的内存进行管理。

5、COM接口都有一个前缀“I”

下面是:DirectX9.03D库的下载地址:链接:https://pan.baidu.com/s/1028NylXtE6T3Y7MSVEs2GQ 密码:rp5x

猜你喜欢

转载自blog.csdn.net/DY_1024/article/details/84074843
今日推荐