Рендеринг графики в C # - PullRequest
       54

Рендеринг графики в C #

7 голосов
/ 12 сентября 2008

Есть ли другой способ визуализации графики в C # помимо GDI + и XNA ?

(Для разработки редактора карты тайлов.)

Ответы [ 6 ]

8 голосов
/ 12 сентября 2008

SDL.NET - это решение, которое я полюбил. Если вам нужно 3D поверх него, вы можете использовать Tao.OpenGL для рендеринга внутри него. Это быстрый, промышленный стандарт ( SDL , то есть) и кроссплатформенный.

3 голосов
/ 12 сентября 2008

Да, я написал элемент управления Windows Forms, который оборачивает DirectX 9.0 и обеспечивает прямое управление на пиксельном уровне поверхности видео.

На самом деле я написал еще один пост о переполнении стека, спрашивая, есть ли другие лучшие подходы: Небезопасный C # и указатели для 2D-рендеринга, хорошо это или плохо?

Несмотря на относительно высокую производительность, для него требуется небезопасный параметр компилятора, поскольку он использует указатели для эффективного доступа к памяти. Отсюда и причина этого более раннего поста.

Это высокий уровень необходимых шагов:

  1. Загрузите DirectX SDK.
  2. Создание нового проекта C #
Windows Forms и ссылка на установленный Сборка Microsoft DirectX. Инициализация нового объекта DirectX Device с параметрами представления. (окно, обратная буферизация и т. д.) вам требуется. Создайте устройство, позаботившись о том, чтобы записать поверхность «Шаг» и текущий режим отображения (бит на пиксель). Когда вам нужно что-то отобразить, Lock задний буфер поверхности и сохранить возвращенный указатель на начало поверхности память. Используйте арифметику указателя, рассчитайте фактическую позицию пикселя в данные на основе шага поверхности, бит на пиксель и фактическая координата пикселя x / y. В моем случае для простоты я придерживаюсь 32 bpp, что означает установку пикселя так же просто, как: * (surfacePointer + (y * pitch + x)) = Color.FromARGB (255,0,0); По окончании рисования Unlock задняя буферная поверхность. Представьте поверхность. При необходимости повторите процедуру, начиная с шага 5. Имейте в виду, что при таком подходе вы должны быть очень осторожны при проверке текущего режима отображения (шаг и биты на пиксель) целевой поверхности. Также вам необходимо иметь стратегию для изменения размера окна или изменения формата экрана во время работы вашей программы.

2 голосов
/ 12 сентября 2008
  • Управляемый DirectX (пространство имен Microsoft.DirectX) для более быстрой трехмерной графики. Это надежная оболочка .NET поверх DirectX API, которая идет с небольшим ударом по производительности для создания объектов .NET и сортировки. Если вы не пишете полнофункциональный современный 3D-движок, он будет работать нормально.

  • Window Presentation Foundation (WPF) (пространство имен Windows.Media) - лучший выбор для 2D-графики. Также имеет ограниченные возможности 3D. Предназначен для замены Windows Forms на векторную, аппаратно ускоренную независимую от разрешения структуру. Очень удобно, поддерживает несколько разновидностей пользовательских элементов управления, ресурсов, привязки данных, событий и команд ... также имеет несколько WTF. Скорость обычно выше, чем у GDI и медленнее, чем у DirectX, и сильно зависит от того, как вы работаете (видимо, что-то работает в 60 раз быстрее после разумного переписывания). Нам удалось реализовать 3 экрана 1280x1024, заполненных индикаторами в реальном времени, графиками и графиками на одном (и не лучшем) ПК.

1 голос
/ 12 сентября 2008

Вы можете попробовать заглянуть в WPF, используя Visual Studio и / или Expression Blend. Я не уверен, насколько вы изощренны, но он должен уметь работать с простым редактором. Проверьте это MSDN Article для получения дополнительной информации.

0 голосов
/ 30 марта 2009

Каир является опцией. В настоящее время я переписываю свое картографическое программное обеспечение, используя GDI + и Cairo. В числе прочих функций - генератор карт тайлов.

0 голосов
/ 13 ноября 2008

Вы можете заглянуть в графическую библиотеку Cairo . Проект Mono имеет привязки для C #.

...