DirectXorOpenGL如果你正在用C#编写你的下一个3D图形密集型应用程序,比如3D建模和动画软件,哪个更好?如果我们认为C#是平台独立的,那么OpenGL看起来很诱人,但性能等方面呢?由于使用的语言是C#,因此性能非常重要。编辑:您还可以考虑SlimDX和TAO、OpenTK、csGL等。与图形子系统相关的性能在托管代码中还不错。SlimDX会在每次调用DirectX时为完整的本机代码支付小额罚款,但这并不严重。实际惩罚取决于调用-对DrawRrimitive的调用通常比对SetRenderState的调用昂贵得多,因此您最终会在SetRenderState调用上损失更多百分比。SlimDX包含一个经过调优的数学库,通常性能非常好,但您必须小心一点。即使使用像NProf这样的垃圾工具进行分析也可以非常快速地突出显示这些问题,因此修复起来并不太困难。总的来说,如果我们考虑通过D3D渲染的通用、完全优化的C++和C#代码,C#版本可能在C++版本的10-15%之内。但这很难做到;考虑一下通过使用C#可以节省多少时间可以应用到更高级别的图形优化,如果您必须使用C++构建整个东西,您可能根本没有时间。即使你设法在C++中获得额外的10%,它也会在几个月内迅速缩小到5%,此时新一轮的硬件将比以往更快地撕掉你的应用程序代码。我知道我会选择什么——这就是我开始编写SlimDX的原因。OpenTK具有类似的性能特征,但需要注意的是他们的数学库在某些地方非常慢。这是我与他们讨论过的一个实现错误,希望能在很长一段时间内得到修复。我推荐OpenGL的原因如下:-跨平台-OpenGLES目前在移动平台上尤为重要OpenGL着色语言实现在本质上优于DirectX着色器。OpenGL更容易学习,因为可以用很少的代码行设置基本渲染从哲学上讲,OpenGL被设计为通用渲染引擎,而DirectX始终面向游戏,因此OpenGL似乎更适合您的问题。OpenGL是一种稳定的技术,已经存在了一段时间,并将继续如此。DirectX更依赖于微软的想法,如果微软觉得它可以在一瞬间被弃用。也就是说,您的系统要求和个人偏好可能会建议采用任何一种方式,因为这两种方法都是可靠的实现。不利的一面是,OpenGL非常适合状态机,并且很难适应OO,尽管这当然不是不可能的。编辑:添加以澄清我的评论,即OpenGL着色器模型本质上优于DirectX。这是因为DirectX着色器是在开发时针对通用GPU模型编译的,而OpenGL着色器保留为源代码并在运行时由OpenGL驱动程序编译。因此,理论上,驱动程序编写者可以利用GPU的特定(或更新的,当运行旧程序时)功能,并创建比DirectX着色器运行速度更快的编译代码。这是一个小问题,但可能非常重要。Direct3D和OpenGL之间的性能差异接近于零。两者的特征集不是一对一的映射,但是很接近。OpenGL的主要特点是跨平台支持。过去,OpenGL在性能特性方面落后,但事情终于得到了解决。例如,考虑可绑定制服,在OpenGL获得类似机制之前,Direct3D拥有更快的机制。除了有时支持不同的功能集外,没有区别。因此,除非您打算使用最新的GPU功能,否则我建议您使用OpenGL。可以肯定地说,OpenGL在与性能相关的功能方面并没有落后太多。顺便说一句,只有采取某些预防措施,C#和.NET才是独立于平台的。这是我给你的诚实建议:两者都做。建议我会权衡哪一天有更多工具可用于完成程序,然后出于性能原因,我会利用另一天来确保在不同系统上的最佳性能。关于辩论的想法让我们回顾一下:程序的性能取决于很多因素,主要是您的努力(应用程序的代码)和给定计算机上的驱动程序。图形API是您的应用程序与GPU通信的一种方式,因此您非常依赖于为已安装的GPU实现给定驱动程序的效果。我选择的Direct3D有时在某些图形卡上比OpenGL更快,这是因为图形供应商及其驱动程序。DirectX提供了大量的工具来加速开发。我知道它的学习曲线非常陡峭,但请允许我提醒您,您恰好是一名程序员。我什至敢说一个非常好的。结论因此,您必须能够按照自己的方式工作并慢慢开发自己的框架,利用这两个API,从而使您能够测试和实施您想要的任何程序。此致,MossaNovaMerhi如果您不喜欢XNA,您可以使用SlimDX。与XNA不同,SlimDX支持DirectX10。借助OpenGL,您可以在WindowsXP和Linux上使用“DirectX10功能”,例如几何着色器。使用GLUT可以在几分钟内启动并运行演示应用程序。我使用过OpenGL和DirectX。我认为性能非常相似。我更喜欢OpenGL的编程模型——尤其是它对转换的处理,以及它对拾取操作的直接支持。我不喜欢每次升级操作系统时MS都不断重写相同功能的方式,我认为OpenGL可以保护你。然而,两者都很古怪,您需要花费大量时间确保它与托管应用程序框架(无论是Windows还是其他)良好交互。我觉得OpenGL不像XNA那样适合纯OO环境。也就是说,如果您真的关心跨平台兼容性,那么后端的内容应该无关紧要。将应用程序的业务逻辑设计为独立于渲染后端。您应该能够插入OpenGL渲染对象,然后将其换成XNA渲染器,没问题。这不仅增加了您的潜在客户群(通过支持两者),而且还使您的应用程序的设计更加出色。另一个小问题是,DX不应在.NET中使用,因为ManagedDirectX已被弃用;使用XNA。这取决于您打算定位的平台。如果您只需要使用XNAforWindows进行跨平台工作,也许其他人已经使用mono和openGL完成了一些工作-我假设您打算制作图形软件而不是游戏,所以拥有像winForms这样的框架对你们都是非常有用的UI控件。您可能想看看IrrLicht引擎,它同时具有C++和.NetAPI,并且它完全与图形API无关(这意味着您可以使用相同的代码来执行OpenGL或DirectX,程序员甚至不必知道是哪一个您正在使用)您可能还想查看SlimDX,它是XNADirectX的一种非常快速、轻量级的开源替代品,将在Windows上提供更好的视频驱动程序支持,因为这是MSFT用来认证卡的。我们发现在Windows上使用更便宜的卡时,OpenGL支持不足、崩溃或完全错误。您可能想看看这个:http://groups.google.com/group/microsoft.public.win32.programmer.directx.managed/browse_thread/thread/1fc097147796e15b目前不支持托管API,因此可能支持OpenGL你最好的选择选择,除非你想使用XNA。根据您可能想要支持的其他平台,例如移动设备或XBox360,这可以帮助您决定使用哪个API。就性能而言,它们几乎完全相同,您的代码和设计将是速度的主要因素。此外,这两个API都很好(与5年前相比,当时dx领先)。在这种情况下,一种选择是根据您的理念和每个API背后的理念进行选择。有些人可能需要专注于业务;卖软件,换钱,做生意。来自金钱可以快速增长的商业环境,dx可能非常适合这种情况,您可以在其中获得有关Microsoft功能和开发工具等的有趣交易。另一方面,OpenGL是一个开放标准,它意味着人们可以讨论/评估并为改进标准API做出贡献,这将有利于社会保障。这更符合科学方法,其目标可能是发表研究、发布免费软件、建立社区并从全球多平台开发人员那里获得反馈。他们是对软件演进的不同看法,我认为两者各有优势,我们仍然可以在两个不同背景的API之间进行选择,但做的事情相似。DirectX有一个托管API,允许您以“本机”C#对象的形式访问DirectXAPI。与OpenGL相比,这是一个巨大的优势。以上就是C#学习教程:DirectX或OpenGL分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
