【问题标题】:OpenGL and Direct3DOpenGL 和 Direct3D
【发布时间】:2009-06-09 20:40:08
【问题描述】:

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

【问题讨论】:

标签: opengl directx


【解决方案1】:

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

因为 OpenGL 是由“委员会”开发了很长时间的,所以它带有很多包袱 - API 有一些旧的选项,这些选项在今天并不真正相关。这就是 OpenGL ES 的原因之一。它消除了所有的垃圾,使目标平台更容易。

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

有时您没有选择的余地(例如 iphone 无法运行 DX)。但通常它只是归结为个人喜好/经验。如果您是一名长期的图形程序员,您往往对两者都非常熟悉......

【讨论】:

  • 感谢您的详细解释。这让我对两者有一个非常清晰的了解。
【解决方案2】:

在这种情况下,Google 是您的朋友...有一篇很好的 Wikipedia 文章对比了这两个库:

Comparison of OpenGL and Direct3D

如果没记错的话,OpenGL 是 Direct3D 出现之前的开放实现。 Direct3D 当时基于 OpenGL...但很快就分道扬镳并成为它自己独特的库。

更新

看来我的记忆力被击中了……

Direct3D 是独立于 OpenGL 开发的。

【讨论】:

  • Direct3D 并非基于 OGL(尽管它们都使用相同的基本模型进行渲染)。5.0 之前的 D3D 历史绝对是奇怪的 (en.wikipedia.org/wiki/Direct3D#History)。
  • 嘿 - 在 Direct3D 成为 Direct3D 之前我曾在 Direct3D 上工作过 ;-) 绝对不是基于 OpenGL...
【解决方案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 的固定管道。

【讨论】:

    猜你喜欢
    • 2010-12-29
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    相关资源
    最近更新 更多