DirectX 9.0笔记]第一章 初始化 Direct3D

1.Direct3D概述

   

Direct3D的工作框架图如下图所示。

应用程序通过调用Direct3D的API来绘图,Direct3D不直接作用于图形设备,而是通过硬件抽象层(HAL,Hardware Abstraction Layer)操作图形设备。这样的好处是:Direct3D不需要了解图形设备的细节,只要图形设备支持HAL,Direct3D就可以操作该 图形设备。

bool supportsHardwareVertexProcessing;
// 如果为真,意味着硬件设备支持它
if ( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )

{

// 支持
        supportsHardwareVertexProcessing = true;

}
else
{
// 不支持
        hardwareSupportsVertexProcessing = false ;
}

 

HAL设备的定义

在代码中,HAL设备用D3DDEVTYPE_HAL来定义。

 

设备能力

Direct3D支持的每一项特性都对应于D3DCAPS9结构的一个数据成员。我们能够通过监测D3DCAPS9结构中相对应的某一成员来监测设备是否支持这一特性。下面将举例说明,假设我们想要检测显卡是否支持硬件顶点处理(换句话说,就是显卡是否支持硬件几何转换和光源计算)。通过查阅SDK中的D3DCAPS9结构,可以得知数据成员D3DCAPS9::DevCaps中的D3DDEVCAPS _HWTRANSFORMANDLIGHT 位表示硬件是否支持硬件顶点处理即硬件几何变换和光源计算。

// 填充主显示设备的能力(D3DCAPS9结构)
D3DCAPS9 caps;
d3d9->GetDeviceCaps(
D3DADAPTER_DEFAULT, // 主显示设备
deviceType, // 设备类型,一般是D3DDEVTYPE_HAL.
&caps); // 返回填充后的D3DCAPS9 结构,包含主显示设备的能力

// 是否可以使用硬件顶点处理?
int vp = 0;
if ( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )
{
    // 是,支持硬件顶点处理
    vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
}
else
{
    // 不,只能用软件顶点处理
    vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
}

 

2.初始化Direct3D(重点!)

步骤:

1.获得一个IDirect3D9接口指针。 这个接口用于获得物理设备的信息和创建一个IDirect3DDevice接口,它是一个代表显示3d图形的物理设备的C++对象。

2.检查设备能力(D3DCAPS9), 搞清楚主显卡是否支持硬件顶点处理。假如它能支持, 我们就能创建IDirect3DDevice9接口。

3.初始化一个D3DPRESENT_PARAMETERS结构实例,这个结构包含了许多数据成员允许我们制定将要创建的IDirect3DDevice9接口的特性。

4.创建一个基于已经初始化好的D3DPRENSENT_PARAMENTS结构的IDirect3DDevice9对象。它是一个代表我们显示3d图形的物理设备的C++对象。

 

具体说明如下:(重点!)

1.获得IDirect3D9接口

IDirect3D9* _d3d9;

_d3d9 = Direct3DCreate9(D3D_SDK_VERSION);

Direct3DCreate9 的唯一一个参数总是D3D_SDK_VERSION,这可以保证应用程序通过正确的头文件被生成。如果函数调用失败,那么它将返回一个空指针。(Direct3DCreate9(D3D_SDK_VERSION);为系统dir3d的函数和参数)。

 

2.监测硬件顶点处理能力

当我们创建一个IDirect3DDevice9对象来表示主显示设备时,必须要设定其顶点处理的类型。如果可以的话,当然要选用硬件顶点处理,但是由于并非所有显卡都支持硬件顶点处理,因此我们必须首先检查显卡是否支持。

首先我们要根据主显示设备的技术特性来初始化D3DCAPS9实例。可以使用如下方法(源码结构如下):

HRESULT IDirect3D9::GetDeviceCaps(

UINT Adapter,

D3DDEVTYPE DeviceType,

D3DCAPS9 *pCaps

);

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

 DeviceType — — 指定设备类型( 硬件设备( D3DDEVTY

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值