游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1273|回复: 0

[转载]DirectX:游戏与硬件的姻缘线

[复制链接]

64

主题

701

帖子

878

积分

高级会员

法师

Rank: 4

积分
878
QQ
发表于 2004-9-2 03:58:00 | 显示全部楼层 |阅读模式
个人PC用户有40%以上会常玩游戏,那么请让Windows成为游戏运行的平台
    总有Linux的用户会埋怨Xwindow比微软的Windows落后10年,事实上Xwindow的界面相当漂亮,而且Xwindow上运用的技术相当多都是极为先进的技术,但当这些技术都是围绕着系统的稳定性、安全性和管理上易用性为核心的时候,它距离普通用户的距离也就越来越远,不为别的,因为它距离游戏也越发遥远。Windows驾驭游戏和硬件厂商的利器正是DirectX,事实上谁最先整合完硬件的信息,完成接口,以及将这套流程变成规范,它就会是个人电脑操作系统之王。当然,这个现在人尽皆知的道理在微软刚开始推出即插即用PnP(Plug & Play)规范的时候还没有太多人意识到,通过与硬件厂商的良好协同,一个集大量硬件设备驱动程序的Windows出现。

DOS平台,游戏程序设计师的脑细胞杀手
    这个时候在DOS环境下开发游戏的程序员普遍碰到一个让人疲惫的状况——设备越来越多,各种统一规范的制订并不尽人意。最开始的标准VGA模式被显卡厂商普遍支持,标准的VGA模式在游戏中只能用到640×480×16色和320×240×256色这两种。而对于扩展的VGA模式而言,每个厂商都有互不兼容的解决方案,这样的状况简直是对程序员脑细胞的谋杀,看图软件的老鼻祖QPV(老版本称QPEG)的作者Oliver Frome(亦是HD-Copy作者)在其最后发布的几个QPV包中带了30多种显卡的驱动程序和汇编源码,虽然被程序员们广为称道。但这样的侠义之举毕竟和商业化的大规模开发有相当大的冲突,代码的重复使用率越低,软件研发成本就越高。DOS下最终解决扩展VGA的方式是VESA,要想良好的使用它,需要加挂UniVBE驱动程序。

    声卡的驱动部分同样恐怖无比,当我国沿海城市刚开辟OEM声卡生产能力的时候,玩家们首先发现一个问题,DOS下的声卡驱动程序和游戏的兼容性普遍存在问题,不能发声是小,更为恐怖的是死机。这其中一部分是设置的问题,更大情况就是程序员兼顾不到这么多声卡的种类,就算他们有心去设计这些驱动程序,也不可能拿到各方面的技术资料。DOS下最终解决声卡的方法是兼容的增强形声霸卡模式(Sound Blaster Pro Compatibility),当然玩家也需要加挂相应的驱动程序,同时会丧失大部分声卡自有的特色。

    除此以外还有小到鼠标,大到640KB内存分配的问题。骨灰级的玩家现在都可以在软盘上找到一堆Qmouse.com(据说占用内存最少的鼠标驱动程序)、Gmouse.com(据说是玩游戏最好的鼠标驱动程序)、Mouse.com(微软DOS自带的鼠标驱动程序,占用内存高达17K,而兼容性非常的好)。另一个就是DOS4/GW下的编程,可以让程序员利用到1024K以上的内存。
总结一下,若是要想在DOS下把游戏玩好,玩家至少需要具备这些程序:
驻留在内存中的有微软的:
Himem.sys:内存驱动,可以管理扩展内存(XMS)
Emm386.exe:内存驱动,把扩展内存仿真成扩充内存(EMS)
Smartdrv.exe内存缓冲,将内存的一部分模拟成磁盘缓冲以加快文件的存取
也许还有一个光驱的驱动程序Cdrom.sys和声卡驱动程序,还有需要在游戏进行时加载的UniVBE驱动、声卡驱动、以及鼠标驱动、DOS4/GW管理等等。

    我们暂且认为这些程序都是稳定可靠的,但这么多不同的机构开发出来的驱动程序一起在系统中相互影响的时候,也许就不会这么稳定。在DOS下设计游戏程序是一种痛苦,配置好机器玩游戏,同样也是一种痛苦。

