(Visual C++)游戏开发笔记十九 DirectX与OpenGL的博弈
一、体系认知
目前,我们可接触到的图形API可分为OpenGL和DirectX两大体系,前者是一项开放性的标准,主攻专业图形应用和3D游戏,由"OpenGL架构委员会"掌控,其成员包括业内各大厂商,目前主要推动标准发展的实际领导者是3Dlabs。DirectX则是微软制定的API标准,除了图形API功能外,它还包含音频API等功能,只不过其图形部分升级最快、也最为人所知。DirectX针对的主要是娱乐应用,目前流行的DirectX 9 API功能极为强劲,目前市面上的大部分新3D游戏都基于DirectX 9,而图形芯片制造商更是将它作为标准、竞相提供对DirectX 9的支持,是否支持DirectX 9也成为两代显卡的分水岭。
虽然DirectX在家用市场全面领先,但在专业高端绘图领域,OpenGL是不能被取代的主角。
2009年10月22日,微软公司正式发布Windows 7,DirectX 11集成在Windows 7 中同步登场,但其实DirectX 11只是DirectX 10的大幅度加强版,而不是9.0C和10.0/10.1的彻底革新
国内这方面的教材革新比较缓慢,由于DirectX 11与windows 7集成,在2009年同时推出,而导致基于DirectX 11的中文教材与文献非常稀少。
而为了让大家掌握到国际最新的技术,本系列文章后续内容会对目前最新的DirectX 11进行深入讲解,希望有兴趣了解最新技术的朋友们持续关注。
下面我们分别简单概述一下DirectX与OpenGL。
二、 微软的宠儿——DirectX
DirectX是微软公司提出的一种应用程序接口(API),由C++编写,它可让以Windows为平台的游戏或多媒体程序获得更高的执行效率,加强3d图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低用户安装及设置硬件的复杂度。
DirectX并不是一个单纯的图形API,它是由微软公司开发的用途广泛的API,它包含有Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等多个组件,它提供了一整套的多媒体接口方案。只是其在3D图形方面的优秀表现,让它的其它方面显得暗淡无光。
这样说也许大家还是有些不太明白,那我们就从字面意义上来理解吧。Direct英文含义是“直接”的意思,表示直接建立在硬件之上,而后边的X则表示“未知的”,具体代表相关的组件,比如3D、Sound、Music、Input、Play、Show。我们将DirectX中代表泛指的“X”换做一个特指,比如说我们换做”3D”,那么DirectX摇身一变就成了它的一个组件Direct3D
微软比较明智,为众厂家推出了一个共同的应用程序接口——DirectX,并赋予它“硬件设备无关性”的特性。只要这个游戏是依照DirectX来开发的,不管你是什么显卡、声卡、统统都能玩,而且还能发挥更佳的效果。当然,前提是你的显卡、声卡的驱动程序也必须支持DirectX。
这样就很容易理解了,总结起来就是,DirectX的出现就是为各种品牌的硬件提供了一个共同的硬件驱动标准。
三、不甘做备胎——OpenGL
OpenGL定位为专业图形处理,英文全称是"Open Graphics Library",意为"开放的图形程序接口"。OpenGL的历史可以追溯到上个世纪90年代初,标准诞生之后它一直占据主导地位。微软的DirectX出现的时间比OpenGL来得晚,但就在最近数十年,OpenGL因发展迟缓而被DirectX反超。
事情回溯到1999年,OpenGL发生了一次比较失败的变革,导致了之后的危机:
OpenGL的缔造者SGI(Silicon Graphics硅图)决定与微软联手开发下一代图形接口--Ferihant。Ferihant应用于Windows系统中,作为OpenGL和DirectX的取代者。为此,Ferihant将包含DirectX与OpenGL各自的优点,并加入场景贴图之类的高级功能。由于有了Ferihant,SGI停止了原先的Windows版OpenGL开发计划,外界对此表示赞赏。然而Ferihant计划没进行多久,双方的合作就出现裂痕,微软不积极合作,光想把SGI的图形技术并入DirectX的做法令SGI非常不满,SGI随后宣布中止合作并撤回所有的开发人员,Ferihant遂告夭折。在这之后,OpenGL和DirectX似乎互不相干,继续在PC平台上发展,但状况对比鲜明:DirectX从此突飞猛进,而OpenGL却长期原地徘徊。其间,DirectX 8 API更是正式成为娱乐显卡的标准,id公司所形容的"支离破碎的DirectX"早已非吴下阿蒙,大量的3D游戏转向了DirectX体系。
尽管如此,OpenGL目前仍然是高端图形API的代名词, Khronos Group在2009年3月又公布了升级版新规范OpenGL 3.1,也是这套跨平台免费API有史以来的第九次更新,它以强劲的功能特性为业界瞩目,而显卡制造商对OpenGL API的重视程度并未缩减。
Open GL仍然是唯一能够取代微软对3D图形技术的完全控制的API。它仍然具有一定的生命力,但是Silicon Graphics已经不再以任何让微软不悦的方式推广Open GL,因而它存在较高的风险。游戏开发人员是一个有着独立思想的群体,很多重要的开发人员目前仍然在使用Open GL。因此,硬件开发商正在设法加强对它的支持。Direct3D目前还不能支持高端的图形设备和专业应用; Open GL在这些领域占据着统治地位。最后,开放源码社区(尤其是Mesa项目)一直致力于为任何类型的计算机(无论它们是否使用微软的操作系统)提供Open GL支持。
在可预见的将来,OpenGL仍将是DirectX的宿敌。
四、DirectX与OpenGL的博弈
首先,做一个概念性的总结,DirectX是一个功能强大的统一的API接口,而OpenGL是一个高级图形库。
<1>市场占有率,DirectX的压倒性优势
经常玩电脑游戏的各位都会有这样的一个体会,我们安装一款游戏后,经常会报错缺少某dll而无法进入,但只要我们更新到最新的DirectX运行环境,基本上就可以正常进行游戏了,这是因为市面上绝大多数游戏都是基于DirectX的。对游戏开发了解有限的玩家基本上都会知道DirectX是他们玩游戏必须安装的,但知道OpenGL的却寥寥无几。
毋庸置疑,DirectX占据着游戏市场绝对的优势,据估计目前市面上几乎所有的电脑游戏都是基于DirectX而开发的。《百度今日网游排行榜》上的前五十名,无一例外,全部拜倒在DirectX的石榴裙下。这里我们列举出前十名,他们依次是《地下城与勇士》,《穿越火线》 ,《英雄联盟》,《魔兽世界》,《QQ飞车》,《QQ炫舞》,《梦幻西游》《龙之谷》,《倩女幽魂》,《第九大陆》 。(2012年4月29号榜单)
且一款显卡,想要立足于PC市场,首先要做的就是支持DirectX,而支持OpenGL,只是备胎而已。
使用DirectX是因为API的选择是基于游戏开发的积极反馈,这一切都发生在2005年:
如果一个API越流行,那就有越多人用,然后它就会更流行,如此循环。。。这种网络效应带来的结果就是:更流行的API获得更好的硬件厂商支持,图形程序员随后更意于选择他们已经熟知的API。
DirectX的胜出得益于微软的两次十分尖锐的战役,围绕XBox360和windows vista,当然DirectX的胜出原因也包括着围绕着OpenGL的开源项目的固步自封,以及微软围绕DirectX进行的夸大宣传攻势。
<2>OpenGL的现状,一半明媚一半忧伤
虽然DirectX在家用市场全面领先,但在专业高端绘图领域,OpenGL是不能被取代的主角。
OpenGL仍然是唯一能够取代微软对3D图形技术的完全控制的API。它仍然具有一定的生命力,但是Silicon Graphics已经不再以任何让微软不悦的方式推广Open GL,因而它存在较高的风险。游戏开发人员是一个有着独立思想的群体,很多重要的开发人员目前仍然在使用Open GL。因此,硬件开发商正在设法加强对它的支持。Direct3D目前还不能支持高端的图形设备和专业应用; Open GL在这些领域占据着统治地位。最后,开放源码社区(尤其是Mesa项目)一直致力于为任何类型的计算机(无论它们是否使用微软的操作系统)提供Open GL支持。
<3>跨平台,OpenGL优势之所
关于跨平台,这是OpenGL对比DirectX绝对的优势。
DirectX仅能用于Windows系列平台,包括Windows Phone/Windows Mobile/Windows CE系列以及XBOX/XBOX360。
而OpenGL除了可以支持DirectX所适用的平台外,可以支持Unix、Linux、MacOS、Android、iOS等。
值得一提的是,由于最近几年移动开发市场的迅猛发展,Android和iOS需要一款的专业的图形库,跨平台的OpenGL无疑是最好的选择。
<4>全能性,DirectX优点明显
DirectX 包含图形, 声音, 输入, 网络等模块,包含开发一款游戏所需的全部工具,全能性明显。
OpenGL 只是图形函数库。只能用于图形处理,用于开发游戏时,输入,声音,网络等方面还需配合其他函数库。比如声音方面我们就经常配合采用OpenAL。
五、结语
介绍得这么多了,大家应该有一个整体的认知了,这里我们做一个总结。
如果你想进行PC,Windows Phone以及XBOX/XBOX360相关的开发(不仅仅局限于游戏开发),选择DirectX。
如果你想进行Android、iOS、MacOS 、Linux等平台的游戏开发或相关专业图形开发,或者喜欢跨平台的特性,选择OpenGL。
作者:zhmxy555
补充:软件开发 , Vc ,