directx游戏开发教程一定要会opengl或DirectX吗

Windows 支持 DirectX 和 OpenGL,为什么大多数 PC 游戏还是 DirectX 开发?
事实上在早年OpenGL即使在游戏领域也是对DirectX压倒性的优势。John Carmack曾嘲讽DirectX是“horribly broken” 的API。直到DirectX6时代OpenGL都被认为是比DirectX更加优秀的API,即使那个时候DirectX已经有《CS》《极品飞车5》等大作的支持,却依然不受当时FPS游戏霸主id Software的待见。作为那个时代的显卡杀手,《Quake III》都仅仅只支持OpenGL。DirectX7发布之后DirectX和OpenGL开始逐渐平起平坐。直到2000年DirectX8的发布才使DirectX在游戏领域完全确立了自己的优势 —— 支持革命性的programmable GPU rendering pipeline来代替原有的fixed function pipeline,引入了Vertex Shader和Pixel Shader。而OpenGL的核心正式支持programmable rendering pipeline已经是四年之后OpenGL 2.0发布的时候了。想想这中间会有多少游戏公司/游戏引擎公司会倒向DirectX吧。说到OpenGL衰落的原因,不得不提到OpenGL开发的机制。OpenGL早期一直是由ARB (OpenGL Architecture Review Board,成员包括Nvidia, ATI, Intel, Apple, IBM, SGI等等)成员共同维护。每个成员可以为了支持自己硬件新的feature来开发OpenGL enxtension, 所有成员一致通过的extension才能加入到下个版本OpenGL核心中。这就造成了不同成员为了各自利益互相斗争,拖慢了开发进度。微软曾经也是ARB的成员之一,后来因为受不了这种机制退出专心搞自己的DirectX去了。如果一个API越流行,那么去学习这个API的人就会越多,游戏公司会越容易招到掌握这个API的图形程序员,也就会更多的基于这个API开发游戏。用这个API的游戏越来越多,就会更多的得到硬件厂商的支持,为面向这个API的驱动做更多的优化,然后这个API就会更加流行。如此进入一个良性循环,这就造成了DirectX现在称霸游戏领域,OpenGL几乎绝迹的局面。在06年从ARB交由Khronos Group掌管之后, OpenGL最近几年也迎头赶上,从性能,易用性来说其实和DirectX已经相差不大。但是在相比DirectX没有突出优点的情况下(除了跨平台),已经习惯使用DirectX的游戏厂商也不可能重新投出OpenGL的怀抱。最后一点,OpenGL只是一个单纯的图形库,而DirectX是包含图形(Direct3D), 声音(DirectSound),
输入(DirectInput), 网络(DirectPlay)的一整套游戏开发解决方案。对开发者来说使用DirectX显然要方便的多。/*******************************************************************************************************/下面是我之前一个同事看完我的回答的评论,也贴上来吧。“还有很重要的一点, GL从不淘汰任何老的API. DX10相对于DX9,是个全新的API,革命性的更新,彻底推倒重来. 但GL为了向后兼容,保留了很多对硬件和驱动都不友好的API.除了跨平台和早期对精度的要求比DX高,其他简直是一无是处”
似乎没人提到生态环境问题。dx的生态环境包括很方便的调试工具、资源查看工具、指令流截取工具。。。gl的生态环境只能吃屎。
这个说起来很有渊源啊。能追溯的历史告诉我们,有一款显卡,开天辟地,市场占有率85%,叫Voodoo,还有一款api和它配套,叫Glide。 可惜,Glide并不开放。而且它的东家3dfx坚持只把这套api用于游戏,并且只用于自家的显卡,纵使效率极高,也只能局限在“打游戏”这个领域。当然后来这玩意也开源了,只是那时候的3dfx已经无力回天。另一款叫做OpenGL的api走入了大家的视线。 SGI做出的OpenGL在游戏领域和专业领域无往而不利,微软大为紧张,慌忙发布了DirectX 1.0,可惜此时OpenGL已经到了1.1,微软落后了,而且DirectX此时非常不成熟,所有人都在嘲笑,观望。 微软祭出了杀手锏,Windows。 世界慢慢将会知道,微软凭借这个杀手锏,在前PC时代呼风唤雨,所向披靡。 微软做出了很大胆的决定,在Windows 95中停止支持OpenGL,只支持自家的DirectX 3.0。业界骂声一片,微软也被迫在OSR2中请回了OpenGL。 但是微软不甘心,微软一步到位,发布了DirectX 5.0。此时微软学乖了,把选择的权利交给了显卡厂商,你们的驱动程序怎么开发都是你们的事,DX和OGL都随便,我就看看。 此时的3dfx已经没落,Voodoo风光不再,过于封闭的api,过于贪婪的3dfx,帝豪等代工厂纷纷转向新星nVIDIA。 微软远没有高枕无忧,它还需要游戏厂家的支持。OpenGL联盟内部的争吵扯皮,严重拖慢了游戏厂家进步的脚步,DirectX 7.0和NT5无疑是莫大的利好。完全可重入,对称多处理,32位,强大的稳定性,造就了Windows的另一次辉煌,也成就了DirectX。后来…… 微软头顶旋转的光球(DX7),踩着Netscape的尸体,手握双股剑,一把镌刻着Windows,一把镌刻着Office,旁边是踌躇满志的Intel,傲然站在山上,“还有谁??!!” 那是2001年。------------------感谢评论区的指正。鄙人愚见,DirectX搭上了Windows这趟顺风车。当时的微软有实力,有决心,也有贯彻到底的执行力,和今日之大船难掉头的窘境比不可同日而语。
OpenGL的硬件兼容性不如DirectX。用OpenGL写一个程序,在nVidia上跑起来了,百分之八十是没法在intel上跑,百分之九十九没法在AMD上跑。OpenGL直到目前为止如果不用DSA的话,设置一个对象的属性还得先绑定,这样一来就使得code变得高度依赖于一个时刻在变的状态,而且很多驱动的实现某些特定的状态下有各种bug,极难调试。例如我之前在intel上跑一个程序,如果不每帧都重新设置一个framebuffer object的render target, 那个framebuffer到了下一帧就莫名其妙的失效了,而在NV和AMD上都没有此问题,但是AMD又出了另外一个问题。DirectX的好处有微软帮你测试兼容性。一个驱动想拿到WDDM认证,先得跑通积累了十几年的test set,这样一来在实际中遇到问题的可能性就大为减少了。另外DX有开发调试环境的优势,以及更合理的API设计。虽然说NSight现在也支持OpenGL调试了,但是他现在只支持到OpenGL 4.3。这意味这如果要调试shader,就没法用DSA扩展。而DirectX就不存在这种开发工具支持和新功能只能选其一的问题。=============顺便补充一下什么是DSA以及这说明了OpenGL一直以来是多么的傻逼。在OpenGL里面,创建一个纹理、FrameBuffer之类的东西之后,如果要设置这个对象的属性,必须先绑定,整个流程是这样的:tex = CreateTexture(); //创建对象BindTexture(0, tex); //把对象绑定在0这个位置SetTextureParameteter(0, param, value); //把0这个位置的对象的param参数设置成value简直是愚蠢到家了。因为很多渲染命令都depend on当前绑定的对象,为了设置一个其他对象的值,会破坏当前的绑定,如果自己不恢复回去,剩下的代码可能就不能工作了。为了解决这个问题,他们在OpenGL 4.5才加入一个叫做直接状态访问(Direct State Access)的扩展,这个扩展是干什么的呢?就是把上述过程变成这样:tex = CreateTexture();SetTextureParameter(tex, param, value);也就是正常人使用的各种API的一贯方式。把一个常识性的做法引入OpenGL,就成了OpenGL近几年来的一个重大突破性新功能,简直是笑话。你觉得终于能使用正常的API了?不行 - 大部分驱动现在都不支持OpenGL 4.5, intel
只支持到4.2。NV虽然支持,但是你想用NSight调试的话,还是老老实实用4.3以前的API。
补充一下Windows的限制。在Direct3D在9.0c后就不支持Windows XP了,Direct3D 11.1也只有限度支持Windows 7。那么即使有SM 4.0或以上的硬件也无法在较早版本的Windows中使用。而OpenGL只需要显卡厂商继续提供驱动,便可以在各Windows版本里使用最新的硬件功能。
曾经有人说OpenGL是状态机模型,所以它更加贴近硬件,效率更高,云云。事实上这些说法都是狗屁,状态机只是OpenGL的设计者们一时的喜好而已。早期硬件还没有现在设计这么复杂,当然是状态机为主的没错,但是也和OpenGL的状态机八杆子打不着关系。两套状态机的映射,bug多,overhead大。所以为什么专业显卡买那么贵?和硬件关系不大,基本上你多出的钱,九成都是交给驱动了。当然,考虑到应用领域,OpenGL提供了很多不错的特性,比如即时绘制,累积缓冲,Polygon,AA Line等等,但是这些特性都是给CAD这样的工业软件用的,游戏基本上用不着。既然好的都用不着了,状态机那套时代渣滓,就更犯不着继承了。于是Game开发者就都去用DX了。如果Linux上有类似于DX的接口,只要它真正被广泛支持了,包括但不限于OpenGL DSA 扩展,相信我,没有哪个开发者会脑袋抽风继续跟随坑爹的状态机的。
效率不敢多说,至少DirectX的api手感用起来特别舒服。OpenGL总觉得各种设计得莫名其妙……
你要知道,至少到vs2008,vs自带的opengl头文件都只是1.1版本的,你这叫人如何用?
微软为了发展DX抑制OpenGL几乎每一本OpenGL书籍都会提到。
-------分割更新--------
再有就是DX的SDK属于虽然要自己下而且很大但是可以开箱即用,OpenGL就不一样了,glew,glext,glut等等一大堆各式版本的头文件,还要自己保证兼容等等问题……不说了,都是泪
很重要的历史原因 已经提到了。对于从游戏开发者角度而言,OpenGL 曾经是个没人用的东西,Windows / Xbox 上可以用 DirectX,PS3 和 Wii 则又是另外的图像API。直到iPhone的兴起,OpenGL 居然又活了过来,你看现在连 WebGL 都出现了,有一种统一天下的感觉。游戏开发者又开始重视 OpenGL 了,当然主要还是 OpenGL ES。对于显卡公司而言,Windows 上的 D3D 驱动特别重要,会针对各种流行游戏进行定制、优化、hack……至于 OpenGL 驱动,似乎只要满足 CAD 大厂的需求即可,毕竟几乎没有 Windows 上的 OpenGL 游戏啊……现阶段,从性能考虑(D3D 驱动会特别优化),大型的游戏还是以 D3D 的形式发布,不排除 OpenGL 的优化上去以后也会有大型的桌面 OpenGL 游戏。对于微软而言,他对于OpenGL的限制非常多,比如WindowsRT,Windows Phone是不支持OpenGL,Windows商店里的应用也必须是DirectX的。
原本我是OGL的坚决拥护者,但是自从用了DX9之后。。。。。我可耻地叛变了。OGL用起来太难受,各种状态设置,相比之下还是DX的比较方便点。还有HLSL里面的EFFECT框架,简直方便到爆!嗯,除了WINDOW那恶心地命名方式和那恶心的编程风格之外。那些东西就是逼着你转JAVA或者C#的。
已有帐号?
无法登录?
社交帐号登录我想学Unity3D,有c++基础,打算用c#语言脚本开发.1.另外的需要学directx或是opengl吗?如果要学的话该怎么选择?2.还有c#语言要学到什么水平就可以用Unity开发游戏了?3.还是直接只看官方的《Unity 4.X 从入门到精通》这本书就可以慢慢学习Unity了?4.对Unity的学习还有其它的建议?
前面大大都说得差不多了,我就补充下关于“1.另外的需要学directx或是opengl吗?如果要学的话该怎么选择?”这个问题吧个人觉得有时间学习一下这两个图形API还是很有好处的:1.引擎的渲染部分其实是对图形API的封装,学习一下图形API可以更加好的理解引擎的渲染机制2.在学习图形API的过程中你会遇到很多3D数学的问题,这方面也是在使用引擎的时候必须的。3.学习过程中可以了解3D流水线是个什么样的东西(哪些部分是可以使用Shader替代的,可以加上对u3d中shader的理解),另外还可以更好的理解一个3D物体是怎么从局部坐标系到最终渲染到屏幕上面的整个过程。总之多做了解觉得不会无用,它能是你更好的驾驭引擎,做到用着心里有数。。建议学习Direct3D入门推荐一本书:《Introduction To 3D Game Programing with DierctX 9.0》龙书,3D数学方面推荐:《3d数学基础 图形与游戏开发》。都有中文版哟~ps:现在龙书也有新版了《Introduction to 3D Game Programming with DirectX 11》不过是E文
1. unity是游戏引擎, 主要3种语言, 其中主要两 c# 和 javascript . 首先学号语言基础.&br&2. 最好还要看些书, 除了楼猪说的以外, 还有一本书 &unity权威指南& . &br&3. 看公开课, 首选游戏蛮牛公开课, 目前有八季, 共计400多集公开课.
以后估计还有会. 各种维度的. unity2d和3d, unity插件, unity网络实战, unity游戏开发, unity虚拟现实, unity美术相关....等, 网站&a href=&///?target=http%3A//& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
1. unity是游戏引擎, 主要3种语言, 其中主要两 c# 和 javascript . 首先学号语言基础. 2. 最好还要看些书, 除了楼猪说的以外, 还有一本书 &unity权威指南& . 3. 看公开课, 首选游戏蛮牛公开课, 目前有八季, 共计400多集公开课. 以后估计还有会. 各种维度的.…
unity 相当于游戏开发的集成开发环境,涉及到游戏开发的各个方面,并且都是经过层层封装的,非常贴近于业务逻辑层,对于底层要求不高;因此,opengl,directx,c# 之类的粗略懂点就可以了。&br&之后的学习主要围绕项目来进行,例如可以参考一些项目视频:&br&&a href=&///?target=http%3A///course/297& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unity RPG MMO-火炬之光开发&i class=&icon-external&&&/i&&/a&
unity 相当于游戏开发的集成开发环境,涉及到游戏开发的各个方面,并且都是经过层层封装的,非常贴近于业务逻辑层,对于底层要求不高;因此,opengl,directx,c# 之类的粗略懂点就可以了。 之后的学习主要围绕项目来进行,例如可以参考一些项目视频:
已有帐号?
无法登录?
社交帐号登录请指点哈:应该学OpenGL呢,还是DirectX呢?
[问题点数:50分,结帖人anyue417]
请指点哈:应该学OpenGL呢,还是DirectX呢?
[问题点数:50分,结帖人anyue417]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2006年10月 总版技术专家分月排行榜第二2006年9月 总版技术专家分月排行榜第二
2006年5月 总版技术专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。Directx和opengl有什么不同?
[问题点数:60分,结帖人hgogo]
Directx和opengl有什么不同?
[问题点数:60分,结帖人hgogo]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。博客访问: 1819357
博文数量: 1371
博客积分: 10018
博客等级: 上将
技术积分: 12680
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
独立游戏开发商Wolfire在一篇中解释了他们的原因。文章认为微软的市场策略让DirectX API几乎变成了游戏开发的代名词,Wolfire认为开发者应选择OpenGL而不是DirectX。
文章称: 1997年的情况和现在十分类似,微软为Direct3D发动了大规模的市场宣传,很快每个人都“想当然”的认为DirectX比OpenGL更好更快。这一情况直到(DirectX 前身WinG API项目开发负责人)公布了谴责DirectX公开信后才有所改变。不久之后John Carmack发表了他著名的OpenGL宣言,并言行一致的让Id Software游戏都在OpenGL中实现,证明DirectX并不是开发高端3D游戏所必要的。这个教训在过去几年似乎被人遗忘了,现在多数游戏开发 商已牢牢被DirectX的营销所掌控,或者陷入了恶性循环。采用DirectX意味着游戏将只能运行在Windows上,这并不是一件好事情,以 Wolfire为例,它的游戏用户中超过半数不是使用Windows操作系统。
阅读(380) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。}

我要回帖

更多关于 opengl directx 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信