我曾经利用WPF的三维功能进行学习和实现过一些项目,我发现它非常强大。目前我也在学习DirectX 11,相比于使用WPF的3D类来说,使用DirectX 11非常棘手。虽然我只是用WPF 3D来完成一些基础工作,但我的问题是:
对于像三维建模工具、游戏引擎和三维模拟等高级应用,WPF 3D是否足够好以成为DirectX和OpenGL的替代品?
如果有其他同类产品,请也一并提及。
好问题。答案是取决于!!
更有用的是,我可以说:几年前,我开发了一个基于OpenGL的CAD风格3D渲染应用程序。这必须显示高达1,000,000个对象的油井CAD模型,并允许用户缩放到细节,或者缩小、移动对象等... 我可以肯定地说,WPF不适合这种类型的应用程序,因为它会太慢。这个应用程序是使用C++/CLI开发的,并从.NET GUI(工具栏、窗口)桥接到C++到OpenGL(渲染表面),即使这样也会由于thunking而导致性能下降,而原生的C++/OpenGL应用程序则无此问题。所以,如果你想要最高的性能,你不能打败使用DirectX或OpenGL的本机C++。
WPF可以为简单的三维应用程序提供高性能的三维图形和流畅的交互,例如三维图表表面或三维旋转木马,甚至是三维CAD模型查看器,只要模型相对简单。一旦对象数量开始增加,您会注意到渲染引擎无法处理它 - 这就是您需要切换到允许直接访问GPU的渲染引擎的时候。 对于半路上的解决方案(托管+DirectX),请尝试SharpDX。这基本上是Managed DirectX的开源实现,非常强大和多功能。管理与本机C ++相比的性能损失很小(约5%),并且当正确完成时,Managed DirectX可以非常高效。
最后,你在WPF 3D中想做什么?只是出于兴趣还是你有一个具体的项目要实现,并想知道它是否合适?
有两种3D图形模型: 1. 流水线或无限循环方法(用于3D游戏,3D CAD系统中的高难度和具有10万个及以上物体-网格的系统) 2. 智能抽象模型WPF3D,具有经典的OOP支持,没有任何OnDraw,OnPaint 方法。正确使用WPF的Media3D方法非常重要,所以最重要的是没有任何OnDraw,OnPaint。
您必须分析应用程序类型和功能并进行选择。
关于WPF 3D并不适用于大多数简单应用程序,这并不是一个很正确的观点,但适用于完全托管的OOP对象。例如,请查看我网站上的屏幕截图 TIMO Structural CAE
这是完全托管的3D WPF应用程序。
D3DImage
控件,允许将DirectX内容直接呈现在您的应用程序上。您可以使用DirectX本身或类似SlimDX之类的托管包装器向此表面进行渲染。我发现后者非常好,因为它支持DirectX版本9、10和11,并且是一个相当轻量级的包装器,因此几乎可以以相同的方式使用大量的DirectX API。