WPF против XNA для рендеринга тысяч спрайтов - PullRequest
7 голосов
/ 03 мая 2010

Мне нужно отрисовать тысячи эллипсов, связанных друг с другом линиями. Что было бы лучшим способом (с точки зрения производительности), чтобы сделать его внутри приложения WPF. Рисует ли WPF Canvas намного хуже, чем XNA?

На самом деле, скрытый вопрос: возможно ли выполнить рендеринг xna внутри хоста WPF? Я видел несколько примеров, в которых использовалось наложение окон xna без полей, но без собственного растворения ...

Спасибо, Орельен

Ответы [ 4 ]

2 голосов
/ 03 мая 2010

Если все сделано правильно, вы можете получить довольно высокую производительность при рендеринге WPF, которая имеет преимущество в том, что вам не нужно испытывать боль при взаимодействии WPF-XNA. Вы можете визуализировать (и анимировать) очень большое количество визуальных элементов, если используете низкоуровневые API рендеринга WPF, такие как CompositionTarget.Rendering и DrawingContext . Вы также можете воспользоваться новой функцией Cached Composition в .net 4.0. Есть еще много всего, просто возьмите это за отправную точку.

2 голосов
/ 04 мая 2010

Я успешно "интегрировал" XNA с WPF, сначала отобразив сцену XNA в элемент управления WinForms, а затем разместив этот элемент управления в WPF, используя элемент WindowsFormsHost .

1 голос
/ 12 мая 2010

Имейте в виду, однако, что приложения XNA не будут работать в системах без графического процессора не менее 1.1.

1 голос
/ 03 мая 2010

Я только что нашел эту статью на CodeProject:

Мы хотим интегрировать нашу сцену XNA в пользовательский интерфейс WPF так же, как мы интегрируем холст или любой виджет. Но лучший способ просмотреть 3D-сцену в XNA - это включить ее в окно. Невозможно получить дескриптор любого элемента управления WPF, как это можно сделать с помощью WinForm. Хитрость заключается в том, чтобы переписать часть фреймворка XNA, вращающегося вокруг класса Game. Цель состоит в том, чтобы унаследовать новый класс Game от Panel (в нашем случае Canvas), чтобы иметь возможность включать его в визуальное дерево WPF. Визуальные границы панели будут областью просмотра сцены XNA. Тем не менее, мы только что сказали, что невозможно получить дескриптор визуального элемента управления, который не наследуется от Window. Как тогда мы отображаем 3D с помощью XNA? Мы просто отобразим окно без рамки чуть выше панели. Это окно всегда будет сверху, когда приложение имеет фокус и панель видима и в этом случае будет скрыта. Точно так же, когда панель не видна, мы прекращаем активность игры.

В этой теме на форумах Microsoft обсуждается этот и один из авторов:

Затем, вывод заключается в том, что вы можете сделать рендеринг XNA в форму WPF без проблем, но вы должны избегать использования классов Game и GraphicsDeviceManager, так как последний требует запуска экземпляра Game (конструктор определяется как new GraphicsDeviceManager (Game game )) и класс Game не предоставляет никакого способа определения окна, в котором он рендерится.

Так что, похоже, это возможно, но требует некоторой работы на стороне уравнения XNA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...