WPF与XNA一起渲染成千上万的精灵

时间:2010-05-03 14:34:37

标签: c# wpf xna

我需要渲染数千个用线条相互链接的椭圆。 在WPF应用程序中呈现它的最佳方式(在性能方面)是什么。 WPF Canvas绘画比XNA绘画更糟糕吗?

实际上,隐藏的问题是:是否可以在WPF主机内进行一些xna渲染?我看到一些使用无边框xna窗口覆盖的示例,但没有原生解决方案......

谢谢, 的Aurelien

4 个答案:

答案 0 :(得分:2)

如果做得好,你可以在WPF渲染中获得一些相当高的性能,这样做的好处是你不必采取WPF-XNA互操作的痛苦。如果使用WPF的低级渲染API(例如CompositionTarget.RenderingDrawingContext),则可以渲染(并设置动画)大量的视觉效果。您还可以利用.net 4.0中的新Cached Composition feature。还有更多只是以此为出发点。

答案 1 :(得分:2)

我已经成功地将XNA与WPF“集成”,首先将XNA场景渲染为WinForms控件,然后使用the WindowsFormsHost element在WPF中托管该控件。

答案 2 :(得分:1)

我刚刚在CodeProject上找到了this article

  

我们希望将我们的XNA场景集成到WPF用户界面中,就像我们集成画布或任何小部件一样。但是在XNA中查看3D场景的最佳方法是将其合并到一个窗口中。使用WinForm可以获得任何WPF控件的句柄是不可能的。然后诀窍是重写围绕Game类的XNA框架的一部分。目标是从Panel继承一个新的Game类(在我们的例子中是Canvas),以便能够将它包含在WPF可视化树中。面板的可视界限将是XNA场景的可视区域。然而,我们刚刚说过,不可能获得不从Window继承的可视控件的句柄。那么我们如何使用XNA显示3D呢​​?我们只需在面板上方显示一个没有边框的窗口。当应用程序具有焦点并且面板可见时,此窗口将始终位于顶部,并且在此情况下将隐藏。同样,当面板不可见时,我们将暂停游戏的活动。

Microsoft论坛上的

This thread对此进行了讨论,一张海报说明:

  

然后,结论是您可以将XNA渲染到WPF表单中而没有任何问题,但您必须避免使用Game和GraphicsDeviceManager类,因为后者需要运行Game实例(构造函数被定义为新的GraphicsDeviceManager(游戏游戏) ))和Game类没有提供任何方法来定义它呈现的窗口。

所以它看起来是可能的,但需要在XNA方面做一些工作。

答案 3 :(得分:1)

请注意,XNA应用程序不会在没有至少1.1着色器GPU的系统上运行。