Поделиться через


2D-графика для игр DirectX

Мы обсудим использование 2D-растровой графики и эффектов и их использования в игре.

Трехмерная графика — это подмножество трехмерной графики, которая занимается примитивами 2D или растровыми изображениями. В целом, они не используют z-координаты таким образом, как трехмерная игра может, так как игра игры обычно ограничена плоскости x-y. Иногда они используют трехмерные графические методы для создания своих визуальных компонентов, и они, как правило, проще разрабатывать. Если вы не знакомы с играми, 2D игра является отличным местом для начала, и 2D-разработка графики может быть хорошим местом для вас, чтобы получить дескриптор на DirectX.

Вы можете разрабатывать трехмерные игровые графики в DirectX с помощью Direct2D или Direct3D или некоторых сочетаний. Многие из более полезных классов для разработки игр 2D находятся в Direct3D, таких как класс Sprite . Direct2D — это набор API, предназначенных в основном для пользовательских интерфейсов и приложений, требующих поддержки примитивов рисования (например, кругов, линий и плоских многоугольников). Учитывая это, он по-прежнему предоставляет мощный и исполнительный набор классов и методов для создания игровой графики, особенно при создании наложений игр, интерфейсов и интерфейсов (HUDs) - или для создания различных 2D-игр, от простых до достаточно подробных. Наиболее эффективный подход при создании двухd-игр, однако, заключается в использовании элементов из обеих библиотек, и это способ, которым мы будем подходить к разработке двухD-графики в этом разделе.

Краткий обзор понятий

До появления современной трехмерной графики и оборудования, поддерживающего его, игры были в основном 2D, и многие из их графических методов включали перемещение блоков памяти вокруг - обычно массивы цветных данных, которые будут преобразованы или преобразованы в пиксели на экране в 1:1.

В DirectX трехмерная графика входит в состав трехмерного конвейера. Существует гораздо большее разнообразие разрешений экрана и графического оборудования, и ваш 2D-графический модуль должен иметь возможность поддерживать их без значительного изменения точности.

Ниже приведены некоторые основные понятия, с которыми вы должны ознакомиться при запуске 2D-разработки графики.

  • Пиксели и координаты растра. Пиксель — это одна точка на экране растрового экрана и имеет собственную пару координат (x, y), указывающую его расположение на дисплее. (Термин "пиксель" часто используется взаимозаменяемо между физическими пикселями, состоящими из дисплея и адресных элементов памяти, используемых для хранения цветов и альфа-значений пикселей, прежде чем они отправляются на экран.) Растр обрабатывается API как прямоугольная сетка элементов пикселей, которая часто имеет соответствие 1:1 с физической сеткой пикселей дисплея. Системы координат растра начинаются с верхнего левого угла, а пиксель — (0, 0) в верхнем левом углу сетки.
  • Растровые рисунки (иногда называемые растровыми рисунками) — это графические элементы, представленные в виде прямоугольной сетки значений пикселей. Спрайты — вычисляемые массивы пикселей, управляемые независимо от растра, — это один из типов растрового рисунка, обычно используемый для активных символов или фоновых независимых анимированных объектов в игре. Различные кадры анимации для спрайта представлены в виде коллекций растровых изображений, называемых "листами" или "пакетами". Фоновые изображения — это более крупные растровые объекты, которые имеют одинаковое разрешение или больше, чем у растра экрана, и часто служат фоном для игрового поля игры.
  • Векторная графика — это графики, использующие геометрические примитивы, такие как точки, линии, круги и многоугольники для определения 2D-объектов. Они представлены не как массивы пикселей, но как математические уравнения, определяющие их в 2D-пространстве. Они не обязательно имеют корреспонденцию 1:1 с сеткой пикселей дисплея и должны быть преобразованы из системы координат, которую вы отрисовали в растровой системе координат дисплея.
  • Перевод заключается в том, что вы принимаете точку или вершину и вычисляете новое расположение в той же системе координат.
  • Масштабирование происходит при увеличении или уменьшении объекта по указанному коэффициенту масштабирования. С помощью векторного изображения вы сжимаете и увеличиваете вершины компонентов; с растровым изображением вы увеличиваете элементы пикселей или уменьшаете их. При использовании растровых изображений данные пикселей теряются при уменьшении размера изображения и увеличиваются отдельные пиксели, когда изображение масштабируется ближе. Для последнего можно использовать операции интерполяции цвета пикселей, такие как двулинейная фильтрация, чтобы сгладить суровые границы цвета между увеличенными пикселями.
  • Поворот происходит при повороте объекта по заданной оси или осям. С векторным изображением вершины геометрии умножаются на матрицу поворота, чтобы получить вращаемую вершину; с изображением растрового изображения можно использовать различные алгоритмы, каждый из которых имеет меньшую или большую степень точности в результатах. Как и при масштабировании и переводе, существуют API специально для операций поворота.
  • Преобразование заключается в том, что вы принимаете одну точку или вершину в одной системе координат и вычисляете соответствующую точку или вершину в другой системе координат. К ним относятся перевод, масштабирование и поворот, а также другие операции вычисления координат.
  • Вырезка заключается в удалении частей растровых изображений или геометрии, которые не находятся в области отображения или скрыты объектами с более высоким приоритетом представления.
  • Буфер кадра — это область в памяти , часто в памяти самого графического оборудования, которая содержит окончательную карту растра, которую вы будете рисовать на экране. Цепочка буферов представляет собой коллекцию буферов, где вы рисуете в заднем буфере и, когда изображение будет готово, его переключите на передний и отобразите его.

Рекомендации по проектированию

Разработка трехмерной графики — отличный способ привыкнуть к разработке с помощью Direct3D и позволит вам тратить больше времени на другие критически важные аспекты разработки игр: аудио, элементы управления и механики игры.

Всегда рисуйте в буфер обратно. Рисование непосредственно в буфер кадра означает, что изображение будет отображаться при получении сигнала для отображения (обычно каждые 1/60 секунды), даже если операция рисования не завершена!

Создайте графический модуль для поддержки хорошего выбора разрешений с 1024x600 до 1920x1080 (или более поздней версии). Ваша аудитория благодарит вас, если вы поддерживаете собственное разрешение монитора LCD, особенно с 2D-графикой.

Отличное произведение искусства будет вашим величайшим активом, когда дело доходит до визуальных элементов. Хотя растровая графика может не содержать удар трехмерных фотореалистических визуальных элементов с использованием последних функций модели шейдера, отличные изображения с высоким разрешением могут часто передавать как много или больше стиля и личности - и с гораздо меньшей производительности штраф.

Справочные материалы