为什么你应该使用OpenGL而不是DirectX?

最近对图形学很有好感 ,四处看了些相关博文,觉得这篇很不错,是国外的一篇文章的译文

转自:http://www.cnblogs.com/baesky/archive/2011/04/08/2009128.html

英文原文:http://blog.wolfire.com/2010/01/Why-you-should-use-OpenGL-and-not-DirectX


大家可以思考一下:why we choose a closed source API when the open source is equally good or better?
What kind of bizarro world is this where engineers are not only going crazy over Microsoft's latest proprietary API, but actively denouncing its open-standard competitor?

当我们遇到其他游戏程序员并谈论我们使用OpenGL开发Overgrowth时总是会遇到怀疑的眼神。为什么要用OpenGL? DirectX才是未来。当我们使用OpenGL去告诉显卡如何工作时,房间的温度下降了10度(啥意思?我一直以为A卡和N卡的区别,没想到作者认为是API的问题?Holy。。。)。

OpenGL 是什么?

为什么你应该使用OpenGL而不是DirectX?_第1张图片

在1982年,Silicon公司开发售卖使用称为Iris GL的API的高性能图形显示终端。随后的几年,Iris GL变得臃肿和难以维护,直到silicon决定彻底走向新的一步:完全的重构Iris GL并开源。他们的竞争者可以使用这种新的开放图形库(OpenGL)但是作为回报,他们必须帮助维护更新该库。   

如今,OpenGL 由Khronos Group管理。一个由很多公司参与组成的非营利组织,重点是维护高质量多媒体API。在底层,由 OpenGL Architecture Review Board (ARB)来管理。各种游戏平台都支持OpenGL,包括:Mac,Windows,Linux,PS3,Wii,IPhone,PSP和DS,除了XBox,下面我们就要介绍它:

DirectX 是什么?

为什么你应该使用OpenGL而不是DirectX?_第2张图片

自从MS-DOS时代,微软就明白游戏是一个用户选择操作系统的重要依据。基于这个原因,在1995年,微软创建了一套专用库以鼓励大家开发winodw95平台独占的游戏。这些库包括Direct3D,DirectInput和DirectSound,整个集合就是大家知晓的DirectX。当微软2001年进军游戏市场时,XBOX意图统治次世代游戏市场。

看看现在的状况,微软的战略无疑是成功的。大多数的PC游戏都是用DirectX,大多都运行在windows或者Xbox360上。但有些例外,它们无法再竞争对手的平台上,比如Playstation, Mac OS和Wii。于是,它给我们带来一个新的问题:

为什么大家都是用 DirectX?

使用DirectX是因为API的选择是基于游戏开发的积极反馈,这一切都发生在2005年:

如果一个API越流行,那就有越多人用,然后它就会更流行,如此循环。。。这种网络效应带来的结果就是:更流行的API获得更好的硬件厂商支持,图形程序员随后更意于选择他们已经熟知的API。

DirectX的胜出得益于微软的两次十分尖锐的战役,围绕XBox360和windows vista,也包括着关于OpenGL这种开源项目都面临着的FUD(恐惧,不确定,怀疑),以及DirectX夸大宣传的优势。从此,这种网络效应将会一步步增强直到OpenGL从地球消失。(作者好悲观。。。)

1. 网络效应与恶性循环

为什么你应该使用OpenGL而不是DirectX?_第3张图片

Win平台上,DirectX的图形驱动显然比OpenGL的驱动得到更好的维护。这是由于厂商支持引起的恶性循环。游戏开发者选择是用OpenGL还是DirectX由很多因素决定,显卡厂商得到的OpenGL驱动BUG比较少,因为用DirectX的比较多,所以不能很好的支持OpenGL的驱动。

简单来讲,越多程序员懂得DirectX甚于OpenGL,那么更多游戏使用前者开发。这会引起又一个恶性循环,更多地项目使用DX开发,更多地程序员需要学习如何使用它。。。。

2. 关于 OpenGL的FUD效应 和 Vista

为什么你应该使用OpenGL而不是DirectX?_第4张图片

微软在vista发布时对OpenGL使用了FUD战术。在2003年,微软推出了前面介绍维护底层的OARB组织--预示着微软不再会对OPGL的未来感兴趣。在2005年,微软在SIGGRAPH和WinHEC上给大家的假象就是他们从vista开始将不会支持OPGL除了对XP程序的向后兼容。这种版本的OPGL将会建立在DirectX之上,这当然引起严重的性能问题。这场战役导致很多优秀程序员转战DX。