DirectX,把它翻译成游戏程序开发接口也许更合适
    DirectX有两个绝佳的技术彻底改变了上面这种被动的局面,它们分别是:
1、硬件提取(HAL:Hardware Abstraction Layer)功能
    这个功能将硬件系统的所有设备按照设备驱动程序数据库中的内容进行功能描述,那么程序员接触的所有信息都只是设备支持的功能,而并非是设备本身。DirectX技术直接对HAL的操作,实现视频、声音的输出、网络通信及对游戏杆的控制。微软在Win95上市同时就开始发布的GameSDK就是让程序员们直接设计游戏,而把底层的硬件驱动部分全部交给DirectX控制。这样就极大的解放了程序员们消耗在驱动程序设计上的时间,虽然最开始几个版本的DirectX毫无效率可言,但这种方式受到的软件开发商极大的重视,随着不断的改善,特别是在5.0版本以后,DirectX基本成为标准的游戏程序开发接口。这个功能带来的程序设计硬件无关性对其它Windows下的程序也有效,更重要的是,它还可以利用硬件模拟出他们本身不具备的功能。

2、硬件模拟(HEL:Hardware Emulation Layer)功能
    这个功能看起来有些吓人,显然DirectX不能把你的显卡模拟成声卡,但是它可以有限的将你的2D显卡模拟成具备3D硬件加速功能的显卡。虽然效果不尽人意,但总比在游戏还未开始时就被程序告知系统不支持而被拒之门外好。

    事实上笔者认为这个功能只是个噱头,让硬件厂商看到如果能得到DirectX的广泛支持,其效果将比一个威力强大的驱动成为更有威力。这使得DirectX的设计者得以从高性能程序的开发者和独立的硬件供应商(independent hardware vendors IHVs)那里得到反馈。所以,在DirectX 程序员参考书中常常可能会提供那些还不存在的硬件加速设备的技术细节。在很多时候,硬件模拟功能可以模拟这些特性,在另外一些情况下,软件根据硬件的指标判断出其特性,并且可以忽略那些硬件并不支持的性能。

Direct3D,绚丽效果的添加剂
    DirectX在8.0版本后,就不再有Direct3D和DirectDraw的分别,这两个以往分别在3D图形处理和2D图形处理各司其职的部分被整合到一起,更名为Direct Graphics。这个改变其实并不明显,主要的作用是缓解内存中数据相互交换的时间,所以我们仍然可以把这个单元视为两个部分。

    在Windows 3.0时代,绝大部分的游戏仍然是2D的界面,如何把2D的游戏搬到Windows环境是当时最迫切需要解决的问题,其中出现了一个过渡性的产品是WinG,这个在当时很火了一把的接口程序让不少第一批在Windows环境尝试游戏设计的程序员接触到。但是这个本质上仍然不能和硬件直接打交道的程序并没有太久的存在。真正克服了WinG和GDI这个图形处理中心处理模式的还是DirectX 1.0的问世,它改变了以往必须通过GDI缓慢的图形处理方式,使程序开发人同硬件之间建立更直接的联系,当然访问硬件还是需要通过DirectX的规范,为了不编写硬件驱动程序而做出一些效率上的牺牲无论如何都值得。

    事实上DirectDraw的部分相对其3D部分简单,所以在日后的日子里DirectDraw都被广泛和良好的支持着,这使得各种2D游戏设计者可以轻松的在Windows平台设计游戏。以至于一些可以在3D方式运行的热门游戏都含蓄的保留了DirectDraw加速的游戏模式,使得配置很低的玩家可以领略游戏的风采。当3D的潮流到来后,设计者们发现微软已经主动的展开了怀抱,并不似当初支持2D时缓慢的步伐,早在DirectX 2.0就已经初步开始建立的Direct3D在5.0、6.0两个版本得到突飞猛进的发展。至今,Direct3D虽然仍不能被称作最优秀的3D接口程序,但它已经满足绝大部分玩家的需要。而对于那些追求极致的玩家,唯有OpenGL的接口能让它们心满意足。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-17 18:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表