(转)OpenGL与DirectX 比较

Linux易用性差的一个重要表现是对游戏的支持性差。当然,linux也有为数众多的游戏,如纸牌,企鹅滑雪,泡泡龙,这些小游戏的可玩性绝对的windows的纸牌,扫雷之类高。
不过,我们所说的游戏是指《魔兽争霸》,《盟军敢死队》这样的大型游戏。Linux环境下缺乏这样的大型游戏,一方面是因为linux的市场占有率低,开 发商认为投入linux下的游戏成本高,难以收回;另一方面,linux不支持对于游戏来说非常重要的驱动——DirectX。
游戏驱动一般来说有两种——OpenGL和DirectX。OpenGL驱动不仅在游戏方面很重要,还在图形处理方面有举足轻重的作用。所以大家在装显卡 驱动后都可以看到OpenGL的设置选项。几乎所有的操作系统(windows,linux,MacOS)都支持OpenGL。DirectX是微软专门 为游戏设计的一套驱动(程序接口),在windows3.x的代就已有了,到现在已发布了Direct9.0。在这期间,各种游戏也呈现出爆炸性增长的势 头,不能说与DirectX没有一点关系。

剖析OpenGL 2.0

如果说在3D API方面,OpenGL一直领先于微软的Direct3D,你同意吗?或许你在一定程度上会赞同这一说法,因为 以前许多用OpenGL做出来的游戏(比如大名鼎鼎的QuakeⅢ)画面比Direct3D游戏精美,细节也更丰富;或许你又会说最近的Direct3D 成熟了许多,已能做到相当出色的程度,不过这是最近DirectX 8.0/9.0出现后的事情了,等到新的OpenGL 2.0出现时,情况也许又会有所不同了。

OpenGL 1.X回顾

自从1991年初以来,OpenGL API就一直是专业3D制图技术中的重要组成部分,从专业的电影特效制作到游戏,在很多领域中OpenGL都大显身手,当时用的就是OpenGL 1.X标准。OpenGL是个既开放又严格的标准,它源于著名的SGI公司为其图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGL(Open即开放的意思)。

在计算机3D领域,OpenGL之所以能很快抛开其他竞争对手,流行开来,很大程度上是由于从一开始OpenGL就被设计成独立于硬件和操作系统的3D API。所以OpenGL本身并不拘泥于操作系统的种类,可运行在采用不同操作系统的各种计算机上,并能在网络环境下以客户/服务器模式工作,于是自然而然地OpenGL就成了专业图形处理、科学计算等高端应用领域的标准图形API。

说到OpenGL,不得不提一下管理这个API系统的ARB组织。OpenGL本是SGI开发出来的,但后来却由成立于1992年的独立财团OpenGL ARB(Architecture Review Board) 控制,ARB成员以投票方式产生标准,并制成规范文档公布,各软硬件厂商据此开发自己系统上的应用,只有通过了ARB规范的全部测试才能称为符合 OpenGL标准。由于良好的运作机制,ARB在此后积极发展OpenGL标准,他们在1995年12月批准了1.1版本;1999年5月通过1.2.1 版;目前的最新版本是2001年8月发布的1.3版。

从1.X到2.0

虽然OpenGL并非专为游戏而生,但多数人了解OpenGL却是通过游戏。在2.0版本出现以前,OpenGL在进军桌面游戏市场时遇到了相当多的麻烦,最初的阻力来自Glide。在20世纪90年代中后期,3dfx公司用在Voodoo上的Glide 3D API凭借良好的效果和执行效率,几乎把OpenGL和Direct3D都挡在了家用游戏市场的门外。后来,从DirectX 5.0 开始崛起的Direct3D,让OpenGL很是尴尬了一阵子,因为D3D中的立方体映射、硬件T&L、可编程像素等效果所构造的3D世界,一点 也不比OpenGL差。基本上,OpenGL在Windows这个主流桌面操作系统中只有QuakeⅢ、CS等几个游戏拿得出手。

当然,在OpenGL和Direct3D的发展过程中,SGI和微软这两家分别代表OpenGL和Direct3D鼻祖的厂商,曾一度试图将 OpenGL并入DirectX中,建立一个可运行于Windows之内和之外的通用API,这将让绘图的开发提升至一个共同的架构上,这就是当时“令人 神往”的“Fahrenheit”计划。但事实证明,“Fahrenheit”计划执行起来实在太困难了,微软和SGI都期望自己的API能在计划中占据 主流,两者间的矛盾始终不能调和,计划最终不了了之。之后,微软倾其所有资源,全力投入DirectX的开发,这才有了现在DirectX的辉煌局面。

