Менеджер спрайтов способен создавать слои спрайтов 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-файлы.
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 - массив спрайтов, хранит внутри одиночные спрайты или массивы (атласы)
space - ширина пробела, по умолчанию (0.0)
glyph - символ
| Название | Описание |
|---|---|
| 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-шрифтов:
