作为游戏开发界老生常谈的话题,浅墨认为有必要写这样一篇文章来专门分析一下两者的优劣。这节就是给大家
对DirectX和OpenGL的一个整体的认知,也以至于扩大我们的【C++游戏开发】专栏的适用范围到广义的游戏开发,而不仅
仅局限于Windows游戏开发。毕竟适用于iOS和Android以及WindowsPhone的各种游戏引擎基本上都是采用C++编写的,
希望有幸将我们的C++游戏开发的范畴扩展至iOS、Android以及WindowsPhone平台,为这些热门的移动平台编写出我们自
主开发的游戏引擎,以促进移动游戏开发的进一步发展。
虽然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并不是一个单纯的图形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的出现就是为各种品牌的硬件提供了一个共同的硬件驱动标准。
事情回溯到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支持。
<1>市场占有率,DirectX的压倒性优势
经常玩电脑游戏的各位都会有这样的一个体会,我们安装一款游戏后,经常会报错缺少某dll而无法进入,但只要我们更新到最新的DirectX运行环境,基本上就可以正常进行游戏了,这是因为市面上绝大多数游戏都是基于DirectX的。对游戏开发了解有限的玩家基本上都会知道DirectX是他们玩游戏必须安装的,但知道OpenGL的却寥寥无几。
毋庸置疑,DirectX占据着游戏市场绝对的优势,据估计目前市面上几乎所有的电脑游戏都是基于DirectX而开发的。
对DirectX和OpenGL的一个整体的认知,也以至于扩大我们的【C++游戏开发】专栏的适用范围到广义的游戏开发,而不仅
仅局限于Windows游戏开发。毕竟适用于iOS和Android以及WindowsPhone的各种游戏引擎基本上都是采用C++编写的,
希望有幸将我们的C++游戏开发的范畴扩展至iOS、Android以及WindowsPhone平台,为这些热门的移动平台编写出我们自
主开发的游戏引擎,以促进移动游戏开发的进一步发展。
一、体系认知
目前,我们可接触到的图形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而开发的。