Геометрия
Модуль 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
. Изменение пути через эту обёртку помечает изображение изменённым. Таким образом, если в этот момент другой поток уже работает с данными изображения, оно будет скопировано и только после — изменено.