首页 文章

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

提问于
浏览
7

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

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

谢谢,Aurélien

4 回答

  • 1

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

  • 2

    通过首先将XNA场景渲染到WinForms控件,然后使用the WindowsFormsHost element在WPF中托管该控件,我已成功通过WPF实现了"integrated" XNA .

  • 2

    我刚刚在CodeProject上找到this article

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

    微软论坛上的This thread对此进行了讨论,一张海报说明:

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

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

  • 1

    但请注意,XNA应用程序 will not 在没有至少1.1着色器GPU的系统上运行 .

相关问题