Direct3D应该在Windows中使用OpenGL吗?

时间:2010-06-30 04:15:01

标签: c++ c opengl directx

由于微软通常对Direct3D有点偏见,在Direct3D中使用VBO的场景会比在OpenGL中使用VBO的相同场景更快,还是因为它取决于显卡驱动程序会不一样? 感谢

9 个答案:

答案 0 :(得分:20)

性能方面,假设GPU驱动程序不错,总体上没有差异。

OpenGL中的某些操作本身比DirectX9更快,尽管DX10可以解决这个问题。

但使用外部硬件时,一个好的经验法则是它不是您正在使用的决定性能的API

编写网络代码时,瓶颈就是网络适配器,无论你的套接字代码是用.NET编写,用普通的Berkeley套接字编写,还是用一些Python库,都无关紧要。

编写使用GPU的代码时,GPU是限制因素。 DirectX和OpenGL之间的最大区别在于,可能需要一个函数调用或两个以上的函数来完成某些任务 - 而且其性能成本几乎不存在。在任何一种情况下,GPU上发生的情况都是相同的,因为这是由您的GPU驱动程序决定的,并且因为OpenGL和DirectX都尽可能高效。

有正当理由偏爱这两种API。

DirectX具有更好的工具支持。微软做得非常好。使用PIX等工具可以更轻松地调试和优化DirectX代码。 Microsoft还提供了辅助库D3DX,它提供了许多常用功能的高效实现。

OpenGL的优势在于它不依赖于特定的操作系统。 DirectX9仅适用于Windows。 DX10及以上版本仅适用于Vista及以上版本。

OpenGL适用于已编写OpenGL驱动程序的任何操作系统。

在Windows上,情况有时候有点尴尬。 Windows本身只附带OpenGL的古老实现。 (相信v1.1的XP,和1.5的Vista / 7)。

因此,Windows上的OpenGL应用程序依靠GPU供应商为其驱动程序提供更新的实现。 ATI和NVidia确实提供了非常好的实现,所以它不是一个很大的问题。英特尔的OpenGL驱动程序通常在质量和支持功能方面都落后。

答案 1 :(得分:3)

查看一些相关问题 -

OpenGL still better than Direct3D for non-games?

OpenGL or Direct3D for a new Windows game project? Or something else?

微软目前对Direct3D的偏见很大。默认情况下,许多低端英特尔集成卡不附带OpenGL驱动程序,或者如果它们只支持OpenGL的旧版本/规格,如1.2 / 1.4。如果您的目标是此类计算机(英特尔拥有50%的图形市场份额),则很难利用更高级的功能,如着色器(OpenGL 1.5中可用)。然而,您将能够在Direct3D中使用类似的着色器,因为这些低端卡的驱动程序更好。当然,Direct3D仅适用于Windows。

另一方面,如果你真的不需要使用着色器,你可以使用Direct3D或OpenGL。虽然我会更倾向于OpenGL。它是跨平台的,除了微软之外,每个人都支持它。在OpenGL中,有些东西,比如画线(各种宽度)也容易得多。 OpenGL还内置了一个拾取模式,它比光线拾取更加强大(特别是如果你想选择点和线)。

第三种选择是使用抽象API或现有引擎,它可以呈现给OpenGL和Direct3D。

答案 2 :(得分:2)

通常情况大致相同。曾经有一段时间DirectX比OpenGL具有明显的速度优势,但对于大多数实际用途来说,这是古老的历史。

答案 3 :(得分:0)

如果您愿意,可以自己试试。 Ogre3D是一个很棒的3D库,当你开始时,你可以选择是否要使用DirectX或OpenGL。如果我没记错的话(我使用它已经有3到3年了),他们的帧速率和其他数据甚至在他们的例子中 ,你可以看到哪一个更快。

答案 4 :(得分:0)

实际上,这实际上取决于您正在进行的项目类型。

如果您想将其移植到其他平台 - 请勿使用DirectX。如果您想在Windows上进行完全控制和快速开发的库,那么DirectX就是您的选择。如果您发现图形引擎具有您需要的所有功能 - 请使用它。它比使用普通的DX或OpenGL更容易,特别是如果它支持工具链(关卡编辑器,从3D建模器导入模型,......)。

如果您想学习DX,请选择DX或SlimDX。如果你想学习OpenGL,请选择OpenGL。

答案 5 :(得分:0)

请注意,Windows上的GL驱动程序通常非常不稳定。 OEM通常在Windows下使用GL驱动程序做很少的工作。足以让最新的id游戏运行良好。如果你采取不同的行动,那将是一种痛苦。

你应该做的是在2之间写一个抽象层并实现两个后端。这为您提供了两全其美的体验。 Windows下DirectX的稳定性和OpenGL的跨平台性。它还为您提供了巨大的优势,如果您愿意,可以在其中添加一些未来的渲染后端。

同样值得注意的是,X-Box和DirectX的区别在于,无论如何你都需要为这两个平台分别做一个单独的后端。

就我个人而言,我的引擎支持DX9,DX10,Open GL3,OpenGL ES2.1,我很高兴拥有抽象层:)

编辑:根据评论,我会指出nVidia驱动程序是最低级别的Windows OpenGL驱动程序。几乎所有其他制造商都有问题。甚至nVidia也有很多问题。很多时候,根据我的经验,你最终会与使用DirectX的“正常工作”(tm)的驱动程序进行斗争。

答案 6 :(得分:0)

使用中间件。如果您想要具有许多功能的东西(加载3D模型和动画等),Ogre会很好。如果您只想要一个简单的包装器,SDL就很好。

在回答你的实际问题时,它完全归功于司机。这在制造商之间有所不同。我的理解是,目前,GL并没有得到所有主要公司(nVidia,ATI,Intel)的良好支持,这是一个很大的问题。

我个人使用中间件,但主要依靠测试/开发D3D。

答案 7 :(得分:0)

我会选择DirectX。它正在快速改进和发展 - 比OGL委员会可以移动的速度快得多。什么扩展地狱?

答案 8 :(得分:-4)

我曾经使用OpenGL,但现在我对探索DirectX世界感兴趣。原因是DX11的发布结束了Windows的长期战争。

Khronos集团很快发布OpenGL 4进行反击;遗憾的是,OGL4仍有一半的新功能缺失或落后;其中一些在创建灵活的3d框架方面至关重要。