OpenGL还是DirectX?

16

我知道这可能是一个非常主观的问题,但我只想从最容易和最快学习的开始,以便我可以尽快开始我的小项目,起码先做一个小的2D游戏。你会推荐我选哪个?而且我使用的是C++。


我不会称这些为完全的重复,但如果你还没有阅读以下问题的回答,请参考:https://dev59.com/THRB5IYBdhLWcg3wz6UK,http://stackoverflow.com/questions/1141135/opengl-v-directx-the-endless-war - Ricket
6个回答

20

第一个问题:您是否使用Windows系统?如果不是,请使用OpenGL。

如果您使用的是Windows系统,则这将成为一种品味问题。虽然OpenGL和DirectX的API有所不同,但所需的概念非常相似。大多数事情都可以在两者上支持,尽管它们的工作方式略有不同。

微软提供了相当多的示例和一个不错的框架,您可以用于DirectX(9或10),这可以使入门变得更加容易。

话虽如此,如果您的目标仅限于Windows Vista/Win7,那么切换到DirectX 10可能会更容易。在DX9及更早版本中的许多烦恼都在DX10中被移除,并且API更加简洁。

话虽如此,如果这是一个游戏,我建议您考虑使用中间件引擎,例如Ogre,而不是直接使用DirectX或OpenGL进行编写。特别是在学习阶段,这将使您的生活更加简单。


2
除了我的情况,我沉迷于收集引擎,实际上什么也没做。我肯定一次画一个三角形会做得更好。哦,我推荐使用OpenGL,因为这样你的程序可以在Linux上运行...如果你使其余部分兼容Linux的话。 - Ricket
4
我认为在游戏编程领域,Ogre已经成为了类似于jQuery的存在,人们总是说“使用Ogre”,即使他们没有尝试过。我不建议新手使用Ogre。你需要理解图形编程的原理,而这需要接触到3D API的低级方式。 - bobobobo

7

我没有使用过DirectX,但OpenGL相对简单,并且在NeHe有一些好的入门教程。此外,如果您想要跨平台,您将需要使用OpenGL。
不过,DirectX不仅仅是一个图形库,您还可以用它来处理声音等,所以值得一试。


4
常用的SDL库使用OpenGL支持输入(管理窗口,帮助实现跨平台),还有类似于声音、网络等的“插件”。OpenAL也是一个很棒的声音库,其语法与OpenGL相似,让人感到亲切。 - Ricket
我一直有OpenAL音频缓冲的问题,在Windows上同时播放多个声音时总是听起来有点儿不连贯。但在Linux上就没问题。反正,我会使用SDL/OpenGL。 - devyn

5
如果只是2D的话,也许值得考虑一下已经跨平台且看起来很容易学习的SDL(Simple DirectMedia Layer)。网络上有很多教程,但我记得一个特别好的网站是Lazy Foo's SDL Tutorials。你还可以将OpenGL与SDL混合使用,也有相应的教程。
如果不想使用SDL并且在Windows上,我会推荐DirectX。我知道这两者之间的选择最终会在互联网上引发激烈的争论,但我的理解是DirectX更适合游戏开发人员,因此你会找到许多实用库、函数和类,这些都可以帮助完成各种任务。使用OpenGL,你可以编写跨平台代码,前提是辅助功能如图像加载也是跨平台的(确实有跨平台库)。
所以我的结论是:两者都可以,OpenGL可以给你跨平台代码(前提是你要写),而DirectX可以给你更多面向游戏开发的工具和库。

4

如果您希望尽快开始,我建议使用NVidia GPU上的OpenGL。您可以将几乎任何东西投入其中,它都会显示出来。但是,如果您想以较低的编程工作量实现良好的性能,则建议使用Direct3D。在OpenGL中有太多的做事方式,初学者肯定会首先发现缓慢的路径,因为它们被许多古老的教程(参见NeHe)所覆盖。此外,调试OpenGL应用程序很痛苦,尽管像gDEBugger这样的工具可以提供帮助。


1
关于NeHe的观点很好 - 虽然它们是非常优秀的教程,但现在已经过时了。因此,如果您使用它们,请注意他所教授的许多内容现在基本上是不良实践。 - thecoshman

3

如果您有一些COM经验,并且不会让您感到头疼,我建议使用DirectX,因为SDK提供了很多好的示例/教程。如果您更喜欢C风格编程或对COM内容感到困惑,则我建议使用OpenGL。


2
正如其他人所指出的,如果您计划将“游戏”移植到除Windows以外的其他平台,最好开始使用OpenGL。
如果只是一个简单的2D游戏,并且现在不需要3D支持,SDL会是一个更好的选择,稍后可以将“SDL”和“OpenGL”结合在一起。(您可以直接从SDL中使用openGL,它甚至在SDL中有自己的头文件)。
同时,DirectX提供了OpenGL和SDL都无法提供的功能。OpenGL远远落后于DirectX。[OpenGL 3.0仅仅是一个渐进式更新,API自2.x以来并没有太大变化]。
因此,如果您计划为Windows编写游戏,只需使用“DirectX”,否则使用“OpenGL”和“Sdl”。
最后,如果您不想头疼,只需使用一个游戏引擎,例如C4 Engine。相信我,当您转向3D时,您别无选择,因为有很多主题需要花费大量时间“挖掘”和“学习”。

2
我鼓励你看一下OpenGL 3.2的变化。它更接近DirectX 10.1的功能集。NVIDIA已经发布了OGL3.2的驱动程序,ATi也正在开发中。该规范于周一发布。 - greyfade
谢谢greyfade,我看了一下,它看起来很有前途,正如你所说的那样,“IS”接近DX10的功能集,我唯一对你所说的有问题的是,它还没有经过官方测试 - 我必须等待并看看其他人会说什么,因为我真的不信任Khronos,他们真的毁了GL的声誉。- 尽管如此,如果我想学习仅适用于Windows的东西,我会选择DirectX。 - Cynics

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接