Вопрос

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

(За разработку редактора тайловых карт.)

Это было полезно?

Решение

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

Другие советы

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

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

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

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

  1. Загрузите DirectX SDK.
  2. Создайте новый C# Формы Windows Проект и ссылка на установленную сборку Microsoft DirectX.
  3. Инициализируйте новый объект устройства DirectX с параметрами презентации (Windowed, задняя буферизация и т. Д.), Вам требуется.
  4. Создайте устройство, заботясь о записи поверхности «шага» и режиме отображения тока (биты на пиксель).
  5. Когда вам нужно что-то отобразить, Lock Поверхность задних чередов и хранит возвращенный указатель на начало памяти поверхности.
  6. Используйте арифметику указателя, рассчитайте фактическую позицию пикселя в данных на основе поверхностного шага, битов на пиксель и фактической координаты пикселя X/Y.
  7. В моем случае для простоты я придерживаюсь 32 бит/с, то есть настроить пиксель так же просто, как:*(surfacePointer + (y * шаг + x))=Color.FromARGB(255,0,0);
  8. Закончив рисунок, Unlock задняя буферная поверхность.Представьте поверхность.
  9. При необходимости повторите шаг 5.

Имейте в виду, что при таком подходе вам нужно быть очень осторожным при проверке текущего режима отображения (шаг и количество бит на пиксель) целевой поверхности.Также вам понадобится стратегия, позволяющая справляться с изменением размера окна или формата экрана во время работы вашей программы.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top