3D游戏编程入门(九)DirectX简介

3D游戏编程入门(九)DirectX简介

(2007-01-01 18:54:15)
  
  恩,继续直接正题了。
 
    DirectX简介
  我们首先可以想到,在我们玩3D游戏时,通常会对我们的显卡进行一些要求,而实际上,现在没有一款3D游戏要求我们使用某一种型号某一个厂家生产的显卡,而不同计算机的硬件是有一定区别的,为什么我们的一套程序能够适用于多款类型的显卡呢?这是因为我们采用了一个通用的开发工具,它作为一种桥梁般的沟通了我们游戏的应用程序和显卡,避免了我们对显卡硬件的直接访问,而这种工具当前流行的主要有两种:OpenGL和Direct3D。
    OpenGL(Open GraphicsLibrary)开放图形库出现的比D3D更早,它使老一辈的程序员很容易的在PC机上用C语言去开发复杂的三维图形,在VC中,微软也为我们提供绑定的一些OpenGL函数库,如GLU32.lib实用库,GLAUX.lib辅助库,OpenGL32.libGL库,他们也而已使我们方便快速的生成漂亮图形。
    OpenGL程序拥有着一套渲染流水线,先将几何顶点数据和图象象素数据导入相应的存储空间,再通过运算器进行逐个顶点的变换操作(设置视点等矩阵)和图元组装,同时进行着纹理映射工作,之后将其光栅化,再次逐个顶点操作,将其放置入桢缓冲区进行显示。而我们在DX中也是进行相同的操作。
    说了半天OpenGl,我们接下来更详细的说下DX。
    DirectX是微软公司开发的,运行于计算机平台下的,多媒体控制处理引擎。它的API均是运行在HAL硬件抽象层之上,能够更充分的利用系统硬件加速功能,而同时它又隐藏了硬件相关的设备特性,所以我认为它具有更高的效率和更方便的开发。
    我们应该清楚,Direct8.0之前,D3D和DirectDraw是分离开来的,DirectDraw你可以更简单的理解为主要为2D图象操作而设计的,而现在它和Direct3D被集成到一个Graphics的接口中了,所以,在你学习D3D的过程中,完全可以根据自己兴趣去自学一下2D游戏的制作,它会比3D游戏简单的多,而且很大程度下,使用D3D制作2D游戏会比MFC简单的多。
    学习DirectX,你必须了解它的一个很大特性,那就是COM和HAL。这两个技术为D3D提供了一个通用接口和向后兼容的能力,还使我们的D3D程序在不同硬件之上能够发挥着最快的速度。
    COM是组件对象模型ComponmentObjectModel的缩写,它是一种实现软件模块之间的二进制连接的协议。当这种协议连接成立后,两个程序的模块就通过“接口”来实现通信功能,所以我很喜欢将它理解成一个桥梁。恩,我们长用的ActiveX也是一种COM组件的代表。
    COM控件实现细节相当复杂,我没有能力在这里讲述,有兴趣的朋友可以自行查找书籍,作为D3D游戏制作人员,个人认为只要了解其接口的用法就差不多了。这里可以简单为大家说一下HAL和COM技术提供给我们的优势。
    1:由于COM控件的要求,每一代DX版本更新时,都会延续以往的API,接口永不改变。(呃,那个邪恶的基类函数名似乎叫IKnowNo?)
    2:当我们的硬件显卡不支持某种D3D特性时,我们会有一种相对低效率的机制来保证程序的运行,意思即任何效果无论你显卡是否支持,均可实现该效果的模拟。(因为某志个人电脑教差,这点可是帮了某志大忙了TT)
    3:DX版本更新时,原API保存,即使你的DX版本是9.0C了,依旧是可以支持8,0下开发的游戏,原因就在此。
    4:COM控件其中完全没有类成员变量,而且几乎全是虚类。这就使得应用程序无法直接访问COM对象,仅可以使用其接口指针来实现相应功能,这有比较好的安全性。
    5:COM是独立于语言的。
    当然,按照第2条来说,那么我们岂非没必要要显卡了?反正HAL机制可以帮助我们去模拟任何特性。需要说明的是HAL(HardwareAbstractionLayer)硬件抽象层的运作是有条件的,它会优先判断你机器上的显卡能力,当你程序的部分特性不受硬件支持时,它将进行关闭或者以一种很低效的方法来实现模拟,这种模拟不仅会导致图象质量的降低,还超级影响你的电脑运行速率,和显卡硬件实现功能速率是完全无法相比的。所以,尽可能的,我们还是以显卡来进行图象的处理,只有无法处理的时候再考虑HAL模拟吧。
    关于整个DX功能的说明,我再整体的说明一下
  Win32程序----》D3DAPI----》HAL设备-----》显卡驱动程序接口----》显卡硬件
  呃,忘记说明一点了,DirectX我爱称呼为DX,Direct3D我爱称呼为D3D,这两者不是等价的。
  D3D仅仅是DX开发库中一部分组件而已。我在下面说明一下DX开发组件包含哪些部分及其大致功能。
  首先最重要的DXGraphics--包括D3D和DirectDraw。这些组件用于进行图象的渲染。
    DXAudio--包括DirectMusic和DirectSound,前者是负责部分音频的解码工作,后者是对基本音频文件进行播放。
    DirectPlay--现在这个基本被微软放弃了,原本是实现游戏之间的网络通讯的功能,后来发现它远远没有专门的软件程序有效,终于停止更新。
    DirectInput--用于管理鼠标键盘等输入输出设备
    DirectShow--用于在游戏中多媒体文件的解码播放,后来微软也不再更新,放弃了。
    而我准备复习并讲述的则是DXGraphics控件的D3D部分。
    我们已经知道DX是基于COM来开发实现的,那么我们该如何使用它呢?其实很简单,我们需要做的工作仅仅就三步:
    1:调用适当的函数来获取相应接口的指针
    2:调用这个接口的成员函数来完成所需要做的功能
    3:使用完毕接口后,调用Release方法来释放相应指针
    当然,我们接下来需要做的就是去了解其中接口的功能,来实现我们的程序。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值