当前位置:  开发笔记 > 编程语言 > 正文

DirectX或OpenGL

如何解决《DirectX或OpenGL》经验,为你挑选了4个好方法。

如果您在C#中编写下一个3D图形密集型应用程序(如3D建模和动画软件),哪一个会是更好的选择?

如果我们认为C#是独立于平台的,那么OpenGL看起来很诱人,但性能等等呢?

由于使用的语言是C#,因此性能非常重要.

编辑:你也可以考虑SlimDX和TAO,OpenTK,csGL等.



1> Cruachan..:

我推荐OpenGL的原因如下: -

    跨平台 - OpenGLES目前与移动平台特别相关

    OpenGL着色语言实现本质上优于DirectX着色器.

    OpenGL有点容易学习,因为可以用很少的代码行设置基本渲染

    哲学上,OpenGL被设计为通用渲染引擎,而DirectX总是以游戏为导向,因此OpenGL似乎更适合您的问题.

    OpenGL是一种稳定的技术,已经存在了一段时间,并将继续如此.DirectX更依赖于微软的想法,如果MS觉得它可以在瞬间被弃用.

也就是说,您的系统要求和个人偏好可能会以任何方式提示,因为两种方法都是可靠的实现.在缺点方面,OpenGL非常适合状态机,并且可能很难适应OO,尽管这当然不是不可能的.

编辑:添加以澄清我对OpenGL着色器模型的评论本质上优于DirectX.这是因为DirectX着色器是在开发时针对通用GPU模型编译的,而OpenGL着色器作为源代码保存,并在运行时由OpenGL驱动程序编译.因此,从理论上讲,驱动程序编写者可以利用GPU的特定(或运行旧程序时更新)功能,并创建可以比DirectX着色器运行更快的编译代码.这是一个小问题,但可能非常重要.


因为理论上后来通过视频驱动器对GLSL的编译意味着它可以最佳地使用卡的硬件,而早期编译器的HLSL必须使用标准的机器模型.
1. OpenGL ES在这里并不重要,因为没有办法在任何流行的OGLES平台上运行.NET代码.2.使用HLSL中使用的技术模型,我发现GLSL没有什么优势 - 介意支持这一点?3.在.NET领域开始使用OGL要困难得多.看看XNA.[...]

2> Ronny Vinden..:

Direct3D和OpenGL之间的性能差异接近于零.两者的特征集不是一对一映射,但它们很接近.OpenGL的主要专业是跨平台支持.


这仍然有效吗?DX总是似乎在我的机器上胜出...

3> Promit..:

托管代码中与图形子系统相关的性能并不差.在每次调用DirectX时,SlimDX对完全本机代码的支付略有损失,但这并不严重.实际的惩罚取决于调用 - 对DrawRrimitive的调用总体上比调用SetRenderState要昂贵得多,所以百分比方式你最终会在SetRenderState调用上失去更多.SlimDX包含一个通常表现非常好的调优数学库,尽管你必须要小心一点.即使使用像NProf这样的junker工具,分析也可以非常快速地突出显示这些内容,因此修复并不困难.

总的来说,如果我们考虑通过D3D进行渲染的通用,完全最优的 C++和C#代码,C#版本可能在C++版本的10-15%之内.但这很难实现; 考虑通过在C#中工作节省多少时间,你可以将其应用于更高级别的图形优化,如果必须用C++构建整个事物,那么你可能根本就没有时间.即使你设法在C++中获得额外的10%,它也会在几个月内迅速缩小到5%,这时新一轮硬件会比以往更快地撕掉你的应用程序代码.我知道我会选择什么 - 这就是我开始写SlimDX的原因.

OpenTK具有类似的性能特征,但需要注意的是他们的数学库在某些地方相当慢.这是我与他们讨论过的一个实现错误,希望能在很长时间内修复.



4> Eduard - Gab..:

OpenGL在过去与性能特征有关,但最终得到了修复.举一个例子,考虑可绑定的制服,其中Direct3D在OpenGL获得类似的机制之前具有更快的机制.除了有时支持不同的功能集之外,没有区别.

因此,除非您打算使用最新的GPU功能,否则我建议您使用OpenGL.可以肯定地说,OpenGL在与性能相关的功能方面落后的地方并不多.

顺便说一下,只有采取某些预防措施,C#和.NET才是独立于平台的.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有