7 votes

WPF vs XNA pour le rendu de milliers de sprites

Je dois rendre des milliers d'ellipses reliées entre elles par des lignes. Quelle serait la meilleure façon (en termes de performances) d'effectuer ce rendu dans une application WPF ? La peinture WPF Canvas est-elle bien pire que la peinture XNA ?

En fait, la question cachée est : est-il possible de faire du xna-rendering dans un hôte WPF ? J'ai vu quelques exemples qui utilisaient une fenêtre xna sans bordure en superposition, mais aucune solution native...

Merci, Aurélien

2voto

bitbonk Points 14057

Si cela est bien fait, vous pouvez obtenir des performances assez élevées dans le rendu WPF, ce qui présente l'avantage de ne pas avoir à subir les inconvénients de l'interopérabilité WPF-XNA. Vous pouvez rendre (et animer) une très grande quantité de visuels si vous utilisez les API de rendu de bas niveau de WPF telles que CompositionTarget.Rendering y DrawingContext . Vous pouvez également profiter de la nouvelle Fonction de composition en cache dans .net 4.0. Il y en a beaucoup plus, mais prenez ceci comme point de départ.

2voto

Peter Lillevold Points 20689

J'ai réussi à " intégrer " XNA à WPF en rendant d'abord une scène XNA à un contrôle WinForms, puis en hébergeant ce contrôle dans WPF à l'aide de la fonction l'élément WindowsFormsHost .

1voto

ChrisF Points 74295

Je viens de trouver cet article sur CodeProject :

Nous voulons intégrer notre scène XNA dans une interface utilisateur WPF de la même manière que nous intégrons un canvas ou tout autre widget. Mais la meilleure façon de visualiser une scène 3D dans XNA est de l'incorporer dans une fenêtre. Il est impossible d'obtenir le handle d'un contrôle WPF comme on peut le faire avec un WinForm. L'astuce consiste donc à réécrire une partie du framework XNA qui tourne autour de la classe Game. Le but est d'hériter d'une nouvelle classe Game à partir de Panel (dans notre cas, un Canvas) pour pouvoir l'inclure dans l'arbre visuel WPF. Les limites visuelles du panneau seront la zone de visualisation de la scène XNA. Or, nous venons de dire qu'il n'est pas possible d'obtenir un handle sur un contrôle visuel qui n'hérite pas de Window. Comment afficher la 3D avec XNA alors ? Nous allons simplement afficher une fenêtre sans bordure juste au-dessus du panneau. Cette fenêtre sera toujours au dessus lorsque l'application a le focus et que le panneau est visible, elle sera donc cachée dans ce cas. De même, lorsque le panneau n'est pas visible, nous arrêterons l'activité du jeu.

Ce fil sur les forums de Microsoft, il y a une discussion à ce sujet et un poster déclare :

En conclusion, il est possible d'obtenir un rendu XNA dans un formulaire WPF sans problème, mais il faut éviter d'utiliser les classes Game et GraphicsDeviceManager, car cette dernière nécessite une instance de Game pour fonctionner (le constructeur est défini comme new GraphicsDeviceManager(Game game)) et la classe Game ne permet pas de définir la fenêtre sur laquelle le rendu est effectué.

Il semble donc que ce soit possible, mais que cela nécessite un certain travail du côté de XNA.

1voto

SiN Points 1795

Sachez toutefois que les applications XNA ne sera pas fonctionner sur des systèmes sans GPU d'au moins 1.1 shader.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X