自然的,与此同时ARB也未曾放松OpenGL的开发,不过前景并不乐观。最令人失望的是,这几年唯一的进展仅是如ClearCoat、Multisample等OpenGL扩展指令的推出,而并没有实质性进展,所以OpenGL 2.0的推出迫在眉睫。

OpenGL 2.0草案

OpenGL 2.0标准的主要制订者并非原来的SGI,而是逐渐在ARB中占据主动地位的3Dlabs。3Dlabs认为OpenGL面临的主要问题是:

1.系统和图像构架自1992年来有了重大改变,以Glide和DirectX为主的游戏3D API开始成为家用市场的主流(或者是曾经的主流),但很显然OpenGL没有跟上节奏,至始至终都未能在家用游戏市场获得足够影响力。

2.现在的显卡功能和性能已越来越先进,但OpenGL的函数却无法发挥这些优秀硬件的性能,所以说目前的OpenGL 1.X已落后于今天先进硬件的功能和性能。

3.其实OpenGL下也有好游戏,比如QuakeⅢ,但它实现和应用的复杂性却远远胜过其他3D API,所以易用性是OpenGL当前的一个大问题。

在3Dlabs的构想中,OpenGL 2.0版本的目标是:

1.将OpenGL提升到一个新的高度,像D3D那样由核心提供全部硬件功能,以配合目前的和将来的显示硬件。

2.展示下一代可编程图像硬件的图景,使用高级语言而不是汇编对显卡编程。

3.由定义良好的核心功能取代大部分扩展功能,以可编程性取代复杂性。

4.对已有程序保持相当理想的兼容性,以使老程序不经修改便能正常运行,并保持高效。

5.对不需要兼容性的场合,提供简洁干净的核心,剔除过时的函数。

6.提高动态材质等动态媒体的功能和效率,以满足对动态媒体处理的需要。

ARB接受了3Dlabs的提议,进行OpenGL 2.0架构的开发,他们也描绘出一个清楚的发展路线。OpenGL的主要且近期的目标,就在于启动并开发硬件的可编程能力,这一点恐怕是OpenGL在游戏市场对抗微软D3D的主要武器。当然,不可否认的是,OpenGL在其他地方也需要进行更新。

OpenGL 2.0剖析

仅仅有一个构想是不行的,OpenGL需要实实在在地摆在人们面前,才能获得足够的支持。于是借助这个构想,经过不断的改善,现在OpenGL 2.0已有了一个相当清晰的模型。

成形后的OpenGL 2.0最重要的更新是加入了可编程能力。为使其符合大部分应用程序与用户的标准,它将像以前的OpenGL 1.X一样提供一个丰富的功能集,独立于硬件并专门在OpenGL架构下使用。

兼容性

新的OpenGL 2.0标准首先要做的是与OpenGL 1.3之间的兼容性,而且应该是完整的兼容性。为了达到这一步,3Dlabs 设计的OpenGL 2.0将由OpenGL 1.3的现有功能加上与之完全兼容的新功能所组成,这样不但可保持兼容性,还能对在ARB停滞不前的时代,各家推出的各种纠缠不清的扩展指令集进行一次彻底精简。

OpenGL之所以曾经在一段时间止步不前,就是因为有了太多混乱的扩展指令集,其中许多都是为专用应用程序而设计,虽然OpenGL是个开放的世 界,但这些自家开发的指令中却包含了自己的知识产权,自然有可能出现大量纠纷,厂商们也不愿放弃自己的利益而把这些新指令编入OpenGL标准中,让大家 共享。在过去几年中,ARB就因为这样的原因,忙于理顺内部关系,无暇思考OpenGL新技术的开发,导致了OpenGL的止步不前。因此,精简扩展指令 集是必须的。

OpenGL 2.0的Shading语言

2002年,NVIDIA在推动交互式3D程序开发方面投入了大量精力,其中最主要的就是Cg图形语言(即“图形技术的C语言”——C for graphics, 这是NVIDIA为超越DirectX和OpenGL而开发的高级光影效果程序语言)。NVIDIA试图把这个语言递交给ARB,希望其成为OpenGL 组织认可的标准。但最终ARB采用的Shading语言却是3Dlabs的Glslang,这套语言会虚拟资源管线,由于OpenGL的内存管理还是黑箱 作业,所有事项都会自动处理。因此对大多数程序设计师来说便不用去考虑资源管理。

