OpenGL和Direct3D

3
OpenGL和Direct3D之间有什么区别?它们是真正不同的实现,以完成相同的任务(就像Java和Microsoft的CLR [.NET]一样)吗?

DirectX不仅仅是3D图形,你是不是指的是Direct3D与OpenGL? - Joakim Elofsson
没错,我已经修复了。http://zh.wikipedia.org/wiki/DirectX - Frank V
3个回答

9
它们是非常不同的图形API。但可以说它们大多数情况下都能实现相同的功能。如果你在Windows下开发游戏(或者XBOX游戏),DirectX可能是首选的API;而如果你需要跨平台支持,OpenGL则是更好的选择。例如,Mac OS和iPhone都使用GL,许多Windows游戏也支持OpenGL。
由于OpenGL是经过长时间和“委员会”开发的,它带有很多附加功能 - API中有一些旧选项在今天并不真正相关。这就是OpenGL ES存在的原因之一;它剔除了所有无用的东西,使得目标平台更容易。
另一方面,DirectX由Microsoft控制,因此它具有更“现代”的感觉(它基于COM组件,因此高度面向对象)。微软经常更新API以适应新硬件。
有时候你没有选择的余地(例如iPhone无法运行DX)。但通常只是个人偏好/经验的问题。如果你是一个长期从事图形编程的人,你往往对两者都非常熟悉...
更新: 自从我写这篇文章以来,情况发生了很大变化。如今在Mac上鼓励使用Metal,尽管还有使用Vulkan和"熔解"兼容层的选择。
我们也有Vulkan和DX12。这些都是底层API,非常复杂,但可以完全控制。个人而言,我仍然建议先学习OpenGL,然后再转向DX12/Vulkan/Molten,如果你需要控制权或者别无选择。目前最好的“跨平台”解决方案是Vulkan。

感谢您的详细解释,这让我对它们有了非常清晰的认识。 - Frank V

3

Direct3D和OpenGL是用于实现相同目的的不同API。

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

如果可能的话,您应该始终在Windows上使用D3D,因为多线程和驱动程序支持不稳定。例如,以netbooks为例,它们支持D3D的HLSL ShaderModel 2,但不支持GLSL的等效物,它们只支持GL的固定管道。


3

在这种情况下,谷歌是你的朋友......有一篇不错的维基百科文章对比了两个库:

OpenGL和Direct3D的比较

如果我没记错的话,OpenGL是在Direct3D出现之前的开放实现。然后Direct3D基于OpenGL......但很快就分道扬镳成为自己独立的库。

更新

看来我的记忆已经不可靠了......

Direct3D是独立于OpenGL开发的。


Direct3D并不是基于OGL开发的(尽管它们都使用了相同的渲染基本模型)。在5.0版本之前,D3D的历史确实很奇怪(http://en.wikipedia.org/wiki/Direct3D#History)。 - Michael
嘿 - 在Direct3D成为Direct3D之前,我曾经参与过它的开发;-) 绝对不是基于OpenGL... - Steve Lacey

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