Menu

Спрайтовый движок

Anonymous Nickolay Sosnovikov
Attachments
fonts2.png (97091 bytes)

Слой спрайтов

Менеджер спрайтов способен создавать слои спрайтов shLayer. Слой спрайтов - это объект, способный рисовать различные двумерные объекты. Они могут рисоваться как в трёхмерную сцену так и после неё или в текстуру. Текстурный слой создаёт очередь команд на отрисовку, порядок которой можно определить. Каждому спрайтовому слою относится своя камера.
Объект, с которым работает спрайтовый слой - это shSpriteBase. Спрайты рисуются в порядке добавления, их можно динамически создавать и удалять. Для смены порядка рисования есть метод replaceSprite.

Разновидности двумерных объектов

Все двумерные объекты унаследованы от объекта shSpriteBase, обладающего функционалом смещения, вращения и масштабирования, а также возможностью задавать цвет, шейдер, дополнительные текстуры, плоскости отсечения и так далее.
Помимо стандартных функций, свойственных shSpriteBase, у каждой разновидности объектов есть свои особенности:

Название Описание Атлас Уникальные функции
sh2DAnimation комплексный объект из составных спрайтов с анимациями, загружаемый из XML да смешивание кадров, локальное отсечение
sh2DPicture одиночный спрайт с текстурой да смена текстурных координат
sh2DTiles текстурный спрайт рисуемый много раз да
sh2DShape произвольный двумерный объект нет построение линий и эллипсов
sh2DFont шрифт с текстом только у XML

Помимо стандартных, пользователь может создать свои, унаследовавшись от shSpriteBase и определив функцию рисования.

Формат вершины для спрайтов

Формат вершины для спрайтов достаточно тяжёлый: он хранит трёхмерную координату (float), три текстурных координаты (half), два 32-битных 4-компонентных цвета (byte) и вектор из четырёх дистанций для мягких плоскостей отсечения (half) - суммарно 40Байт.

struct shVertexSprite
{
        shVector3   position;
        shFixed2    texCoord1, texCoord2;
        uint32_t    colour1, colour2;
}

Формат спрайтовых XML-анимаций

Спрайтовые анимации задаются через XML-файлы.

Тэги:

  • program - шейдер из стандартного набора, перечень ниже
    - по умолчанию ("MIX")

  • position - центровая точка масштабирования и вращения спрайтов
    - задаётся 2-я значениями float, по умолчанию (0.0, 0.0)

  • rotation - вращение спрайтов вокруг центра в радианах
    - по умолчанию (0.0)

  • scale - масштаб спрайтов
    - задаётся 2-я значениями float, по умолчанию (1.0, 1.0)

  • colour - цвет спрайтов
    - задаётся 4-я значениями float, по умолчанию (1.0, 1.0, 1.0, 1.0)

  • params - дополнительные параметры для шейдера
    - задаётся 2-я значениями float, по умолчанию (0.0, 0.5)

  • speed - скорость воспроизведения анимаций
    - по умолчанию (1.0)

  • hideonstop - время исчезновения спрайтов после остановки анимации
    - по умолчанию (0.0)
    - исчезновение спрайтов включается если время исчезновения больше нуля

  • sprite - массив спрайтов, хранит внутри одиночные спрайты или массивы (атласы)

    • start (аттрибут) - начальный индекс, по умолчанию (0)
    • end (аттрибут) - последний индекс, по умолчанию (0)
    • texture (нода) либо atlas (нода) либо array (нода) - массив спрайтов
    • path (аттрибут) - путь до текстуры
    • first (аттрибут) - первый индекс, по умолчанию (0)
    • colour (аттрибут) - цвет кадра анимации (действует на все текстуры кадра), плавно перетекает во время воспроизведения
    • offset (нода) - смещение спрайтов, по умолчанию (0.0, 0.0)
    • scale (нода) - масштаб спрайтов, по умолчанию (1.0, 1.0)
    • coord (нода) - текстурные координаты, по умолчанию (0.0, 0.0, 1.0, 1.0)
  • animation - анимация по ключам
    • name (аттрибут) - название анимации
    • multiply (аттрибут) - множитель времени, по умолчанию (1.0)
    • frame (нода) - добавить кадр, с аттрибутами key и delta
    • framearray (нода) - добавить массив кадров, с аттрибутами start, end и delta
  • start - запуск анимации по умолчанию
    • name (аттрибут) - название анимации, по умолчанию ("auto")
    • state (аттрибут) - состояние запуска, по умолчанию ("forward")
  • advance - сброс последующих индексов для спрайтов и анимаций в ноль

Формат XML-шрифтов

Тэги:

  • space - ширина пробела, по умолчанию (0.0)

  • glyph - символ

    • index (аттрибут) - текстовый индекс символа
    • path (аттрибут) - путь до текстуры
    • offset (нода) - смещение символа, по умолчанию (0.0, 0.0, 1.0)
    • coord (нода) - текстурные координаты, по умолчанию (0.0, 0.0, 1.0, 1.0)
  • array - массив символов
    • index (аттрибут) - массив индексов символов
    • path (аттрибут) - путь до текстур
    • first (аттрибут) - первый индекс текстур, по умолчанию (0)
    • offset (нода) - смещение символов, по умолчанию (0.0, 0.0, 1.0)
    • coord (нода) - текстурные координаты, по умолчанию (0.0, 0.0, 1.0, 1.0)
  • animation - анимация по ключам
    • name (аттрибут) - название анимации
    • multiply (аттрибут) - множитель времени, по умолчанию (1.0)
    • frame (нода) - добавить кадр, с аттрибутами key и delta
    • framearray (нода) - добавить массив кадров, с аттрибутами start, end и delta
  • frame - открыть новый кадр

Стандартные шейдеры для спрайтов

Название Описание
NO_TEXTURE рисование с игнорированием текстуры
LUMINANCE красный канал как яркость
LUMINANCE_ALPHA красный канал как яркость, зелёный канал как альфа
ALPHA_ONLY рисование с игнорированием цвета текстуры
SPRITE рисование спрайта в обычном режиме, контрастность и цветность задаются методом setParams()
SPRITE_YUVA рисование спрайта с преобразованием цвета из формата видео (подходит для рисования видеотекстур)
SPRITE_TEXTURED умножение на дополнительную текстуру (координаты второй текстуры управляются из слоя спрайтов)
SPRITE_TEXTURED_FOG то же, что SPRITE_TEXTURED, но параметры (setParams) управляют влиянием текстуры и умножением на неё
SPRITE_EMISSIVE 10-кратная яркость в режиме свечения
MIX рисование спрайтов со смешиванием двух текстур из двух кадров анимации
MIX_TEXTURED MIX с умножением на дополнительную текстуру (координаты второй текстуры управляются из слоя спрайтов)
MIX_TEXTURED_FOG то же, что MIX_TEXTURED, но параметры (setParams) управляют влиянием текстуры и умножением на неё
MIX_EMISSIVE MIX с 10-кратной яркостью в режиме свечения
RED_ALPHA использует красный канал для управления прозрачностью
RED_A_BUMP RED_ALPHA с выпуклым рельефом, источник света управляется методом setLight()
RED_A_EMBOSS RED_ALPHA с вдавленным рельефом, источник света управляется методом setLight()
RED_A_SHADOW RED_ALPHA с тенью, отступ задаётся методом setLight()
RED_A_STROKE RED_ALPHA с обводкой вокруг объекта
FONT_TEXTURED особое текстурирование для шрифтов
LAYER_ACUM для рисования массива текстур (подходит для blur эффекта)
DRAW_DEPTH для рисования карты глубины

Примеры работы разных шейдеров в режимах RED_ALPHA для TTF-шрифтов:
foobar


Related

Wiki: Оглавление
Wiki: Home

MongoDB Logo MongoDB