WPF 3D是复杂应用程序中DirectX和OpenGL的良好替代品吗?

Spe*_*ine 50 opengl directx 3d wpf graphics

我已经使用WPF的3D功能进行学习,并且在一些实现中,我发现它非常强大,而且我也在学习DirectX 11,与在WPF中使用3D类相比,它非常棘手.我只使用WPF 3D作为非常基本的东西,我的问题是:

WPF 3D是否同样适用于3D建模工具,游戏引擎和3D模拟等高级应用程序,以替代DirectX和OpenGL?

如果同一联赛中还有其他内容,请同时提及.

Dr.*_*ABT 56

好问题.答案取决于它!

在一个更有用的说明中,我可以这样说:几年前,我在OpenGL中开发了一个CAD风格的3D渲染应用程序.这必须显示具有多达1,000,000个物体的石油钻井平台的CAD模型,并允许用户直接放大细节,或缩小,移动物体等......我可以肯定地说WPF不适合这个应用程序的类型,因为它太慢了.此应用程序是使用C++/CLI开发的,并且从.NET GUI(工具栏,窗口)桥接到C++到OpenGL(渲染表面),甚至由于thunking引入了对本机C++/OpenGL应用程序的性能影响.因此,如果您想获得最高性能,则无法使用DirectX或OpenGL击败本机C++.

WPF可以为更简单的3D应用程序提供高性能的3D图形和流畅的交互性.例如,3D图表曲面或3D旋转木马,甚至3D CAD模型查看器,只要模型相当简单.一旦对象计数开始增加,您将注意到渲染引擎无法处理它 - 当您需要切换到允许直接访问GPU的渲染引擎时.

对于中途解决方案(托管+ DirectX),请尝试使用SharpDX.这基本上是Managed DirectX的开源实现,功能强大且功能多样.托管与本机C++的性能影响很小(约5%),如果做得好,托管DirectX可以非常高效.

我们所做的就是通过D3DImage将DirectX直接与WPF集成.我们在WPF 3D Chart Control中实现了这一点,它使用DirectX11进行绘图(而不是WPF3D).这直接从原生DirectX到WPF共享,但你可以用SharpDX获得同样好的结果,我们曾经在这里创建一个高速WPF绘图插件.

对于WPF3D的展示,我建议你试试这个链接.正如您所注意到的那样,WPF3D可以制作极具视觉吸引力且有时很复杂的例子,但您不会在那里找到任何1,000,000个对象石油钻井平台;)

最后,你想在WPF 3D中做什么?只是一个兴趣点,或者你有一个特定的项目来实现,并想知道它是否合适?

最好的祝福,

  • @SpeedBirdNine没问题.我建议查看这个链接http://helixtoolkit.codeplex.com/,因为它似乎在WPF 3D功能上有一个非常好的展示.最好的祝福 (3认同)

Ser*_*lov 9

有两种3D图形模型:1.流水线或无限循环方法(3D游戏,具有100.000以上物体的硬级 3D Cad系统- 网格)2.智能抽象模型WPF3D,经典支持OOP,无需任何OnDraw,OnPaint方法.正确使用WPF的Media3D方法非常重要.所以最重要的是没有任何OnDraw,OnPaint.

您必须分析您的应用程序类型和功能并选择.

对于大多数简单的应用程序而言,WPF 3D并不是那么正确,但是对于完全托管的OOP对象.例如,查看我的网站TIMO Structural CAE上的屏幕截图

它是完全托管的3D WPF应用程序.


Dan*_*ant 6

如果你真的想做一些复杂的事情,你实际上最好使用已建立的图形引擎(通常是为游戏开发),而不是直接使用DirectX或OpenGL.WPF 3D引擎提供了类似的抽象级别,但它具有非常小的功能集(如果你想要阴影,反射,折射,凹凸贴图,骨架动画等,你仍然需要非常努力地工作)

也就是说,我已经成功地将它用于内部3D模拟工具的可视化,并且它足以满足我的需求.即使在拥挤的场景下它也能表现得相当好,并且基本的照明支持足以清晰地显示几何图形.工作也很容易,这在我的书中是一个很大的优点(没有太多时间投资开发可视化.)