扩展性

如果只是简单的精简,必然会导致OpenGL指令的功能下降,道理很简单,因为可使用的指令集减少了。所以在精简的同时必须扩展指令的功能,也就是说为留下来的“旧”指令定义新的功能。OpenGL 2.0增加了片段处理器的能力,取代旧有的内插值顶点数据运算、像素缩放、质材存取及应用、雾化等。可编程图像格式将取代固定格式封装和解封装运算,在传送或接收像素数据时,将允许类型与格式进行任意组合。

可编程性

在所有这些扩展功能中,可编程性是最吸引人的。开发者们可以借助OpenGL 2.0提供的可编程能力,以丰富且常效性的功能来取代以往的复杂功能,减少对现有及未来扩展指令的需求。

最著名的可编程功能应该是可编程顶点,它允许进行随机个别顶点运算,同时也会取代部分旧有的OpenGL管线,如顶点转换、正规转换、照明、色彩强 化、材质坐标产生及转换等。与之相关的还有可编程片断处理和可编程图像格式,其中前者主要负责材质存取、插值运算与像素运算弹性,它将取代内插值顶点数据 运算。

可编程性应该算是OpenGL2.0最吸引人的地方,至少所有的扩展应用都有了一个最起码的标准,在可编程性语言下,所有的开发都变得十分简单,而不会出现以前那样因为可能出现产权纠纷,而在研发中产生混乱。

增强数据管理性能

在OpenGL中的数据类型主要有顶点数据(色彩、正规、位置、用户定义等)以及图像数据(材质、图像、像素缓冲区)。OpenGL 2.0提供了更好的数据移动和内存管理功能,加强了应用程序对数据移动的控制能力和更好的顶点处理能力,能消除为增进数据流量而产生的数据备份,大幅提升性能。

厂商支持情况

ARB中庞大的厂商阵营本身就是对OpenGL 2.0强力的支持,3Dlabs在最新的专业绘图卡中也肯定会加入对OpenGL 2.0标准的强力支持。

在其他厂商方面,ATI是支持OpenGL 2.0规范中比较积极的一个,伴随着RADEON 9500/9700等系列芯片的推出,ATI在专业显卡领域也有大的动作。在前面这些家用显示芯片面市3个月后,ATI公布了FireGL专业显卡,该卡搭配128MB显存,是市场上首款支持可编程浮点结构的专业3D加速卡,在它支持的API中就包括了OpenGL 2.0。FireGL有两个版本,其一是FGL 9700 Visual Processing Unit(VPU,即视觉处理器),其二是较慢版本的FGL 9500(对应RADEON 9500芯片,被成为FireGL Z1),二者都有128MB显存。

FireGL X1-128MB在去年12月已出现在市场,建议售价为795美元;FireGL Z1也于前不久上市,建议售价为595美元,据称一款256MB版的FireGL X1也将很快上市。可见,著名的显卡厂商ATI在支持OpenGL 2.0规范上是不遗余力的,这恐怕与NVIDIA的Cg被排除在规范之外不无关系。

虽然最终ARB在Shading上采用了3DLabs的设计方案,但NVIDIA渴望在ARB占据一席之地的迫切之心一目了然。不过,一对老冤家 ATI和NVIDIA在ARB的撮合下,也开始进行和OpenGL有关的技术整合。专业市场的SGI、3Dlabs及家用市场的ATI和NVIDIA都投 入到OpenGL 2.0的怀抱中,这样的阵容已足够强大了。剩下的,就看软件开发厂商们如何用好OpenGL 2.0的新特性,为我们创造出更好、更炫目的效果了。

DirectX和Glide API

DirectX是微软公司专门为游戏开发的API,其最大优点就是编程方便,很容易控制程序,其中包含的函数也很容易调用,但在专业性上不如 OpenGL强。DirectX从5.0版本开始逐渐成熟起来,目前已发展到9.0版,现在大部分常见的3D游戏都支持DirectX中的 Direct3D。

Glide是曾经的3D显卡霸主——3dfx为发挥自己的Voodoo芯片的强大性能而专门设计的3D API,由于专为Voodoo系列3D加速卡设计,不用考虑太多兼容性问题,因此Glide的的执行效率远比当时的OpenGL和Direct3D高,但其缺点在于只支持Voodoo系列产品。

相关推荐