代码之家  ›  专栏  ›  技术社区  ›  Aurelien Ribon

WPF与XNA将渲染数千个精灵

  •  7
  • Aurelien Ribon  · 技术社区  · 14 年前

    我需要呈现出成千上万个椭圆,它们用线条相互连接。 在WPF应用程序中呈现它的最佳方式(性能方面)。WPF油画比XNA油画差很多吗?

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

    谢谢, 奥尔氏留置权

    4 回复  |  直到 14 年前
        1
  •  2
  •   bitbonk    14 年前

    如果做得好,您可以在WPF渲染中获得相当高的性能,这有一个优点,即您不必忍受WPF-XNA互操作的痛苦。如果使用WPF的低级渲染API,例如 CompositionTarget.Rendering DrawingContext . 你也可以利用新的 Cached Composition feature 在.NET 4中。还有很多,就以这个为起点。

        2
  •  2
  •   Peter Lillevold Rene    14 年前

    我已经成功地将xna与wpf“集成”,首先将xna场景呈现给winforms控件,然后使用 the WindowsFormsHost element .

        3
  •  1
  •   ChrisF    14 年前

    我刚刚发现 this article 关于代码项目:

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

    This thread 在Microsoft论坛上有一个关于此的讨论,其中一个海报说明:

    然后,得出的结论是,您可以让XNA呈现为WPF形式,但必须避免使用Game和GraphicsDeviceManager类,因为后者需要运行游戏实例(构造函数定义为新的GraphicsDeviceManager(游戏游戏)),并且游戏类不提供定义其呈现窗口的任何方法。S.

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

        4
  •  1
  •   SiN    14 年前

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