OpenGL和Direct3D

时间:2009-06-09 20:40:09

标签: opengl directx

OpenGL和Direct3D有什么区别?它们是真正不同的实现来完成相同的事情(比如Java和Mirosoft的CLR [.NET])吗?

3 个答案:

答案 0 :(得分:9)

它们是非常不同的图形API。但公平地说,他们大多数都完成同样的事情。如果您在Windows(或XBOX游戏)下开发游戏,DirectX可能是首选的API,如果您想要跨平台支持,OpenGL是您的选择。例如,Mac OS和iPhone一样使用GL,许多Windows游戏也支持OpenGL。

因为OpenGL是在很长一段时间内开发出来的,并且“由委员会”开发,所以它带来了很多包袱 - 这个API有一些较旧的选项,而这些选项今天并不相关。这是OpenGL ES的原因之一;它可以减少所有垃圾,并为更轻松的目标平台做好准备。

另一方面,DirectX由Microsoft控制,因此它具有更“现代”的感觉(它基于COM组件,因此是高度面向对象的)。 MS经常更新API以匹配新硬件。

有时你没有选择的奢侈品(例如iphone无法运行DX)。但通常只取决于个人偏好/经验。如果你是一个长期的图形程序员,你往往会非常熟悉这两个......

答案 1 :(得分:3)

谷歌在这种情况下是你的朋友......有一篇很好的维基百科文章对两个图书馆进行了对比:

Comparison of OpenGL and Direct3D

如果内存服务,OpenGL是Direct3D出现之前的开放实现。然后Direct3D基于OpenGL ......但很快就分道扬and,成为了它自己独特的库。

<强>更新

看起来我的记忆被拍了......

Direct3D是独立于OpenGL开发的。

答案 2 :(得分:3)

Direct3D和OpenGL是用于完成同样事情的不同API。

D3D和GL之间的主要区别在于D3D是面向对象而GL不是。 D3D9和GLES2基本上具有相同的功能。事实上,如果您打算使用OpenGL并且不需要任何GL3或GL4功能,那么您应该将所有代码都基于GLES2 API(所有GLES2功能都在GL2中,但不是相反)。

如果可能的话,你应该总是在Windows上使用D3D over GL,因为多线程和驱动程序支持是不稳定的。以上网本为例,他们在ShaderModel 2上支持D3D的HLSL,但不支持GLSL的等价物,它们只支持GL的固定管道。