当vista发布后,他又允许厂商创建快速可安装客户端驱动(ICDs)以保留对原生OpenGL的支持。OpenGL发布消息称OpenGL依旧是第一阵营,但是OPGL在vista上的效果始终不如Direct3D。不幸的是,这种破坏已经给OPGL带来了巨大的打击。

3. 误导市场的战役

为什么你应该使用OpenGL而不是DirectX?_第5张图片

win7发售时的市场策略与vista如出一辙,微软展示了before和after效果。很多玩家认为从dx9转到dx10就能神奇般的把图形变得更亮,或者说从Halo1变成Crysis。游戏评论证实Crysis的DX9版与DX10无区别,而画面的改变事实上由于调整了某些config文件。

在拥有大量游戏的微软市场策略下,一些有见解的程序员与卡马克大神拒绝追赶他。他说:“个人来讲,我不会立即跳进DX10.我会尝试做些改变直到我真的需要它。”

(我觉得作者是个悲剧,传言说下一代的ID引擎是基于DX的,卡马克也没说不用dx呀。。。)

为什么我们要用 OpenGL?

得到更少的厂商支持,游戏不再大量使用,被微软紧追猛打,市场生存空间狭小,为什么我们还要用它?大家用dx不更省事么?不,因为实际上,OpenGL比DX更强大,支持更多的平台,这是未来游戏的基础。

1. OpenGL 比 DirectX 更强大

为什么你应该使用OpenGL而不是DirectX?_第6张图片

OPGL有比DX更快的draw调用(如果你不信请看这里this one),并且它能通过厂商扩展第一时间使用GPU的新特性。OPGL让你能在多平台上直接访问显卡硬件,而DirectX只能在他们最新的操作系统上提供一些最新技术的展示。DX11鼓吹的Tesselation其实三年前就可以用OPGL使用了。我不知道以后还会有什么新技术,但我知道OPGL一定最先可用(这个“卖点”也灰常吸引译者本人)。

2. OpenGL 是跨平台的

为什么你应该使用OpenGL而不是DirectX?_第7张图片

暴雪总是同时发布游戏的mac版本,这是他们成功的一项法宝。

就像卡马克被问Rage是不是DX游戏时谈到:“它事实上用的是OpenGL,尽管我们使用了D3D-ish API在Xbox360平台和PS3的CG。你使用的技术很微小一部分,写的上百万行代码只有少数部分才会用API,但是数百万行的代码却依赖那些不可知的目标平台。”就像卡马克说的,为什么不会跨平台做好准备而让自己被DX限制?

3. OpenGL 是未来游戏更好的选择

为什么你应该使用OpenGL而不是DirectX?_第8张图片

非盈利的开源OpenGL用于创造一个允许用户在各种平台都能高效能发挥的图形库。他被垄断企业不断攻击,这其实也在伤害您自己的利益。我们需要自由和竞争来提升质量和降低价格。一个微软垄断的局面对游戏开发者和玩家来说都是非常杯具的。

OpenGL 能否力挽狂澜?

回到1997年,那时的情况和现在如此相似。微软为DX发动了疯狂的市场战役,随后大家都“知道”它比OpenGL更快。随着Chirs Hecker发表的open letter denouncing DirectX。情况有所改变。随后,卡马克发布了著名的OpenGL rant,并掏出大把钱用OpenGL开发Id工作室的项目,一度证明了DX不可能达到的3D性能。

这一课已经被渐渐遗忘。很多开发者陷入了dx的市场诱惑。

如果你使用OpenGL,你可以比DX11更早使用更快更强大的显卡特性,并且用于所有版本的windows,mac和linux,同样也可用于PS3,Wii,PSP,DS和iPhone。你也可以在 rapidly-developing WebGL standard使用这些特性(用于次世代网页游戏)。

如果你是一个游戏开发者,你只需搜索资料并思考,然后想想OpenGL是否是更好的选择。

(译后感:本人玩的是C++,这篇文章让我觉得似曾相识,语言之争也从未结束,也将不会结束。API是API,就像卡马克说的,一个游戏很少一部分才用到API。语言呢也终究是工具,所以我们的算法才如此的“泛型”。)


你可能感兴趣的:(杂谈,directx,opengl)