繁体   English   中英

Direct3D应该在Windows中使用OpenGL吗?

[英]Should Direct3D be used over OpenGL in Windows?

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

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

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

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

在编写网络代码时,瓶颈就是网络适配器,如果你的套接字代码是用.NET编写的,普通的Berkeley套接字用C语言编写,或者使用某些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驱动程序通常在质量和支持功能方面都落后。

看一些相关的问题 -

对于非游戏,OpenGL仍然优于Direct3D?

OpenGL或Direct3D用于新的Windows游戏项目? 或者是其他东西?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

就个人而言,我会使用中间件,但主要针对D3D进行测试/开发。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM