Работа с двухмерной графикой в игре DirectX

Applies to Windows and Windows Phone

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

Двухмерная графика является подмножеством трехмерной графики, которая обрабатывает двухмерные примитивы или точечные рисунки. В более общем смысле, она не использует координату Z тем способом, которым ее может использовать игра с трехмерной графикой, так как игра обычно ограничена плоскостью x-y. Иногда она использует технологии трехмерной графики для создания визуальных компонентов, а также обычно ее проще разрабатывать. Если вы новичок в сфере игр, вам будет гораздо проще начать с двухмерных игр, а при разработке двухмерной графики вы овладеете работой с DirectX.

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

Краткий обзор основных понятий

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

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

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

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

Вопросы разработки

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

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

Настройте ваш графический процессор таким образом, чтобы он поддерживал широкий диапазон разрешений, от 1024x600 до 1920x1080 (или выше). Аудитория будет благодарна вам, если ваша игра будет поддерживать основное разрешение их ЖК-мониторов, особенно при использовании двухмерной графики.

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

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

 

 

Показ:
© 2014 Microsoft