分享
 
 
 

DirectX3D编程入门教程一D3D对象及设备

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

前言:

应几个网友的要求,利用工作之余,写了一篇DirectX 3D(简称D3D)编程入门教程。该教程适用于一些刚刚涉及D3D编程的朋友,读者必须有一定的C++ 和Win32的编程知识。对一些大虾级的高手,这只能使班门弄斧了,同时也非常欢迎爱好D3D编程的朋友和我联系和交流,并提出宝贵意见。

该教程基于DirectX 8.0 Graphics, 一部分内容由DirectX 8.0 SDK 英文文档翻译而来,一部分是自己工作经验的总结,作者对此享有著作权,读者可任意拷贝和传播,但不包含商业的用途,转贴请注明出处。

一, D3D对象 ( D3D Object)

主要讲述以下几方面的内容:

1.关于D3D对象

微软Direct3D时基于COM的对象和接口的,Direct3D编程的第一步必须建立这个对象。而且程序结束后, 你必须最后释放该对象。

2.建立D3D对象

在DirectX8.0中,你可以用如下代码建立一个D3D对象:

#include // 必须包含的头文件

#include

LPDIRECT3D8 g_lpD3D = NULL; // D3D对象指针,以后经常用到

if( NULL == (g_lpD3D=Direct3Dcreate8(D3D_SDK_VERSION) ) ) // D3D_SDK_VERSION确保该对象建立正确的头文件上,目前只能用该值。

return E_FAIL;

二, D3D设备 ( D3D Device )

主要讲述以下几方面的内容:

1.什么是D3D设备?

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

2.D3D设备的功能

在D3D编程中,一个D3D设备接口主要能完成以下的功能模块:

a. 转换功能(Transformation): 主要完成对3D 模型数据的转换,例如,世界转换( World transformation),视转换(View transformation),投影转换(Projection transformation)。

b. 灯光照明功能: 完成对场景的灯光渲染,例如,设置环境光,方向光等。

c. 光栅化显示功能: 根据设置的一些3D状态参数和当前屏幕显示模式以及剪切等情况,将3D图形在屏幕 上显示出来。

3.D3D设备的类型

在DirectX 8.0中,支持三种类型的D3D设备:硬件抽象层设备,参比设备,软件模拟设备,每一种设备可 以认为是一种独立的3D驱动程序,但也各有用途和优势,下面详细说明。

a. 硬件抽象层设备 ( HAL Device):D3D中最主要的设备类型,基于显卡的硬件功能,具有很快的3D硬件 加速功能,能执行硬件或软件的顶点数据处理。缺点是必须有3D显卡支持( 如果你没有足够的钱买好 的显卡的话,也只能望洋兴叹了),而且,并不是每种显卡都支持所有的3D功能,所以在使用该设备 时,必须经常查询显卡支持的功能,对不支持的用软件设备来模拟。

b. 软件模拟设备(Software Device): 顾名思义,是用软件的方法来模拟3D的一些功能。依赖于一些特 殊的CPU指令集( 比如,AMD 3D-Now, Intel MMX指令集), 软件模拟设备也能获得较高的3D性能。而 且软件模拟设备具有硬件抽象层设备一样的函数接口,使用方便。缺点是大量占用CPU资源,运行速度 较慢,只适合同硬件抽象层设备配合使用。

c. 参比设备(Reference Device):是微软Direct3D支持的一种附加设别类型,它也依赖于特殊的CPU指令 集,但同软件模拟设备相比,它更注重模拟的精确性,而不是速度方面。所以它一般应用于对3D硬件 的测试和硬件功能的演示上。

4.建立D3D设备

在DirectX 8.0中,建立一个D3D设备需要到用IDirect3D8 接口中的CreateDevice函数,该函数原型如下

HRESULT CreateDevice(

UINT Adapter,

D3DDEVTYPE DeviceType,

HWND hFocusWindow,

DWORD BehaviorFlags,

D3DPRESENT_PARAMETERS* pPresentationParameters,

IDirect3DDevice8** ppReturnedDeviceInterface

);

函数参数说明可以查询DirectX 8.0 SDK 的文档,不过是英文的,下面给出一段代码说明:

// 该段代码建立一个基于Window窗口程序的D3D硬件抽象层设备,采用软件的顶点数据处理,并使用16Bits 的深度缓冲区。

D3DDISPLAYMODE d3ddm;

HRESULT hr = 0;

hr = g_pD3D-GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm );

if( FAILED(hr) )

return E_FAIL;

D3DPRESENT_PARAMETERS d3dpp;

ZeroMemory( &d3dpp, sizeof(d3dpp) );

d3dpp.Windowed = TRUE; // 指明是窗口模式,而非全局独占模式

d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // 无需交换链

d3dpp.BackBufferFormat = d3ddm.Format; // 后备缓冲区颜色格式

d3dpp.EnableAutoDepthStencil = TRUE; // 使深度缓冲区有效

d3dpp.AutoDepthStencilFormat = D3DFMT_D16; // 深度缓冲区颜色格式

// Create the D3D Device

hr = g_pD3D-CreateDevice(

D3DADAPTER_DEFAULT, // 使用当前显卡作注设备

D3DDEVTYPE_HEL, // 设备类型

hWnd, // 该程序所在的窗口句柄

D3DCREATE_SOFTWARE_VERTEXPROCESSING, // 用软件的方法处理顶点数据

&d3dpp, // 指向上面的结构

&g_pd3dDevice ) ) ) // 指向3D设备的指针

if( FAILED(hr) )

{

return E_FAIL;

}

该节内容讲完了,如果看完后你觉得头晕眼花,不知所云的话,也是很正常的,因为有好多的3D图形概念我们还没有提及到,在以下的章节里,我回一一为大家介绍。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有