一、Direct3D概述
DirectX是微软公司开发的一套功能丰富的底层API,其功能涵盖了:
2D/3D图形加速的支持、
各种输入设备的控制、
声音和音乐输出的混音和采样、
多玩家网络游戏的控制、
各种多媒体流媒体模式的控制等。
DirectX在体系结构上很突出的优点是它使用了两层驱动——HAL和REF,那些为硬件所支持的特定功能可由HAL来控制(即可以充分地发挥硬件的加速功能),从而可以获得理想的运行速度。而对于那些不为硬件所支持的功能,借助REF,程序能够以软件方式来模拟相应的运算或处理过程,从而使得无论硬件配置是否高端,开发人员都可以完整地体验和测试DirectX所提供的全部功能。
Direct3D是DirectX的三维部分,它是一套底层图形API,借助该API,我们能够利用硬件加速功能来绘制3D场景。Direct3D可以被视作应用程序与图形设备(3D硬件)交互的中介。它们之间的关系如下:
在Direct3D和图形设备之间有一个中间环节——HAL(Hardware Abstraction Layer,硬件抽象层)。由于市面上的图形卡品种繁多,每种卡的性能和实现同样功能的机理都有差异,所以Direct3D无法与图形设备直接交互。所以,Direct3D就需要设备制造商实现一个HAL。HAL是一个指示设备完成某些操作的设备相关的代码集。
有时,Direct3D提供的某些功能不为所使用的图形设备支持,但是仍然希望使用这些功能。为了满足这种需求,Direct3D提供了参考光栅设备(reference rasterizer device),即REF设备,它能以软件运算方式完全支持Direct3D API。
在Direct3D中,D3DDEVTYPE具有三种类型:
D3DDEVTYPE_HAL
D3DDEVTYPE_REF
D3DDEVTYPE_SW。
其中,D3DDEVTYPE_SW是一种外挂的Direct3D设备,用以支持第三方的软件。
二、COM
COM(Component Object Model,组件对象模型)是一项能够使DirectX独立于编程语言并具有向下兼容的技术。我们常称COM对象为接口,可将其视作为一个C++类来使用。我们所必需知道的仅仅是:
如何通过某个特定函数或另一个COM接口的方法来获取指向某一COM接口的指针
创建COM接口时不可以使用C++的关键字new
使用完一个接口,应该调用该接口相应的Release方法释放资源
注意:COM接口都有一个前缀I。例如IDirect3D9。
三、Direct3D初始化
Direct3D的初始化过程可以分解为如下四个步骤: