Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF vs XNA可渲染数千个精灵_C#_Wpf_Xna - Fatal编程技术网

C# WPF vs XNA可渲染数千个精灵

C# WPF vs XNA可渲染数千个精灵,c#,wpf,xna,C#,Wpf,Xna,我需要渲染上千个用线相互连接的椭圆。 在WPF应用程序中呈现它的最佳方式(性能方面)是什么。WPF画布绘画是否比XNA绘画更糟糕 实际上,隐藏的问题是:是否可以在WPF主机内进行一些xna渲染?我看到了一些使用无边界xna窗口覆盖的示例,但没有本地解决方案 谢谢, Aurélien我刚刚在CodeProject上发现: 我们希望以与集成画布或任何小部件相同的方式将XNA场景集成到WPF用户界面中。但在XNA中查看3D场景的最佳方式是将其合并到窗口中。不可能像使用WinForm那样获得任何WPF控

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

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

谢谢, Aurélien

我刚刚在CodeProject上发现:

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

在Microsoft论坛上有一个关于此的讨论,其中一张海报上写道:

然后,得出的结论是,您可以将XNA渲染成WPF形式,但必须避免使用Game和GraphicsDeviceManager类,因为后者需要运行游戏实例(构造函数定义为new GraphicsDeviceManager(游戏))而且Game类没有提供任何方法来定义它渲染的窗口


因此,这看起来是可能的,但需要在XNA方面做一些工作。

如果做得好,您可以在WPF渲染中获得相当高的性能,其优点是您不必承受WPF-XNA互操作的痛苦。如果使用WPF的低级渲染API(如和),则可以渲染(并设置)大量视觉效果。您还可以利用.NET4.0中的新功能。还有很多,只是以此为出发点

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

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

我想这样做,但我听说在winform主机上的表演被压垮了。我猜这只是谣言,我必须测试这个假设。是的,这个假设必须经过测试:)我正在运行一个60k+三角形场景,性能可以接受。我正在使用
BasicEffect
并启用了一个光源和雾,还没有尝试纹理。但我假设,无论XNA端发生了什么,通过WinForms增加的开销都应该是恒定的。事实上,通过WinForms的渲染开销完全为零(与覆盖窗口相比)。在引擎盖下,WinForms方法和overlay窗口都为Direct3D提供了一个可拥有和使用的矩形屏幕区域。从技术上讲,调整和移动窗口的速度会慢一些,但实际上是无法检测到的。通过直接使用HwndHost为XNA获取HWND,有一种方法可以通过稍微少一些管道和没有WinForms依赖性来完成同样的事情,但如果您已经编写了WinForms解决方案,那么现在就没有理由放弃它。@Ray Burns:输入很好
HwndHost
虽然需要非托管代码权限,但可能值得研究。我想我会这样做,但我需要与每个椭圆进行一些用户交互,它们在ScrollViewer中呈现。实际上,我目前正在使用一个控件渲染椭圆,另一个控件渲染直线。这仅仅是一个原型,超过一百个椭圆的表现令人震惊。谢谢我想我会选择DrawingVisuals…DrawingVisuals比形状衍生控件(直线、椭圆)快得多,但对于动态内容,bitbonk的DrawingContext建议可以更快。