Статьи

Документация

Дополнительно

Геометрия

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

Основные типы векторной геометрии

  • Vec2 (SPVec2.h) — двумерный вектор, общие функции:
    • isCounterClockwise — проверка, расположены ли три точки в порядке против часовой стрелки
    • isLineIntersect — проверка прямых на пересечение
    • isSegmentOverlap — проверка отрезков на пересечение
    • getIntersectPoint — получение точки пересечения
    • add — сумма векторов
    • subtract — разность векторов
    • scale — умножение векторов
    • project — проецирование вектора на другой
    • rotate — поворот вектора
    • normalize — нормализация вектора
    • length — получение длины
    • distance — получение расстояния между векторами
    • getAngle — получение угла между вектором и основной осью
    • dot — результат скалярного произведения
    • cross — результат псевдоскалярного произведения
    • lerp — линейная интерполяция векторов
    • lengthSquared — получение квадрата длины (для исключения квадратного корня)
    • distanceSquared — получение квадрата расстояния между векторами (для исключения квадратного корня)
    • fuzzyEquals — сравнение с погрешностью
  • Vec3 (SPVec3.h) — трёхмерный вектор
    • add — сумма векторов
    • subtract — разность векторов
    • scale — умножение векторов
    • normalize — нормализация вектора
    • lerp — линейная интерполяция векторов
    • dot — скалярное произведение
    • cross — векторное произведение
    • angle — угол между векторами
    • length — длина вектора
    • distance — расстояние между векторами
    • lengthSquared — квадрат длины
    • distanceSquared — квадрат расстояния
    • fuzzyEquals — сравнение с погрешностью
    • xy — возврат первых двух компонент
  • Vec4 (SPVec4.h) — четырёхмерный вектор
    • add — сумма векторов
    • subtract — разность векторов
    • scale — умножение векторов
    • angle — угол между векторами
    • dot — скалярное произведение
    • length — длина вектора
    • distance — расстояние между векторами
    • lengthSquared — квадрат длины
    • distanceSquared — квадрат расстояния
    • fuzzyEquals — сравнение с погрешностью
    • xy — возврат первых двух компонент
    • xyz — возврат первых трёх компонент
  • Mat4 (SPMat4.h) — четырёхмерная матрица трансформации
    • add — сумма матриц
    • multiply — произведение матриц
    • subtract — разность матриц
    • negate — отрицание матрицы
    • transpose — транспонирование матрицы
    • rotate — поворот матрица по кватерниону или эйлеровым углам
    • translate — смещение матрицы
    • transformVector — умножение вектора на матрицу
  • Quaternion (SPQuaternion.h) — структура кватерниона
  • Padding (SPPadding.h) — структура четырёхстороннего отступа
  • Size2 (SPGeometry.h) — структура двумерного размера
  • Size3 (SPGeometry.h) — структура трёхмерного размера
  • Extent2 (SPGeometry.h) — структура двумерного целочисленного размера
  • Extent3 (SPGeometry.h) — структура трёхмерного целочисленного размера
  • Rect (SPGeometry.h) — структура двумерного прямоугольника

Работа с цветом

Цветовые типы представлены в заголовке SPColor.h.

  • Color3B — трёхкомпонентый цвет, 8 бит на компонент
  • Color4B — четырёхкомпонентный цвет, 8 бит на компонент
  • Color4F — четырёхкомпонентный цвет, 32-битное число с плавающей точкой на компонент. Ускорен за счёт SIMD.
  • Color — генерализованный именованный цвет, четырёхкомпонентный, 8 бит на компонент, создан для ускорения цветового прототипирования за счёт именованных цветов и возможности градуированно изменять яркость.
    • getColorByName — читает цвет из стандартных цветовых форматов HTML либо по прямому имени.
  • ColorHCT — цвет в формате HCT.

SIMD

Интерфейс для SIMD-операций определён в SPSIMD.h. Интерфейс определяет основной SIMD-интерфейс на основе текущей платформы, и использует интерфейс SSE через библиотеку SIMDe в случае, если для текущей платформы своей реализации нет.

Для геометрических типов используется 128-битные операции (4 32-битных значения с плавающей точкой)

На текущий момент реализованы функции:

  • mul — умножение
  • div — деление
  • add — сумма
  • sub — разность
  • rsqrt — обратный квадратный корень
  • addMat4 — сумма четырёхмерных матриц
  • subtractMat4 — разность четырёхмерных матриц
  • multiplyMat4 — произведение четырёхмерных матриц
  • negateMat4 — отрицание четырёхмерной матрицы
  • transposeMat4 — транспонирование четырёхмерной матрицы
  • transformVec4 — умножение вектора на матрицу
  • crossVec3 — вычисление векторного произведения
  • isVec2BboxIntersects — комплексная функция вычисления пересечения отрезков

GLSL-совместимые функции

Заголовок SPGlsl.h предназначен для создания функций, которые могут быть скомпилированы в GLSL и в исходном коде SDK. При компиляции GLSL должен быть определён макрос SP_GLSL.

Реализованные функции (см документацию в GLSL):

  • abs
  • all
  • any
  • clamp
  • ceil
  • cross
  • distance
  • dot
  • equal
  • floor
  • fract
  • greaterThan
  • greaterThanEqual
  • inversesqrt
  • isinf
  • isnan
  • length
  • lessThan
  • lessThanEqual
  • max
  • min
  • normalize
  • sign
  • step
  • trunc
  • none
  • notEqual
  • round

Векторная графика

Модуль stappler_vg отвечает за работу с векторной графикой.

Система предоставляет типы:

  • PathParams (SPVectorPathData.h) — параметры рисования пути
  • PathData (SPVectorPathData.h) — структура для хранения данных путей. Работает с обоими интерфейсами памяти
  • PathWriter (SPVectorPathData.h) — унифицированный интерфейс для записи путей. Предоставляется, если открыть путь на запись.
  • VectorPath (SPVectorPath.h) — объект для хранения путей с подсчётом ссылок
  • VectorImageData (SPVectorImage.h) — структура данных векторного изображения из нескольких путей
  • VectorImage (SPVectorImage.h) — основной тип векторного изображения

Данные пути (PathData) представляет из себя набор команд для рисования и метаданные, характеризующие способ рисования и цвет. Используются команды, по параметризации аналогичные стандарту SVG:

  • MoveTo — перемещение на точку
  • LineTo — прямая линия в точку
  • QuadTo — квадратичная кривая Безье до точки
  • CubicTo — кубическая кривая Безье до точки
  • ArcTo — эллиптическая дуга до точки

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

Для управления путями, находящимися внутри изображения, создана обёртка VectorPathRef. Изменение пути через эту обёртку помечает изображение изменённым. Таким образом, если в этот момент другой поток уже работает с данными изображения, оно будет скопировано и только после — изменено.