DirectX的安装与D3D的初始化

下载安装

首先登陆MicrosoftDownloadCenter下载最新版本的DirectXSDK

http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba

按步骤安装

安装完成后会发现VS2008里面已经设置好相关开发库的目录。

开发D3D程序的一般步骤

D3D对象

在编写D3D程序时,D3D对象是必须首先创建的对象。通过这个对象,可以去枚举、获取显示设备所支持的功能。而且这个D3D对象必须最后释放。

通常情况下,我们需要定义一个指针指向所创建的D3D对象:

D3D设备

一个D3D设备接口可以简单的认为是本机一块显卡的抽象,它包含了显卡所有的硬件参数及状态值,比如说,显卡显存的数量和起始的线性地址,是否支持深度缓冲(DepthBuffer),雾化(Fog),纹理(Texture)MipMap等。

通常情况下,也需要定义一个指针指向所创建的3D设备。如:

在初始化3D环境之前,需要定义指向3D对象的指针和指向3D设备的指针

初始化D3D

在创建应用程序窗口后,我们就准备渲染3D场景。在渲染之前,我们必须创建D3D对象和3D设备,因此,可以定义一个Init3D函数,在这个函数里,我们要做的工作:

1.创建3D对象

2.设置present参数

3.创建3D设备

创建3D对象

一个良好的程序编制风格包含了这么一条:任何时候都应该检查函数的返回值,根据函数的返回值决定程序是否应该继续执行下去。

返回诸如:E_FAIL这样的值,而不是返回一个具体的数值,目的是为了和Direct3D系统的返回值统一。便于在Direct3D程序中都可以用SUCCEEDEDFAILED来检查函数调用是成功还是失败。

设置Present参数

在创建3D设备时,创建函数需要知道显示表面的相关参数和信息,所以在创建设备之前,必须设置Present参数。实际上Present参数包含了很多内容,所以在Direct3D中是用一个Present结构来表示的。

常见参数说明:

BackBufferWidthBackBufferHeight:缓冲区的宽度和高度,如果使用窗口模式,这个值可以随意;如果是全屏模式,则这个值只能是显卡指定的值。

BackBufferCount:缓冲区的个数,可以是0123

Windowed:值为TRUE,表示窗口模式,值为FALSE,表示全屏模式

D3DSWAPEFFECT:交换效果

D3DSWAPEFFECT_DISCARDD3DSWAPEFFECT_FLIP

D3DSWAPEFFECT_COPYD3DSWAPEFFECT_COPY_VSYNC

BackBufferFormat:缓冲区的点格式,通常把它设置的和当前桌面的点格式一致。所以则需要用到另一个函数GetAdapterDisplayMode

得到当前显示模式

函数原型:

其中参数pMode指向一个D3DDISPLAYMODE结构体

D3DFORMAT是一个枚举类型,定义了可能的点的格式。

创建Direct3D设备

创建D3D设备需要用到函数CreateDevice,其原型是:

参数说明:

Adapter:表示创建的3D设备使用哪块显卡,通常这个值指定为D3DADAPTER_DEFAULT,表示使用主显示卡

DeviceType:表示创建什么类型的的设备,其中D3DDEVTYPE是一个枚举类型,定义如下:

通常情况下,这个参数应该指定为:

D3DDEVTYPE_HAL

hFocusWindow:指示3D设备将场景渲染后,显示的窗口。

BehaviorFlags:这个参数可以取 D3DCREATE_HARDWARE_VERTEXPROCESSING

D3DCREATE_SOFTWARE_VERTEXPROCESSING

设置3D设备顶点处理的类型的时候,如果可以的话,当然要选用硬件顶点处理,但是由于并非所有显卡都支持硬件顶点处理,因此我们必须首先检查显卡是否支持。我们可以可以使用如下方法来检查显卡的能力。

Adapter——指定要获得哪个显示适配器的特性

DeviceType——指定设备类型(硬件设备(D3DDEVTYPE_HAL),软件设备(D3DDEVTYPE_REF))

PCaps——返回一个已初始化的D3DCAPS9结构

然后我们可以用下面的代码段来检查显卡的能力

*pPresentationParameters:指向 D3DPRESENT_PARAMETERS结构的指针

ppReturnedDeviceInterface:创建的3D设备的指针

因此创建3D设备的代码段如下:

渲染

Clear函数:清除颜色、深度缓存、模板缓存

参数说明:

Count 要清除的矩形的个数

*pRect: 指向一个矩形数组的首地址,如果该值为NULL,则将整个视口清除

Flags::指定清除那个表面

D3DCLEAR_STENCIL,用Stencil这个参数的值来清除模板缓存。

D3DCLEAR_TARGET,用指定的颜色清除目标表面。

D3DCLEAR_ZBUFFER,用指定的Z值清除深度缓存。

Color:指定颜色。

Z:指定深度(0.01.0)

Stencil:指定模板缓存的值

resent函数:展现场景

函数原型:

参数说明:

*pSourceRect:要展现的源矩形表面,一般为NUILL,表示展现整个源表面

*pDestRect:要展现的目标矩形表面,一般可以设为NULL,表示展现到整个窗口或全屏幕式下的这个屏幕

hDestWindowOverride:要展现的目的窗口的句柄,一般为NULL,表示展现到创建Direct3D设备指定的目标窗口

*pDirtyRegion:”脏区域”,一般设为NULL

善后

消息循环结束时,因该释放已创建的3D对象和3D设备

在善后时,可以象函数Cleanup那样释放对象,但更经常地做法是使用宏,在文件开头或者在头文件里定义宏:

那么Cleanup函数可以改写为:

D3D初始化具体步骤:

创建一个新Win32项目,命名为D3DApp

DirectX的安装与D3D的初始化_第1张图片

选择Windows应用程序的空项目。

DirectX的安装与D3D的初始化_第2张图片

添加必要的依赖项,添加需要的静态链接库。

添加一个*.cpp文件。

下面是初始化D3D的完整代码:

源码下载地址:http://download.csdn.net/source/2899387

<!--EndFragment-->

你可能感兴趣的:(初始化)