From: http://blog.csdn.net/zhmxy555/article/details/7522960

本系列文章由zhmxy555(毛星云)编写,转载请注明出处。

http://blog.csdn.net/zhmxy555/article/details/7522960

作者:毛星云    邮箱: happylifemxy@qq.com    欢迎邮件交流编程心得

作为游戏开发界老生常谈的话题,浅墨认为有必要写这样一篇文章来专门分析一下两者的优劣。这节就是给大家

对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而开发的。《百度今日网游排行榜》上的前五十名,无一例外,全部拜倒在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。

本篇文章到这里就结束了。这节就是给大家对DirectX和OpenGL的一个整体的认知,扫清图形库选择方面的障碍,希望能对有这方面疑惑的朋友有所帮助。

这篇文章涉及到不同技术之间的比较了,浅墨不希望有不和谐的事情发生,也许是一家之言,有些地方或许不太中肯,欢迎有

不同见解的朋友与我进行讨论与互动。

感谢一直支持【Visual C++】游戏开发笔记系列专栏的朋友们,也请大家继续关注我的专栏,我一空就会把自己的经验写出来与大家分享。

精通游戏开发的路还很长很长,非常希望能和大家一起交流,共同学习,共同进步。

大家看过后觉得值得一看的话,可以顶一下这篇文章,你们的支持是我继续写下去的动力~

如果文章中有什么疏漏的地方,也请大家指正。也希望大家可以多留言来和我探讨编程相关的问题。

最后,谢谢各位一直的支持~~~

——————————浅墨于2012年4月29日

【Visual C++】游戏开发笔记十九 DirectX与OpenGL的博弈相关推荐

  1. 【Visual C 】游戏开发笔记十九 DirectX与OpenGL的博弈

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  2. 【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    本系列文章由zhmxy555编写,转载请注明出处. 文章链接  http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云    邮箱:  ...

  3. 【Visual C 】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  4. [原]【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    本系列文章由zhmxy555编写,转载请注明出处. 文章链接  http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云    邮箱:  ...

  5. 【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    本系列文章由zhmxy555编写,转载请注明出处. 文章链接  http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云    邮箱:  ...

  6. 【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 本系列文章由zhm ...

  7. 【转】【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI

    原文连接:http://www.cnblogs.com/dyllove98/archive/2012/04/07/2461865.html#commentform 我们常常听闻AI(Artificia ...

  8. 【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI .

    本系列文章由zhmxy555编写,转载请注明出处.  http://blog.csdn.net/zhmxy555/article/details/7434317 作者:毛星云    邮箱: happy ...

  9. [原]【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI

    本系列文章由zhmxy555编写,转载请注明出处.  http://blog.csdn.net/zhmxy555/article/details/7434317 作者:毛星云    邮箱: happy ...

最新文章

  1. Angular应用中配置全局路径映射
  2. 需要更换手机了:由 TensorFlow Lite 构建无人驾驶微型汽车
  3. 网络巨头秘修域名重大疏漏 互联网免遭黑客控制
  4. 爬虫实战:Requests+BeautifulSoup 爬取京东内衣信息并导入表格(python)
  5. 架构设计 | 基于消息中间件,图解柔性事务一致性
  6. 算法的优缺点_机器学习算法优缺点 amp; 如何选择
  7. PHP简易网页访问统计源码
  8. ffmpeg编译的静态链接库问题
  9. 启动orcal服务和监听的命令的一种方式
  10. HTML第6章简答题3(制作北大青鸟网站的中心开班信息模板)
  11. 打印服务器 支持 佳能 2900+打印机,佳能LBP2900,夏普等特殊打印机如何实现打印?(虚拟USB软件用途之二)...
  12. git gui :Updating the Git index failed. A rescan will be automatically started to res
  13. zabbix 5.0所有依赖包_最详细的 Zabbix 使用教程
  14. 红黑树——简单明了的学生思路
  15. 【前端】Axios完全使用指南
  16. 利用python读取tomcat中log文件提取出错误日志生成新的文件
  17. python三人同行七十稀_三人同行(三人同行什么意思)
  18. 关于前后台部署打包时需要修改的ip位置
  19. 【Go】Map 的空间利用率统计
  20. 解锁iPhone的三种方法

热门文章

  1. 一起谈.NET技术,.NET4.0 之 Dynamic VS Reflection 效率
  2. 计算机主板各模块复位,电脑主板复位电路工作原理分析
  3. java映射的概念_Java 反射 概念理解
  4. 2074. 反转偶数长度组的节点
  5. 49. 字母异位词分组
  6. sklearn.fit_两个小时后仍在运行吗? 如何控制您的sklearn.fit。
  7. bdd cucumber_如何使用BDD构建坚如磐石的Ruby on Rails应用
  8. Go语言-基本的http请求操作
  9. Mountain Number FZU-2109数位dp
  10. Android仿QQ复制昵称效果2