我需要渲染数千个相互连接的椭圆和线段。在WPF应用程序内进行渲染,哪种方法(从性能角度)最好?WPF画布绘制比XNA绘制差很多吗?
实际上,隐藏的问题是:是否可能在WPF主机中进行一些xna渲染?我看到一些例子使用了无边框的xna窗口叠加,但没有本地解决方案...
谢谢, Aurélien
实际上,隐藏的问题是:是否可能在WPF主机中进行一些xna渲染?我看到一些例子使用了无边框的xna窗口叠加,但没有本地解决方案...
谢谢, Aurélien
我成功地将XNA与WPF“集成”起来,首先将XNA场景渲染到WinForms控件中,然后使用WindowsFormsHost元素在WPF中托管该控件。
BasicEffect
,还没有尝试过纹理。但我假设将其通过WinForms添加的额外开销应该是恒定的,无论XNA端发生了什么。 - Peter LillevoldHwndHost
需要非托管代码权限,但值得研究。 - Peter Lillevold我在CodeProject上刚刚找到了这篇文章:
我们想要以与集成画布或任何小部件相同的方式将XNA场景集成到WPF用户界面中。但是,在XNA中查看3D场景的最佳方式是将其合并到窗口中。无法像WinForm一样获取任何WPF控件的句柄。然后,技巧就在于重新编写围绕Game类的XNA框架的一部分。目标是从Panel(在我们的情况下为Canvas)继承一个新的Game类,以便将其包含在WPF可视树中。面板的视觉边界将是XNA场景的查看区域。但是,我们刚才说过,无法获得不继承自Window的视觉控件的句柄。那么我们该如何使用XNA显示3D呢?我们将简单地在面板上方显示一个没有边框的窗口。当应用程序具有焦点且面板可见时,此窗口将始终处于顶部,并在此情况下隐藏。同样,在面板不可见时,我们将停止游戏的活动。
这个帖子在微软论坛上讨论了这个问题,其中一位发帖者说:
那么,结论是你可以将XNA渲染到WPF表单中而不会出现任何问题,但你必须避免使用Game和GraphicsDeviceManager类,因为后者需要一个Game实例来运行(构造函数被定义为new GraphicsDeviceManager(Game game)),而Game类没有提供任何定义它所渲染窗口的方法。
所以看起来是可能的,但需要在XNA方面进行一些工作。
需要注意的是,XNA应用不能在没有至少1.1着色器GPU的系统上运行。