Матричные функции RenderScript,Матричные функции RenderScript,Матричные функции RenderScript,Матричные функции RenderScript

Обзор

Эти функции позволяют манипулировать квадратными матрицами ранга 2x2, 3x3 и 4x4. Они особенно полезны для графических преобразований и совместимы с OpenGL.

Мы используем индекс, начинающийся с нуля, для строк и столбцов. Например, последний элемент rs_matrix4x4 находится в позиции (3, 3).

RenderScript использует матрицы со столбцами и векторы на основе столбцов. Преобразование вектора выполняется путем последующего умножения вектора, например (matrix * vector) , как это предусмотрено rsMatrixMultiply ().

Чтобы создать матрицу преобразования, которая выполняет два преобразования одновременно, умножьте две исходные матрицы, при этом первое преобразование будет правым аргументом. Например, чтобы создать матрицу преобразования, которая применяет преобразование s1, за которым следует s2, вызовите rsMatrixLoadMultiply(&combined, &s2, &s1) . Это происходит от s2 * (s1 * v) , что равно (s2 * s1) * v .

У нас есть два стиля функций для создания матриц преобразования: rsMatrixLoad Transformation и rsMatrix Transformation . Первый стиль просто сохраняет матрицу преобразования в первом аргументе. Последний изменяет уже существующую матрицу преобразования, так что новое преобразование происходит первым. Например, если вы вызываете rsMatrixTranslate () для матрицы, которая уже выполняет масштабирование, результирующая матрица при применении к вектору сначала выполнит перевод, а затем масштабирование.

Краткое содержание

Функции
rsExtractFrustumPlanes Вычисление усеченных плоскостей
rsIsSphereInFrustum Проверяет, находится ли сфера в пределах усеченных плоскостей.
rsMatrixGet Получить один элемент
rsMatrixInverse Инвертирует матрицу на месте
rsMatrixInverseTranspose Инвертирует и транспонирует матрицу на месте
rsMatrixLoad Загрузите или скопируйте матрицу
rsMatrixLoadFrustum Загрузите матрицу проекции усеченной пирамиды
rsMatrixLoadIdentity Загрузить идентификационную матрицу
rsMatrixLoadMultiply Умножить две матрицы
rsMatrixLoadOrtho Загрузите матрицу ортогональной проекции
rsMatrixLoadPerspective Загрузите матрицу перспективной проекции
rsMatrixLoadRotate Загрузите матрицу вращения
rsMatrixLoadScale Загрузите матрицу масштабирования
rsMatrixLoadTranslate Загрузить матрицу перевода
rsMatrixMultiply Умножить матрицу на вектор или другую матрицу
rsMatrixRotate Применение поворота к матрице преобразования
rsMatrixScale Примените масштабирование к матрице преобразования
rsMatrixSet Установить один элемент
rsMatrixПеревести Применить перевод к матрице преобразования
rsMatrixTranspose Транспонировать место матрицы

Функции

rsExtractFrustumPlanes : Вычисление усеченных плоскостей.

void rsExtractFrustumPlanes(const rs_matrix4x4 * viewProj, float4 * слева, float4 * справа, float4 * сверху, float4 * снизу, float4 * рядом, float4 * далеко); Добавлено на уровне API 24.
void rsExtractFrustumPlanes(const rs_matrix4x4 * viewProj, float4 * слева, float4 * справа, float4 * сверху, float4 * снизу, float4 * рядом, float4 * далеко); Удален из API уровня 24 и выше.
Параметры
просмотрПродж Матрица для извлечения самолетов.
левый Левый самолет.
верно Правый самолет.
вершина Верхний самолет.
нижний Нижняя плоскость.
около Рядом самолет.
далеко Дальний самолет.
да

Вычисляет 6 плоскостей усеченного конуса из матрицы проекции вида.

rsIsSphereInFrustum : проверяет, находится ли сфера в пределах усеченных плоскостей.

bool rsIsSphereInFrustum( float4 * сфера, float4 * влево, float4 * вправо, float4 * сверху, float4 * снизу, float4 * рядом, float4 * далеко);
Параметры
сфера float4, представляющий сферу.
левый Левый самолет.
верно Правый самолет.
вершина Верхний самолет.
нижний Нижняя плоскость.
около Рядом самолет.
далеко Дальний самолет.

Возвращает true, если сфера находится в пределах шести плоскостей усеченного конуса.

rsMatrixGet : получить один элемент

float rsMatrixGet(const rs_matrix2x2 * m, uint32_t col, uint32_t row);
float rsMatrixGet(const rs_matrix3x3 * m, uint32_t col, uint32_t row);
float rsMatrixGet(const rs_matrix4x4 * m, uint32_t col, uint32_t row);
Параметры
м Матрица, из которой извлекается элемент.
столбец Столбец извлекаемого элемента, отсчитываемый от нуля.
ряд Строка извлекаемого элемента, отсчитываемая от нуля.

Возвращает один элемент матрицы.

Внимание: порядок параметров столбца и строки может быть неожиданным.

rsMatrixInverse : инвертирует матрицу на месте.

bool rsMatrixInverse( rs_matrix4x4 * m);
Параметры
м Матрица для инвертирования.

Возвращает true, если матрица была успешно инвертирована.

rsMatrixInverseTranspose : инвертирует и транспонирует матрицу на месте.

bool rsMatrixInverseTranspose( rs_matrix4x4 * m);
Параметры
м Матрица для изменения.

Матрица сначала инвертируется, а затем транспонируется. Возвращает true, если матрица была успешно инвертирована.

rsMatrixLoad : загрузить или скопировать матрицу.

void rsMatrixLoad( rs_matrix2x2 * назначение, массив const float*);
void rsMatrixLoad( rs_matrix2x2 * назначение, const rs_matrix2x2 * источник);
void rsMatrixLoad( rs_matrix3x3 * назначение, массив const float*);
void rsMatrixLoad( rs_matrix3x3 * назначение, const rs_matrix3x3 * источник);
void rsMatrixLoad( rs_matrix4x4 * назначение, массив const float*);
void rsMatrixLoad( rs_matrix4x4 * назначение, const rs_matrix2x2 * источник);
void rsMatrixLoad( rs_matrix4x4 * назначение, const rs_matrix3x3 * источник);
void rsMatrixLoad( rs_matrix4x4 * назначение, const rs_matrix4x4 * источник);
Параметры
место назначения Матрица для установки.
множество Массив значений для установки матрицы. Эти массивы должны иметь длину 4, 9 или 16 чисел с плавающей запятой, в зависимости от размера матрицы.
источник Исходная матрица.

Установите элементы матрицы из массива чисел с плавающей запятой или из другой матрицы.

При загрузке из массива числа с плавающей запятой должны располагаться в порядке строк, т. е. первым должен быть элемент в row 0, column 0 , за которым следует элемент в row 0, column 1 и т. д.

Если загрузка из матрицы и источник меньше места назначения, остальная часть места назначения заполняется элементами единичной матрицы. Например, загрузка rs_matrix2x2 в rs_matrix4x4 даст:

м00 м01 0,0 0,0
м10 м11 0,0 0,0
0,0 0,0 1.0 0,0
0,0 0,0 0,0 1.0

rsMatrixLoadFrustum : Загрузите матрицу усеченной проекции.

void rsMatrixLoadFrustum( rs_matrix4x4 * m, плавать влево, плавать вправо, плавать внизу, плавать вверху, плавать рядом, плавать далеко);
Параметры
м Матрица для установки.
левый
верно
нижний
вершина
около
далеко

Создает матрицу усеченной проекции, преобразуя прямоугольник, определяемый шестью плоскостями отсечения left, right, bottom, top, near, far .

Чтобы применить эту проекцию к вектору, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

rsMatrixLoadIdentity : Загрузить идентификационную матрицу.

void rsMatrixLoadIdentity( rs_matrix2x2 * m);
void rsMatrixLoadIdentity( rs_matrix3x3 * m);
void rsMatrixLoadIdentity( rs_matrix4x4 * m);
Параметры
м Матрица для установки.

Установите элементы матрицы в единичную матрицу.

rsMatrixLoadMultiply : умножает две матрицы.

void rsMatrixLoadMultiply( rs_matrix2x2 * m, const rs_matrix2x2 * lhs, const rs_matrix2x2 * rhs);
void rsMatrixLoadMultiply( rs_matrix3x3 * m, const rs_matrix3x3 * lhs, const rs_matrix3x3 * rhs);
void rsMatrixLoadMultiply( rs_matrix4x4 * m, const rs_matrix4x4 * lhs, const rs_matrix4x4 * rhs);
Параметры
м Матрица для установки.
левая сторона Левая матрица продукта.
правый риск Правая матрица произведения.

Устанавливает m в матричное произведение lhs * rhs .

Чтобы объединить две матрицы преобразования 4x4, умножьте вторую матрицу преобразования на первую матрицу преобразования. Например, чтобы создать матрицу преобразования, которая применяет преобразование s1, за которым следует s2, вызовите rsMatrixLoadMultiply(&combined, &s2, &s1) .

Предупреждение. До версии 21 сохранение результата обратно в правую матрицу не поддерживается и приведет к неопределенному поведению. Вместо этого используйте rsMatrixMulitply. Например, вместо rsMatrixLoadMultiply (&m2r, &m2r, &m2l) используйте rsMatrixMultiply (&m2r, &m2l). rsMatrixLoadMultiply (&m2l, &m2r, &m2l) работает как положено.

rsMatrixLoadOrtho : Загрузите матрицу ортогональной проекции.

void rsMatrixLoadOrtho( rs_matrix4x4 * m, плавать влево, плавать вправо, плавать внизу, плавать вверху, плавать рядом, плавать далеко);
Параметры
м Матрица для установки.
левый
верно
нижний
вершина
около
далеко

Создает матрицу ортогональной проекции, преобразуя прямоугольник, идентифицируемый шестью плоскостями отсечения left, right, bottom, top, near, far в единичный куб с углом в (-1, -1, -1) и противоположным в (1, 1, 1) . (1, 1, 1) .

Чтобы применить эту проекцию к вектору, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

См. https://en.wikipedia.org/wiki/Orthographic_projection.

rsMatrixLoadPerspective : Загрузите матрицу перспективной проекции.

void rsMatrixLoadPerspective( rs_matrix4x4 * m, float fovy, плавающий аспект, плавающий рядом, плавающий далеко);
Параметры
м Матрица для установки.
фови Поле зрения в градусах по оси Y.
аспект Отношение х/у.
около Рядом с плоскостью отсечения.
далеко Дальняя отсекающая плоскость.

Создает матрицу перспективной проекции, предполагая симметричное поле зрения.

Чтобы применить эту проекцию к вектору, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

rsMatrixLoadRotate : загрузить матрицу вращения.

void rsMatrixLoadRotate( rs_matrix4x4 * m, float rot, float x, float y, float z);
Параметры
м Матрица для установки.
гнить Сколько поворотов нужно сделать, в градусах.
х X-компонент вектора, который является осью вращения.
й Компонент Y вектора, который является осью вращения.
я Z-компонент вектора, который является осью вращения.

Эта функция создает матрицу вращения. Ось вращения представляет собой вектор (x, y, z) .

Чтобы повернуть вектор, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

См. https://en.wikipedia.org/wiki/Rotation_matrix.

rsMatrixLoadScale : загрузить матрицу масштабирования.

void rsMatrixLoadScale( rs_matrix4x4 * m, float x, float y, float z);
Параметры
м Матрица для установки.
х Множественное для масштабирования компонентов x.
й Множественный для масштабирования компонентов y.
я Множественное для масштабирования компонентов z.

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

Чтобы масштабировать вектор, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

rsMatrixLoadTranslate : загрузить матрицу перевода.

void rsMatrixLoadTranslate( rs_matrix4x4 * m, float x, float y, float z);
Параметры
м Матрица для установки.
х Число, добавляемое к каждому компоненту x.
й Число, добавляемое к каждому компоненту y.
я Число, добавляемое к каждому компоненту z.

Эта функция создает матрицу перевода, в которой к каждому элементу вектора добавляется число.

Чтобы перевести вектор, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

rsMatrixMultiply : умножить матрицу на вектор или другую матрицу.

float2 rsMatrixMultiply(const rs_matrix2x2 * m, float2 in); Добавлено на уровне API 14.
float2 rsMatrixMultiply( rs_matrix2x2 * m, float2 in); Удален из API уровня 14 и выше.
float3 rsMatrixMultiply(const rs_matrix3x3 * m, float2 in); Добавлено на уровне API 14.
float3 rsMatrixMultiply(const rs_matrix3x3 * m, float3 in); Добавлено на уровне API 14.
float3 rsMatrixMultiply( rs_matrix3x3 * m, float2 in); Удален из API уровня 14 и выше.
float3 rsMatrixMultiply( rs_matrix3x3 * m, float3 in); Удален из API уровня 14 и выше.
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float2 in); Добавлено на уровне API 14.
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float3 in); Добавлено на уровне API 14.
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float4 in); Добавлено на уровне API 14.
float4 rsMatrixMultiply( rs_matrix4x4 * m, float2 in); Удален из API уровня 14 и выше.
float4 rsMatrixMultiply( rs_matrix4x4 * m, float3 in); Удален из API уровня 14 и выше.
float4 rsMatrixMultiply( rs_matrix4x4 * m, float4 in); Удален из API уровня 14 и выше.
void rsMatrixMultiply( rs_matrix2x2 * m, const rs_matrix2x2 * rhs);
void rsMatrixMultiply( rs_matrix3x3 * m, const rs_matrix3x3 * rhs);
void rsMatrixMultiply( rs_matrix4x4 * m, const rs_matrix4x4 * rhs);
Параметры
м Левая матрица продукта и матрица, которую нужно установить.
правый риск Правая матрица произведения.
в

Для варианта «матрица по матрице» устанавливает m в матричное произведение m * rhs .

При объединении двух матриц преобразования 4x4 с использованием этой функции результирующая матрица будет соответствовать выполнению сначала преобразования правой руки, за которым следует исходное преобразование m.

Для варианта «матрица на вектор» возвращает результат после умножения вектора на матрицу, т.е. m * in .

При умножении float3 на rs_matrix4x4 вектор расширяется с помощью (1).

При умножении float2 на rs_matrix4x4 вектор расширяется до (0, 1).

При умножении float2 на rs_matrix3x3 вектор расширяется с помощью (0).

Начиная с API 14, эта функция принимает константную матрицу в качестве первого аргумента.

rsMatrixRotate : применить поворот к матрице преобразования.

void rsMatrixRotate( rs_matrix4x4 * m, float rot, float x, float y, float z);
Параметры
м Матрица для изменения.
гнить Сколько поворотов нужно сделать, в градусах.
х X-компонент вектора, который является осью вращения.
й Компонент Y вектора, который является осью вращения.
я Z-компонент вектора, который является осью вращения.

Умножьте матрицу m на матрицу вращения.

Эта функция изменяет матрицу преобразования, чтобы сначала выполнить вращение. Ось вращения представляет собой вектор (x, y, z) .

Чтобы применить это комбинированное преобразование к вектору, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

rsMatrixScale : применить масштабирование к матрице преобразования.

void rsMatrixScale( rs_matrix4x4 * m, float x, float y, float z);
Параметры
м Матрица для изменения.
х Множественное для масштабирования компонентов x.
й Множественный для масштабирования компонентов y.
я Множественное для масштабирования компонентов z.

Умножьте матрицу m на матрицу масштабирования.

Эта функция изменяет матрицу преобразования, чтобы сначала выполнить масштабирование. При масштабировании каждый компонент вектора умножается на число. Это число может быть отрицательным.

Чтобы применить это комбинированное преобразование к вектору, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

rsMatrixSet : установить один элемент

void rsMatrixSet( rs_matrix2x2 * m, uint32_t col, uint32_t row, float v);
void rsMatrixSet( rs_matrix3x3 * m, uint32_t col, uint32_t row, float v);
void rsMatrixSet( rs_matrix4x4 * m, uint32_t col, uint32_t row, float v);
Параметры
м Матрица, которая будет изменена.
столбец Столбец устанавливаемого элемента, отсчитываемый от нуля.
ряд Строка элемента, начинающегося с нуля, для установки.
в Значение для установки.

Установите элемент матрицы.

Внимание: порядок параметров столбца и строки может быть неожиданным.

rsMatrixTranslate : применить перевод к матрице преобразования.

void rsMatrixTranslate( rs_matrix4x4 * m, float x, float y, float z);
Параметры
м Матрица для изменения.
х Число, добавляемое к каждому компоненту x.
й Число, добавляемое к каждому компоненту y.
я Число, добавляемое к каждому компоненту z.

Умножьте матрицу m на матрицу перевода.

Эта функция изменяет матрицу преобразования, чтобы сначала выполнить перевод. При переводе к каждому компоненту вектора добавляется число.

Чтобы применить это комбинированное преобразование к вектору, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

rsMatrixTranspose : Транспонировать место матрицы.

void rsMatrixTranspose( rs_matrix2x2 * m);
void rsMatrixTranspose( rs_matrix3x3 * m);
void rsMatrixTranspose( rs_matrix4x4 * m);
Параметры
м Матрица для транспонирования.

Транспонируйте матрицу m на место.

,

Обзор

Эти функции позволяют манипулировать квадратными матрицами ранга 2x2, 3x3 и 4x4. Они особенно полезны для графических преобразований и совместимы с OpenGL.

Мы используем индекс, начинающийся с нуля, для строк и столбцов. Например, последний элемент rs_matrix4x4 находится в позиции (3, 3).

RenderScript использует матрицы со столбцами и векторы на основе столбцов. Преобразование вектора выполняется путем последующего умножения вектора, например (matrix * vector) , как это предусмотрено rsMatrixMultiply ().

Чтобы создать матрицу преобразования, которая выполняет два преобразования одновременно, умножьте две исходные матрицы, при этом первое преобразование будет правым аргументом. Например, чтобы создать матрицу преобразования, которая применяет преобразование s1, за которым следует s2, вызовите rsMatrixLoadMultiply(&combined, &s2, &s1) . Это происходит от s2 * (s1 * v) , что равно (s2 * s1) * v .

У нас есть два стиля функций для создания матриц преобразования: rsMatrixLoad Transformation и rsMatrix Transformation . Первый стиль просто сохраняет матрицу преобразования в первом аргументе. Последний изменяет уже существующую матрицу преобразования, так что новое преобразование происходит первым. Например, если вы вызываете rsMatrixTranslate () для матрицы, которая уже выполняет масштабирование, результирующая матрица при применении к вектору сначала выполнит перевод, а затем масштабирование.

Краткое содержание

Функции
rsExtractFrustumPlanes Вычисление усеченных плоскостей
rsIsSphereInFrustum Проверяет, находится ли сфера в пределах усеченных плоскостей.
rsMatrixGet Получить один элемент
rsMatrixInverse Инвертирует матрицу на месте
rsMatrixInverseTranspose Инвертирует и транспонирует матрицу на месте
rsMatrixLoad Загрузите или скопируйте матрицу
rsMatrixLoadFrustum Загрузите матрицу проекции усеченной пирамиды
rsMatrixLoadIdentity Загрузить идентификационную матрицу
rsMatrixLoadMultiply Умножить две матрицы
rsMatrixLoadOrtho Загрузите матрицу ортогональной проекции
rsMatrixLoadPerspective Загрузите матрицу перспективной проекции
rsMatrixLoadRotate Загрузите матрицу вращения
rsMatrixLoadScale Загрузите матрицу масштабирования
rsMatrixLoadTranslate Загрузить матрицу перевода
rsMatrixMultiply Умножить матрицу на вектор или другую матрицу
rsMatrixRotate Применение поворота к матрице преобразования
rsMatrixScale Примените масштабирование к матрице преобразования
rsMatrixSet Установить один элемент
rsMatrixПеревести Применить перевод к матрице преобразования
rsMatrixTranspose Транспонировать место матрицы

Функции

rsExtractFrustumPlanes : Вычисление усеченных плоскостей.

void rsExtractFrustumPlanes(const rs_matrix4x4 * viewProj, float4 * слева, float4 * справа, float4 * сверху, float4 * снизу, float4 * рядом, float4 * далеко); Добавлено на уровне API 24.
void rsExtractFrustumPlanes(const rs_matrix4x4 * viewProj, float4 * слева, float4 * справа, float4 * сверху, float4 * снизу, float4 * рядом, float4 * далеко); Удален из API уровня 24 и выше.
Параметры
просмотрПродж Матрица для извлечения самолетов.
левый Левый самолет.
верно Правый самолет.
вершина Верхний самолет.
нижний Нижняя плоскость.
около Рядом самолет.
далеко Дальний самолет.
да

Вычисляет 6 плоскостей усеченного конуса из матрицы проекции вида.

rsIsSphereInFrustum : проверяет, находится ли сфера в пределах усеченных плоскостей.

bool rsIsSphereInFrustum( float4 * сфера, float4 * влево, float4 * вправо, float4 * сверху, float4 * снизу, float4 * рядом, float4 * далеко);
Параметры
сфера float4, представляющий сферу.
левый Левый самолет.
верно Правый самолет.
вершина Верхний самолет.
нижний Нижняя плоскость.
около Рядом самолет.
далеко Дальний самолет.

Возвращает true, если сфера находится в пределах шести плоскостей усеченного конуса.

rsMatrixGet : получить один элемент

float rsMatrixGet(const rs_matrix2x2 * m, uint32_t col, uint32_t row);
float rsMatrixGet(const rs_matrix3x3 * m, uint32_t col, uint32_t row);
float rsMatrixGet(const rs_matrix4x4 * m, uint32_t col, uint32_t row);
Параметры
м Матрица, из которой извлекается элемент.
столбец Столбец извлекаемого элемента, отсчитываемый от нуля.
ряд Строка извлекаемого элемента, отсчитываемая от нуля.

Возвращает один элемент матрицы.

Внимание: порядок параметров столбца и строки может быть неожиданным.

rsMatrixInverse : инвертирует матрицу на месте.

bool rsMatrixInverse( rs_matrix4x4 * m);
Параметры
м Матрица для инвертирования.

Возвращает true, если матрица была успешно инвертирована.

rsMatrixInverseTranspose : инвертирует и транспонирует матрицу на месте.

bool rsMatrixInverseTranspose( rs_matrix4x4 * m);
Параметры
м Матрица для изменения.

Матрица сначала инвертируется, а затем транспонируется. Возвращает true, если матрица была успешно инвертирована.

rsMatrixLoad : загрузить или скопировать матрицу.

void rsMatrixLoad( rs_matrix2x2 * назначение, массив const float*);
void rsMatrixLoad( rs_matrix2x2 * назначение, const rs_matrix2x2 * источник);
void rsMatrixLoad( rs_matrix3x3 * назначение, массив const float*);
void rsMatrixLoad( rs_matrix3x3 * назначение, const rs_matrix3x3 * источник);
void rsMatrixLoad( rs_matrix4x4 * назначение, массив const float*);
void rsMatrixLoad( rs_matrix4x4 * назначение, const rs_matrix2x2 * источник);
void rsMatrixLoad( rs_matrix4x4 * назначение, const rs_matrix3x3 * источник);
void rsMatrixLoad( rs_matrix4x4 * назначение, const rs_matrix4x4 * источник);
Параметры
место назначения Матрица для установки.
множество Массив значений для установки матрицы. Эти массивы должны иметь длину 4, 9 или 16 чисел с плавающей запятой, в зависимости от размера матрицы.
источник Исходная матрица.

Установите элементы матрицы из массива чисел с плавающей запятой или из другой матрицы.

При загрузке из массива числа с плавающей запятой должны располагаться в порядке строк, т. е. первым должен быть элемент в row 0, column 0 , за которым следует элемент в row 0, column 1 и т. д.

Если загрузка из матрицы и источник меньше места назначения, остальная часть места назначения заполняется элементами единичной матрицы. Например, загрузка rs_matrix2x2 в rs_matrix4x4 даст:

м00 м01 0,0 0,0
м10 м11 0,0 0,0
0,0 0,0 1.0 0,0
0,0 0,0 0,0 1.0

rsMatrixLoadFrustum : Загрузите матрицу усеченной проекции.

void rsMatrixLoadFrustum( rs_matrix4x4 * m, плавать влево, плавать вправо, плавать внизу, плавать вверху, плавать рядом, плавать далеко);
Параметры
м Матрица для установки.
левый
верно
нижний
вершина
около
далеко

Создает матрицу усеченной проекции, преобразуя прямоугольник, определяемый шестью плоскостями отсечения left, right, bottom, top, near, far .

Чтобы применить эту проекцию к вектору, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

rsMatrixLoadIdentity : Загрузить идентификационную матрицу.

void rsMatrixLoadIdentity( rs_matrix2x2 * m);
void rsMatrixLoadIdentity( rs_matrix3x3 * m);
void rsMatrixLoadIdentity( rs_matrix4x4 * m);
Параметры
м Матрица для установки.

Установите элементы матрицы в единичную матрицу.

rsMatrixLoadMultiply : умножает две матрицы.

void rsMatrixLoadMultiply( rs_matrix2x2 * m, const rs_matrix2x2 * lhs, const rs_matrix2x2 * rhs);
void rsMatrixLoadMultiply( rs_matrix3x3 * m, const rs_matrix3x3 * lhs, const rs_matrix3x3 * rhs);
void rsMatrixLoadMultiply( rs_matrix4x4 * m, const rs_matrix4x4 * lhs, const rs_matrix4x4 * rhs);
Параметры
м Матрица для установки.
левая сторона Левая матрица продукта.
правый риск Правая матрица произведения.

Устанавливает m в матричное произведение lhs * rhs .

Чтобы объединить две матрицы преобразования 4x4, умножьте вторую матрицу преобразования на первую матрицу преобразования. Например, чтобы создать матрицу преобразования, которая применяет преобразование s1, за которым следует s2, вызовите rsMatrixLoadMultiply(&combined, &s2, &s1) .

Предупреждение. До версии 21 сохранение результата обратно в правую матрицу не поддерживается и приведет к неопределенному поведению. Вместо этого используйте rsMatrixMulitply. Например, вместо rsMatrixLoadMultiply (&m2r, &m2r, &m2l) используйте rsMatrixMultiply (&m2r, &m2l). rsMatrixLoadMultiply (&m2l, &m2r, &m2l) работает как положено.

rsMatrixLoadOrtho : Загрузите матрицу ортогональной проекции.

void rsMatrixLoadOrtho( rs_matrix4x4 * m, плавать влево, плавать вправо, плавать внизу, плавать вверху, плавать рядом, плавать далеко);
Параметры
м Матрица для установки.
левый
верно
нижний
вершина
около
далеко

Создает матрицу ортогональной проекции, преобразуя прямоугольник, идентифицируемый шестью плоскостями отсечения left, right, bottom, top, near, far в единичный куб с углом в (-1, -1, -1) и противоположным в (1, 1, 1) . (1, 1, 1) .

Чтобы применить эту проекцию к вектору, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

См. https://en.wikipedia.org/wiki/Orthographic_projection.

rsMatrixLoadPerspective : Загрузите матрицу перспективной проекции.

void rsMatrixLoadPerspective( rs_matrix4x4 * m, float fovy, плавающий аспект, плавающий рядом, плавающий далеко);
Параметры
м Матрица для установки.
фови Поле зрения в градусах по оси Y.
аспект Отношение х/у.
около Рядом с плоскостью отсечения.
далеко Дальняя отсекающая плоскость.

Создает матрицу перспективной проекции, предполагая симметричное поле зрения.

Чтобы применить эту проекцию к вектору, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

rsMatrixLoadRotate : загрузить матрицу вращения.

void rsMatrixLoadRotate( rs_matrix4x4 * m, float rot, float x, float y, float z);
Параметры
м Матрица для установки.
гнить Сколько поворотов нужно сделать, в градусах.
х X-компонент вектора, который является осью вращения.
й Компонент Y вектора, который является осью вращения.
я Z-компонент вектора, который является осью вращения.

Эта функция создает матрицу вращения. Ось вращения представляет собой вектор (x, y, z) .

Чтобы повернуть вектор, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

См. https://en.wikipedia.org/wiki/Rotation_matrix.

rsMatrixLoadScale : загрузить матрицу масштабирования.

void rsMatrixLoadScale( rs_matrix4x4 * m, float x, float y, float z);
Параметры
м Матрица для установки.
х Множественное для масштабирования компонентов x.
й Множественный для масштабирования компонентов y.
я Множественное для масштабирования компонентов z.

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

Чтобы масштабировать вектор, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

rsMatrixLoadTranslate : загрузить матрицу перевода.

void rsMatrixLoadTranslate( rs_matrix4x4 * m, float x, float y, float z);
Параметры
м Матрица для установки.
х Число, добавляемое к каждому компоненту x.
й Число, добавляемое к каждому компоненту y.
я Число, добавляемое к каждому компоненту z.

Эта функция создает матрицу перевода, в которой к каждому элементу вектора добавляется число.

Чтобы перевести вектор, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

rsMatrixMultiply : умножить матрицу на вектор или другую матрицу.

float2 rsMatrixMultiply(const rs_matrix2x2 * m, float2 in); Добавлено на уровне API 14.
float2 rsMatrixMultiply( rs_matrix2x2 * m, float2 in); Удален из API уровня 14 и выше.
float3 rsMatrixMultiply(const rs_matrix3x3 * m, float2 in); Добавлено на уровне API 14.
float3 rsMatrixMultiply(const rs_matrix3x3 * m, float3 in); Добавлено на уровне API 14.
float3 rsMatrixMultiply( rs_matrix3x3 * m, float2 in); Удален из API уровня 14 и выше.
float3 rsMatrixMultiply( rs_matrix3x3 * m, float3 in); Удален из API уровня 14 и выше.
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float2 in); Добавлено на уровне API 14.
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float3 in); Добавлено на уровне API 14.
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float4 in); Добавлено на уровне API 14.
float4 rsMatrixMultiply( rs_matrix4x4 * m, float2 in); Удален из API уровня 14 и выше.
float4 rsMatrixMultiply( rs_matrix4x4 * m, float3 in); Удален из API уровня 14 и выше.
float4 rsMatrixMultiply( rs_matrix4x4 * m, float4 in); Удален из API уровня 14 и выше.
void rsMatrixMultiply( rs_matrix2x2 * m, const rs_matrix2x2 * rhs);
void rsMatrixMultiply( rs_matrix3x3 * m, const rs_matrix3x3 * rhs);
void rsMatrixMultiply( rs_matrix4x4 * m, const rs_matrix4x4 * rhs);
Параметры
м Левая матрица продукта и матрица, которую нужно установить.
правый риск Правая матрица произведения.
в

Для варианта «матрица по матрице» устанавливает m в матричное произведение m * rhs .

При объединении двух матриц преобразования 4x4 с использованием этой функции результирующая матрица будет соответствовать выполнению сначала преобразования правой руки, за которым следует исходное преобразование m.

Для варианта «матрица на вектор» возвращает результат после умножения вектора на матрицу, т.е. m * in .

При умножении float3 на rs_matrix4x4 вектор расширяется с помощью (1).

При умножении float2 на rs_matrix4x4 вектор расширяется до (0, 1).

При умножении float2 на rs_matrix3x3 вектор расширяется с помощью (0).

Начиная с API 14, эта функция принимает константную матрицу в качестве первого аргумента.

rsMatrixRotate : применить поворот к матрице преобразования.

void rsMatrixRotate( rs_matrix4x4 * m, float rot, float x, float y, float z);
Параметры
м Матрица для изменения.
гнить Сколько поворотов нужно сделать, в градусах.
х X-компонент вектора, который является осью вращения.
й Компонент Y вектора, который является осью вращения.
я Z-компонент вектора, который является осью вращения.

Умножьте матрицу m на матрицу вращения.

Эта функция изменяет матрицу преобразования, чтобы сначала выполнить вращение. Ось вращения представляет собой вектор (x, y, z) .

Чтобы применить это комбинированное преобразование к вектору, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

rsMatrixScale : применить масштабирование к матрице преобразования.

void rsMatrixScale( rs_matrix4x4 * m, float x, float y, float z);
Параметры
м Матрица для изменения.
х Множественное для масштабирования компонентов x.
й Множественный для масштабирования компонентов y.
я Множественное для масштабирования компонентов z.

Умножьте матрицу m на матрицу масштабирования.

Эта функция изменяет матрицу преобразования, чтобы сначала выполнить масштабирование. При масштабировании каждый компонент вектора умножается на число. Это число может быть отрицательным.

Чтобы применить это комбинированное преобразование к вектору, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

rsMatrixSet : установить один элемент

void rsMatrixSet( rs_matrix2x2 * m, uint32_t col, uint32_t row, float v);
void rsMatrixSet( rs_matrix3x3 * m, uint32_t col, uint32_t row, float v);
void rsMatrixSet( rs_matrix4x4 * m, uint32_t col, uint32_t row, float v);
Параметры
м Матрица, которая будет изменена.
столбец Столбец устанавливаемого элемента, отсчитываемый от нуля.
ряд Строка элемента, начинающегося с нуля, для установки.
в Значение для установки.

Установите элемент матрицы.

Внимание: порядок параметров столбца и строки может быть неожиданным.

rsMatrixTranslate : применить перевод к матрице преобразования.

void rsMatrixTranslate( rs_matrix4x4 * m, float x, float y, float z);
Параметры
м Матрица для изменения.
х Число, добавляемое к каждому компоненту x.
й Число, добавляемое к каждому компоненту y.
я Число, добавляемое к каждому компоненту z.

Умножьте матрицу m на матрицу перевода.

Эта функция изменяет матрицу преобразования, чтобы сначала выполнить перевод. При переводе к каждому компоненту вектора добавляется число.

Чтобы применить это комбинированное преобразование к вектору, умножьте вектор на созданную матрицу с помощью rsMatrixMultiply ().

rsMatrixTranspose : Транспонировать место матрицы.

void rsMatrixTranspose( rs_matrix2x2 * m);
void rsMatrixTranspose( rs_matrix3x3 * m);
void rsMatrixTranspose( rs_matrix4x4 * m);
Параметры
м Матрица для транспонирования.

Транспонируйте матрицу m на место.

,

Обзор

Эти функции позволяют манипулировать квадратными матрицами ранга 2x2, 3x3 и 4x4. Они особенно полезны для графических преобразований и совместимы с OpenGL.

Мы используем индекс, начинающийся с нуля, для строк и столбцов. Например, последний элемент rs_matrix4x4 находится в позиции (3, 3).

RenderScript использует матрицы со столбцами и векторы на основе столбцов. Преобразование вектора выполняется путем последующего умножения вектора, например (matrix * vector) , как это предусмотрено rsMatrixMultiply ().

Чтобы создать матрицу преобразования, которая выполняет два преобразования одновременно, умножьте две исходные матрицы, при этом первое преобразование будет правым аргументом. Например, чтобы создать матрицу преобразования, которая применяет преобразование s1, за которым следует s2, вызовите rsMatrixLoadMultiply(&combined, &s2, &s1) . Это происходит от s2 * (s1 * v) , что равно (s2 * s1) * v .

У нас есть два стиля функций для создания матриц преобразования: rsMatrixLoad Transformation и rsMatrix Transformation . Первый стиль просто сохраняет матрицу преобразования в первом аргументе. Последний изменяет уже существующую матрицу преобразования, так что новое преобразование происходит первым. Например, если вы вызываете rsMatrixTranslate () для матрицы, которая уже выполняет масштабирование, результирующая матрица при применении к вектору сначала выполнит перевод, а затем масштабирование.

Краткое содержание

Функции
rsExtractFrustumPlanes Вычисление усеченных плоскостей
rsIsSphereInFrustum Проверяет, находится ли сфера в пределах усеченных плоскостей.
rsMatrixGet Получить один элемент
rsMatrixInverse Инвертирует матрицу на месте
rsMatrixInverseTranspose Инвертирует и транспонирует матрицу на месте
rsMatrixLoad Загрузите или скопируйте матрицу
rsMatrixLoadFrustum Загрузите матрицу проекции усеченной пирамиды
rsMatrixLoadIdentity Загрузить идентификационную матрицу
rsMatrixLoadMultiply Умножить две матрицы
rsMatrixLoadOrtho Загрузите матрицу ортогональной проекции
rsMatrixLoadPerspective Загрузите матрицу перспективной проекции
rsMatrixLoadRotate Загрузите матрицу вращения
rsMatrixLoadScale Загрузите матрицу масштабирования
rsMatrixLoadTranslate Загрузить матрицу перевода
rsMatrixMultiply Умножить матрицу на вектор или другую матрицу
rsMatrixRotate Применение поворота к матрице преобразования
rsMatrixScale Примените масштабирование к матрице преобразования
rsMatrixSet Установить один элемент
rsMatrixПеревести Применить перевод к матрице преобразования
rsMatrixTranspose Транспонировать место матрицы

Функции

rsExtractFrustumPlanes : Вычисление усеченных плоскостей.

void rsExtractFrustumPlanes(const rs_matrix4x4 * viewProj, float4 * слева, float4 * справа, float4 * сверху, float4 * снизу, float4 * рядом, float4 * далеко); Добавлено на уровне API 24.
void rsExtractFrustumPlanes(const rs_matrix4x4 * viewProj, float4 * слева, float4 * справа, float4 * сверху, float4 * снизу, float4 * рядом, float4 * далеко); Удален из API уровня 24 и выше.
Параметры
просмотрПродж Матрица для извлечения самолетов.
левый Левый самолет.
верно Правый самолет.
вершина Верхний самолет.
нижний Нижняя плоскость.
около Рядом самолет.
далеко Дальний самолет.
да

Вычисляет 6 плоскостей усеченного конуса из матрицы проекции вида.

rsIsSphereInFrustum : проверяет, находится ли сфера в пределах усеченных плоскостей.

bool rsissphereinfrustum ( float4 * sphere, float4 * left, float4 * правый, float4 * top, float4 * внизу, float4 * рядом, float4 * far);
Параметры
сфера float4, представляющий сферу.
левый Левый самолет.
верно Правый самолет.
вершина Верхний самолет.
нижний Нижняя плоскость.
около Рядом с самолетом.
далеко Дальний самолет.

Возвращает True, если сфера находится в пределах 6 плоскостей Frustum.

rsmatrixget : получить один элемент

float rsmatrixget (const rs_matrix2x2 * m, uint32_t col, uint32_t row);
float rsmatrixget (const rs_matrix3x3 * m, uint32_t col, uint32_t row);
float rsmatrixget (const rs_matrix4x4 * m, uint32_t col, uint32_t row);
Параметры
м Матрица, чтобы извлечь элемент из.
столбец Столбец на основе нуля элемента, который будет извлечен.
ряд Ноль строка элемента для извлечения.

Возвращает один элемент матрицы.

ПРЕДУПРЕЖДЕНИЕ: Порядок столбца и параметров строки может быть неожиданным.

rsmatrixinverse : инвертирует матрицу на месте

bool rsmatrixinverse ( rs_matrix4x4 * m);
Параметры
м Матрица, чтобы инвертировать.

Возвращает True, если матрица была успешно перевернута.

rsmatrixinversetranspose : инверты и транспонировать матрицу на месте

Bool rsmatrixInversTranspose ( rs_matrix4x4 * m);
Параметры
м Матрица для изменения.

Матрица сначала перевернута, затем транспонируется. Возвращает True, если матрица была успешно перевернута.

rsmatrixload : загрузить или скопировать матрицу

void rsmatrixload ( rs_matrix2x2 * destination, const float * массив);
void rsmatrixload ( rs_matrix2x2 * destination, const rs_matrix2x2 * source);
void rsmatrixload ( rs_matrix3x3 * destination, const float * массив);
void rsmatrixload ( rs_matrix3x3 * destination, const rs_matrix3x3 * source);
void rsmatrixload ( rs_matrix4x4 * destination, const float * массив);
void rsmatrixload ( rs_matrix4x4 * destination, const rs_matrix2x2 * source);
void rsmatrixload ( rs_matrix4x4 * destination, const rs_matrix3x3 * source);
void rsmatrixload ( rs_matrix4x4 * destination, const rs_matrix4x4 * source);
Параметры
место назначения Матрица для установки.
множество Массив значений, чтобы установить матрицу на. Эти массивы должны составлять 4, 9 или 16 поплавок, в зависимости от размера матрицы.
источник Матрица источника.

Установите элементы матрицы из массива поплавков или из другой матрицы.

Если загрузка из массива, поплавки должны находиться в порядке строки мажор, то есть элемент row 0, column 0 должен быть первым, за которым следует элемент в row 0, column 1 и т. Д. И т. Д.

Если загрузка из матрицы и источник меньше пункта назначения, остальная часть пункта назначения заполнена элементами матрицы идентификации. Например, загрузка rs_matrix2x2 в rs_matrix4x4 даст:

мм M01 0,0 0,0
М10 М11 0,0 0,0
0,0 0,0 1.0 0,0
0,0 0,0 0,0 1.0

Rsmatrixloadfrustum : загрузить матрицу проекции Frustum

void rsmatrixloadfrustum ( rs_matrix4x4 * m, плавание влево, плавает вправо, плавает внизу, плавает, плавает рядом, плавает далеко);
Параметры
м Матрица для установки.
левый
верно
нижний
вершина
около
далеко

Создает матрицу проекции Frustum, преобразуя коробку, идентифицированную шестью плоскостями left, right, bottom, top, near, far .

Чтобы применить эту проекцию к вектору, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

RSMatrixloadIdentity : MATR IDEDITY MATRIX

void rsmatrixloadientity ( rs_matrix2x2 * m);
void rsmatrixloadientity ( rs_matrix3x3 * m);
void rsmatrixloadientity ( rs_matrix4x4 * m);
Параметры
м Матрица для установки.

Установите элементы матрицы в матрицу личности.

rsmatrixloadmultiply : умножьте две матрицы

void rsmatrixloadmultiply ( rs_matrix2x2 * m, const rs_matrix2x2 * lhs, const rs_matrix2x2 * rhs);
void rsmatrixloadmultiply ( rs_matrix3x3 * m, const rs_matrix3x3 * lhs, const rs_matrix3x3 * rhs);
void rsmatrixloadmultiply ( rs_matrix4x4 * m, const rs_matrix4x4 * lhs, const rs_matrix4x4 * rhs);
Параметры
м Матрица для установки.
LHS Левая матрица продукта.
правый риск Правая матрица продукта.

Устанавливает M на матричный продукт lhs * rhs .

Чтобы объединить две матрицы преобразования 4x4, умножьте вторую матрицу преобразования на первую матрицу преобразования. Например, чтобы создать матрицу преобразования, которая применяет преобразование S1, за которым следует S2, Call rsMatrixLoadMultiply(&combined, &s2, &s1) .

Предупреждение: до версии 21 хранение результата обратно в правую матрицу не поддерживается и приведет к неопределенному поведению. Вместо этого используйте rsmatrixmulitply. Например, вместо того, чтобы делать rsmatrixloadmultiply (& m2r, & m2r, & m2l), используйте Rsmatrixmultiply (& M2R, & M2L). RSMatrixloadMultiply (& M2L, & M2R, & M2L) работает, как и ожидалось.

Rsmatrixloadortho : загрузить орфографическую проекционную матрицу

void rsmatrixloadortho ( rs_matrix4x4 * m, плавание влево, плавает вправо, внизу плавает, плавает, плавает рядом, плавает далеко);
Параметры
м Матрица для установки.
левый
верно
нижний
вершина
около
далеко

Конструирует матрицу орфографической проекции, преобразуя коробку, идентифицированную шестью плоскостями, left, right, bottom, top, near, far в кубик устройства с углом в (-1, -1, -1) и противоположность (1, 1, 1) .

Чтобы применить эту проекцию к вектору, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

См.

RSMatrixloadperseperive : загрузить перспективную проекционную матрицу

void rsmatrixloadpersperive ( rs_matrix4x4 * m, float fovy, аспект плавания, плавание рядом, плавает далеко);
Параметры
м Матрица для установки.
Фови Поле зрения, в градусах вдоль оси Y.
аспект Соотношение x / y.
около Рядом с самолетом отсечения.
далеко Самолет с дальней подключением.

Создает перспективную проекционную матрицу, предполагая симметричное поле зрения.

Чтобы применить эту проекцию к вектору, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

RSMatrixLoadRotate : загрузите матрицу вращения

void rsmatrixloadrotate ( rs_matrix4x4 * m, плавучий гниль, float x, float y, float z);
Параметры
м Матрица для установки.
гнить Сколько вращения нужно сделать, в градусах.
х X компонент вектора, который является осью вращения.
й Y компонент вектора, который является осью вращения.
я Z -компонент вектора, который является осью вращения.

Эта функция создает матрицу вращения. Ось вращения - вектор (x, y, z) .

Чтобы повернуть вектор, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

См. Https://en.wikipedia.org/wiki/rotation_matrix.

RSMatrixLoadScale : загрузите матрицу масштабирования

void rsmatrixloadscale ( rs_matrix4x4 * m, float x, float y, float z);
Параметры
м Матрица для установки.
х Множественные, чтобы масштабировать компоненты x.
й Множественные, чтобы масштабировать компоненты Y.
я Множественные, чтобы масштабировать компоненты Z.

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

Чтобы масштабировать вектор, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

rsmatrixloadtranslate : загрузить матрицу перевода

void rsmatrixloadtranslate ( rs_matrix4x4 * m, float x, float y, float z);
Параметры
м Матрица для установки.
х Номер, чтобы добавить в каждый x компонент.
й Номер, чтобы добавить в каждый компонент Y.
я Номер для добавления в каждый z -компонент.

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

Чтобы перевести вектор, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

Rsmatrixmultiply : умножьте матрицу на вектор или другую матрицу

float2 rsmatrixmultiply (const rs_matrix2x2 * m, float2 in); Добавлен на уровне API 14
float2 rsmatrixmultiply ( rs_matrix2x2 * m, float2 in); Удален с уровня API 14 и выше
float3 rsmatrixmultiply (const rs_matrix3x3 * m, float2 in); Добавлен на уровне API 14
float3 rsmatrixmultiply (const rs_matrix3x3 * m, float3 in); Добавлен на уровне API 14
float3 rsmatrixmultiply ( rs_matrix3x3 * m, float2 in); Удален с уровня API 14 и выше
float3 rsmatrixmultiply ( rs_matrix3x3 * m, float3 in); Удален с уровня API 14 и выше
float4 rsmatrixmultiply (const rs_matrix4x4 * m, float2 in); Добавлен на уровне API 14
float4 rsmatrixmultiply (const rs_matrix4x4 * m, float3 in); Добавлен на уровне API 14
float4 rsmatrixmultiply (const rs_matrix4x4 * m, float4 in); Добавлен на уровне API 14
float4 rsmatrixmultiply ( rs_matrix4x4 * m, float2 in); Удален с уровня API 14 и выше
float4 rsmatrixmultiply ( rs_matrix4x4 * m, float3 in); Удален с уровня API 14 и выше
float4 rsmatrixmultiply ( rs_matrix4x4 * m, float4 in); Удален с уровня API 14 и выше
void rsmatrixmultiply ( rs_matrix2x2 * m, const rs_matrix2x2 * rhs);
void rsmatrixmultiply ( rs_matrix3x3 * m, const rs_matrix3x3 * rhs);
void rsmatrixmultiply ( rs_matrix4x4 * m, const rs_matrix4x4 * rhs);
Параметры
м Левая матрица продукта и матрицы, которая должна быть установлена.
правый риск Правая матрица продукта.
в

Для матрицы по варианту матрицы устанавливает M на матричный продукт m * rhs .

При объединении двух матриц преобразования 4x4 с использованием этой функции полученная матрица будет соответствовать выполнению преобразования RHS, с последующим исходным M -преобразованием.

Для матрицы от Vector Variant возвращает пост-мультиплизацию вектора матрицей, т.е. m * in .

При умножении Float3 на RS_MATRIX4X4 вектор расширяется (1).

При умножении Float2 на RS_MATRIX4X4 вектор расширяется (0, 1).

При умножении Float2 на RS_MATRIX3X3 вектор расширяется (0).

Начиная с API 14, эта функция принимает константную матрицу в качестве первого аргумента.

RSMatrixRotate : примените вращение на матрицу преобразования

void rsmatrixRotate ( rs_matrix4x4 * m, float hrot, float x, float y, float z);
Параметры
м Матрица для изменения.
гнить Сколько вращения нужно сделать, в градусах.
х X компонент вектора, который является осью вращения.
й Y компонент вектора, который является осью вращения.
я Z -компонент вектора, который является осью вращения.

Умножьте матрицу M на матрицу вращения.

Эта функция изменяет матрицу преобразования, чтобы сначала сделать вращение. Ось вращения - вектор (x, y, z) .

Чтобы применить это комбинированное преобразование к вектору, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

Rsmatrixscale : примените масштабирование к матрице преобразования

void rsmatrixscale ( rs_matrix4x4 * m, float x, float y, float z);
Параметры
м Матрица для изменения.
х Множественные, чтобы масштабировать компоненты x.
й Множественные, чтобы масштабировать компоненты Y.
я Множественные, чтобы масштабировать компоненты Z.

Умножьте матрицу M на матрицу масштабирования.

Эта функция изменяет матрицу преобразования, чтобы сначала сделать масштабирование. При масштабировании каждый компонент вектора умножается на число. Это число может быть отрицательным.

Чтобы применить это комбинированное преобразование к вектору, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

rsmatrixset : установить один элемент

void rsmatrixset ( rs_matrix2x2 * m, uint32_t col, uint32_t row, float v);
void rsmatrixset ( rs_matrix3x3 * m, uint32_t col, uint32_t row, float v);
void rsmatrixset ( rs_matrix4x4 * m, uint32_t col, uint32_t row, float v);
Параметры
м Матрица, которая будет изменена.
столбец Столбец на основе нуля элемента, который будет установлен.
ряд Ноль строка элемента будет установлен.
в Значение для установки.

Установите элемент матрицы.

ПРЕДУПРЕЖДЕНИЕ: Порядок столбца и параметров строки может быть неожиданным.

Rsmatrixtranslate : примените перевод к матрице преобразования

void rsmatrixtranslate ( rs_matrix4x4 * m, float x, float y, float z);
Параметры
м Матрица для изменения.
х Номер, чтобы добавить в каждый x компонент.
й Номер, чтобы добавить в каждый компонент Y.
я Номер для добавления в каждый z -компонент.

Умножьте матрицу M на матрицу перевода.

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

Чтобы применить это комбинированное преобразование к вектору, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

Rsmatrixtranspose : Transpepe A Matrix Place

void rsmatrixtranspose ( rs_matrix2x2 * m);
void rsmatrixtranspose ( rs_matrix3x3 * m);
void rsmatrixtranspose ( rs_matrix4x4 * m);
Параметры
м Матрица для транспонирования.

Транспонировать матрицу М на месте.

,

Обзор

Эти функции позволяют вам манипулировать квадратными матрицами ранга 2x2, 3x3 и 4x4. Они особенно полезны для графических преобразований и совместимы с OpenGL.

Мы используем индекс на основе нуля для строк и столбцов. Например, последний элемент rs_matrix4x4 находится в (3, 3).

Renderscript использует матрицы столбцов и векторы на основе столбцов. Преобразование вектора осуществляется путем постмультировки вектора, например (matrix * vector) , как это обеспечивает rsmatrixmultiply ().

Чтобы создать матрицу преобразования, которая выполняет два преобразования одновременно, умножьте две матрицы источника, с первым преобразованием в качестве правильного аргумента. Например, чтобы создать матрицу преобразования, которая применяет преобразование S1, за которым следует S2, Call rsMatrixLoadMultiply(&combined, &s2, &s1) . Это происходит от s2 * (s1 * v) , который (s2 * s1) * v .

У нас есть два стиля функций для создания матриц преобразования: преобразование RSMatrixload и преобразование RSMatrix. Бывший стиль просто хранит матрицу трансформации в первом аргументе. Последнее изменяет ранее существовавшую матрицу преобразования, чтобы новое преобразование происходило первым. Например, если вы называете rsmatrixtranslate () на матрицу, которая уже выполняет масштабирование, полученная матрица при применении к вектору сначала сделает перевод, а затем масштабирование.

Краткое содержание

Функции
rsextractfrustumplanes Вычислить плоскости Frustum
rsissphereinfrustum Проверяет, находится ли сфера в плоскостях Frustum
rsmatrixget Получите один элемент
rsmatrixinverse Переворачивать матрицу на месте
rsmatrixinversetranspose Инверты и транспонировать матрицу на месте
rsmatrixload Загрузите или скопируйте матрицу
rsmatrixloadfrustum Загрузите матрицу проекции Frustum
RSMatrixloadIentity Загружать матрицу идентификации
rsmatrixloadmultiply Умножьте две матрицы
rsmatrixloadortho Загрузить орфографическую проекционную матрицу
rsmatrixloadpersperive Загрузить перспективную проекционную матрицу
rsmatrixloadrotate Загрузить матрицу вращения
RSMatrixLoadScale Загрузите матрицу масштабирования
rsmatrixloadtranslate Загрузить матрицу перевода
rsmatrixmultiply Умножьте матрицу на вектор или другую матрицу
RSMatrixRotate Нанесите вращение на матрицу преобразования
RSMatrixscale Применить масштабирование к матрице преобразования
rsmatrixset Установите один элемент
rsmatrixtranslate Примените перевод к матрице преобразования
Rsmatrixtranspose Транспонировать матричное место

Функции

rsextractfrustumplanes : вычислить плоскости Frustum

void rsextractfrustumplanes (const rs_matrix4x4 * viewproj, float4 * слева, float4 * righ, float4 * top, float4 * внизу, float4 * рядом, float4 * far); Добавлен на уровне API 24
void rsextractfrustumplanes (const rs_matrix4x4 * viewproj, float4 * влево, float4 * справа, float4 * top, float4 * внизу, float4 * рядом, float4 * far); Удален с уровня API 24 и выше
Параметры
ViewProj Матрица для извлечения плоскостей из.
левый Левый самолет.
верно Правый самолет.
вершина Верхний самолет.
нижний Нижняя плоскость.
около Рядом с самолетом.
далеко Дальний самолет.
ручный

Вычисляет 6 плоскостей Frustum из матрицы проекции View

rsissphereinfrustum : проверяет, находится ли сфера в плоскостях Frustum

bool rsissphereinfrustum ( float4 * sphere, float4 * left, float4 * правый, float4 * top, float4 * внизу, float4 * рядом, float4 * far);
Параметры
сфера float4, представляющий сферу.
левый Левый самолет.
верно Правый самолет.
вершина Верхний самолет.
нижний Нижняя плоскость.
около Рядом с самолетом.
далеко Дальний самолет.

Возвращает True, если сфера находится в пределах 6 плоскостей Frustum.

rsmatrixget : получить один элемент

float rsmatrixget (const rs_matrix2x2 * m, uint32_t col, uint32_t row);
float rsmatrixget (const rs_matrix3x3 * m, uint32_t col, uint32_t row);
float rsmatrixget (const rs_matrix4x4 * m, uint32_t col, uint32_t row);
Параметры
м Матрица, чтобы извлечь элемент из.
столбец Столбец на основе нуля элемента, который будет извлечен.
ряд Ноль строка элемента для извлечения.

Возвращает один элемент матрицы.

ПРЕДУПРЕЖДЕНИЕ: Порядок столбца и параметров строки может быть неожиданным.

rsmatrixinverse : инвертирует матрицу на месте

bool rsmatrixinverse ( rs_matrix4x4 * m);
Параметры
м Матрица, чтобы инвертировать.

Возвращает True, если матрица была успешно перевернута.

rsmatrixinversetranspose : инверты и транспонировать матрицу на месте

Bool rsmatrixInversTranspose ( rs_matrix4x4 * m);
Параметры
м Матрица для изменения.

Матрица сначала перевернута, затем транспонируется. Возвращает True, если матрица была успешно перевернута.

rsmatrixload : загрузить или скопировать матрицу

void rsmatrixload ( rs_matrix2x2 * destination, const float * массив);
void rsmatrixload ( rs_matrix2x2 * destination, const rs_matrix2x2 * source);
void rsmatrixload ( rs_matrix3x3 * destination, const float * массив);
void rsmatrixload ( rs_matrix3x3 * destination, const rs_matrix3x3 * source);
void rsmatrixload ( rs_matrix4x4 * destination, const float * массив);
void rsmatrixload ( rs_matrix4x4 * destination, const rs_matrix2x2 * source);
void rsmatrixload ( rs_matrix4x4 * destination, const rs_matrix3x3 * source);
void rsmatrixload ( rs_matrix4x4 * destination, const rs_matrix4x4 * source);
Параметры
место назначения Матрица для установки.
множество Массив значений, чтобы установить матрицу на. Эти массивы должны составлять 4, 9 или 16 поплавок, в зависимости от размера матрицы.
источник Матрица источника.

Установите элементы матрицы из массива поплавков или из другой матрицы.

Если загрузка из массива, поплавки должны находиться в порядке строки мажор, то есть элемент row 0, column 0 должен быть первым, за которым следует элемент в row 0, column 1 и т. Д. И т. Д.

Если загрузка из матрицы и источник меньше пункта назначения, остальная часть пункта назначения заполнена элементами идентификационной матрицы. Например, загрузка rs_matrix2x2 в rs_matrix4x4 даст:

мм M01 0,0 0,0
М10 М11 0,0 0,0
0,0 0,0 1.0 0,0
0,0 0,0 0,0 1.0

Rsmatrixloadfrustum : загрузить матрицу проекции Frustum

void rsmatrixloadfrustum ( rs_matrix4x4 * m, плавание влево, плавает вправо, плавает внизу, плавает, плавает рядом, плавает далеко);
Параметры
м Матрица для установки.
левый
верно
нижний
вершина
около
далеко

Создает матрицу проекции Frustum, преобразуя коробку, идентифицированную шестью плоскостями left, right, bottom, top, near, far .

Чтобы применить эту проекцию к вектору, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

RSMatrixloadIdentity : MATR IDEDITY MATRIX

void rsmatrixloadientity ( rs_matrix2x2 * m);
void rsmatrixloadientity ( rs_matrix3x3 * m);
void rsmatrixloadientity ( rs_matrix4x4 * m);
Параметры
м Матрица для установки.

Установите элементы матрицы в матрицу личности.

rsmatrixloadmultiply : умножьте две матрицы

void rsmatrixloadmultiply ( rs_matrix2x2 * m, const rs_matrix2x2 * lhs, const rs_matrix2x2 * rhs);
void rsmatrixloadmultiply ( rs_matrix3x3 * m, const rs_matrix3x3 * lhs, const rs_matrix3x3 * rhs);
void rsmatrixloadmultiply ( rs_matrix4x4 * m, const rs_matrix4x4 * lhs, const rs_matrix4x4 * rhs);
Параметры
м Матрица для установки.
LHS Левая матрица продукта.
правый риск Правая матрица продукта.

Устанавливает M на матричный продукт lhs * rhs .

Чтобы объединить две матрицы преобразования 4x4, умножьте вторую матрицу преобразования на первую матрицу преобразования. Например, чтобы создать матрицу преобразования, которая применяет преобразование S1, за которым следует S2, Call rsMatrixLoadMultiply(&combined, &s2, &s1) .

Предупреждение: до версии 21 хранение результата обратно в правую матрицу не поддерживается и приведет к неопределенному поведению. Вместо этого используйте rsmatrixmulitply. Например, вместо того, чтобы делать rsmatrixloadmultiply (& m2r, & m2r, & m2l), используйте Rsmatrixmultiply (& M2R, & M2L). RSMatrixloadMultiply (& M2L, & M2R, & M2L) работает, как и ожидалось.

Rsmatrixloadortho : загрузить орфографическую проекционную матрицу

void rsmatrixloadortho ( rs_matrix4x4 * m, плавание влево, плавает вправо, внизу плавает, плавает, плавает рядом, плавает далеко);
Параметры
м Матрица для установки.
левый
верно
нижний
вершина
около
далеко

Конструирует матрицу орфографической проекции, преобразуя коробку, идентифицированную шестью плоскостями, left, right, bottom, top, near, far в кубик устройства с углом в (-1, -1, -1) и противоположность (1, 1, 1) .

Чтобы применить эту проекцию к вектору, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

См.

RSMatrixloadperseperive : загрузить перспективную проекционную матрицу

void rsmatrixloadpersperive ( rs_matrix4x4 * m, float fovy, аспект плавания, плавание рядом, плавает далеко);
Параметры
м Матрица для установки.
Фови Поле зрения, в градусах вдоль оси Y.
аспект Соотношение x / y.
около Рядом с самолетом отсечения.
далеко Самолет с дальней подключением.

Создает перспективную проекционную матрицу, предполагая симметричное поле зрения.

Чтобы применить эту проекцию к вектору, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

RSMatrixLoadRotate : загрузите матрицу вращения

void rsmatrixloadrotate ( rs_matrix4x4 * m, плавучий гниль, float x, float y, float z);
Параметры
м Матрица для установки.
гнить Сколько вращения нужно сделать, в градусах.
х X компонент вектора, который является осью вращения.
й Y компонент вектора, который является осью вращения.
я Z -компонент вектора, который является осью вращения.

Эта функция создает матрицу вращения. Ось вращения - вектор (x, y, z) .

Чтобы повернуть вектор, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

См. Https://en.wikipedia.org/wiki/rotation_matrix.

RSMatrixLoadScale : загрузите матрицу масштабирования

void rsmatrixloadscale ( rs_matrix4x4 * m, float x, float y, float z);
Параметры
м Матрица для установки.
х Множественные, чтобы масштабировать компоненты x.
й Множественные, чтобы масштабировать компоненты Y.
я Множественные, чтобы масштабировать компоненты Z.

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

Чтобы масштабировать вектор, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

rsmatrixloadtranslate : загрузить матрицу перевода

void rsmatrixloadtranslate ( rs_matrix4x4 * m, float x, float y, float z);
Параметры
м Матрица для установки.
х Номер, чтобы добавить в каждый x компонент.
й Номер, чтобы добавить в каждый компонент Y.
я Номер для добавления в каждый z -компонент.

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

Чтобы перевести вектор, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

Rsmatrixmultiply : умножьте матрицу на вектор или другую матрицу

float2 rsmatrixmultiply (const rs_matrix2x2 * m, float2 in); Добавлен на уровне API 14
float2 rsmatrixmultiply ( rs_matrix2x2 * m, float2 in); Удален с уровня API 14 и выше
float3 rsmatrixmultiply (const rs_matrix3x3 * m, float2 in); Добавлен на уровне API 14
float3 rsmatrixmultiply (const rs_matrix3x3 * m, float3 in); Добавлен на уровне API 14
float3 rsmatrixmultiply ( rs_matrix3x3 * m, float2 in); Удален с уровня API 14 и выше
float3 rsmatrixmultiply ( rs_matrix3x3 * m, float3 in); Удален с уровня API 14 и выше
float4 rsmatrixmultiply (const rs_matrix4x4 * m, float2 in); Добавлен на уровне API 14
float4 rsmatrixmultiply (const rs_matrix4x4 * m, float3 in); Добавлен на уровне API 14
float4 rsmatrixmultiply (const rs_matrix4x4 * m, float4 in); Добавлен на уровне API 14
float4 rsmatrixmultiply ( rs_matrix4x4 * m, float2 in); Удален с уровня API 14 и выше
float4 rsmatrixmultiply ( rs_matrix4x4 * m, float3 in); Удален с уровня API 14 и выше
float4 rsmatrixmultiply ( rs_matrix4x4 * m, float4 in); Удален с уровня API 14 и выше
void rsmatrixmultiply ( rs_matrix2x2 * m, const rs_matrix2x2 * rhs);
void rsmatrixmultiply ( rs_matrix3x3 * m, const rs_matrix3x3 * rhs);
void rsmatrixmultiply ( rs_matrix4x4 * m, const rs_matrix4x4 * rhs);
Параметры
м Левая матрица продукта и матрицы, которая должна быть установлена.
правый риск Правая матрица продукта.
в

Для матрицы по варианту матрицы устанавливает M на матричный продукт m * rhs .

При объединении двух матриц преобразования 4x4 с использованием этой функции полученная матрица будет соответствовать выполнению преобразования RHS, с последующим исходным M -преобразованием.

Для матрицы от Vector Variant возвращает пост-мультиплизацию вектора матрицей, т.е. m * in .

При умножении Float3 на RS_MATRIX4X4 вектор расширяется (1).

При умножении Float2 на RS_MATRIX4X4 вектор расширяется (0, 1).

При умножении Float2 на RS_MATRIX3X3 вектор расширяется (0).

Начиная с API 14, эта функция принимает константную матрицу в качестве первого аргумента.

RSMatrixRotate : примените вращение на матрицу преобразования

void rsmatrixRotate ( rs_matrix4x4 * m, float hrot, float x, float y, float z);
Параметры
м Матрица для изменения.
гнить Сколько вращения нужно сделать, в градусах.
х X компонент вектора, который является осью вращения.
й Y компонент вектора, который является осью вращения.
я Z -компонент вектора, который является осью вращения.

Умножьте матрицу M на матрицу вращения.

Эта функция изменяет матрицу преобразования, чтобы сначала сделать вращение. Ось вращения - вектор (x, y, z) .

Чтобы применить это комбинированное преобразование к вектору, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

Rsmatrixscale : примените масштабирование к матрице преобразования

void rsmatrixscale ( rs_matrix4x4 * m, float x, float y, float z);
Параметры
м Матрица для изменения.
х Множественные, чтобы масштабировать компоненты x.
й Множественные, чтобы масштабировать компоненты Y.
я Множественные, чтобы масштабировать компоненты Z.

Умножьте матрицу M на матрицу масштабирования.

Эта функция изменяет матрицу преобразования, чтобы сначала сделать масштабирование. При масштабировании каждый компонент вектора умножается на число. Это число может быть отрицательным.

Чтобы применить это комбинированное преобразование к вектору, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

rsmatrixset : установить один элемент

void rsmatrixset ( rs_matrix2x2 * m, uint32_t col, uint32_t row, float v);
void rsmatrixset ( rs_matrix3x3 * m, uint32_t col, uint32_t row, float v);
void rsmatrixset ( rs_matrix4x4 * m, uint32_t col, uint32_t row, float v);
Параметры
м Матрица, которая будет изменена.
столбец Столбец на основе нуля элемента, который будет установлен.
ряд Ноль строка элемента будет установлен.
в Значение для установки.

Установите элемент матрицы.

ПРЕДУПРЕЖДЕНИЕ: Порядок столбца и параметров строки может быть неожиданным.

Rsmatrixtranslate : примените перевод к матрице преобразования

void rsmatrixtranslate ( rs_matrix4x4 * m, float x, float y, float z);
Параметры
м Матрица для изменения.
х Номер, чтобы добавить в каждый x компонент.
й Номер, чтобы добавить в каждый компонент Y.
я Номер для добавления в каждый z -компонент.

Умножьте матрицу M на матрицу перевода.

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

Чтобы применить это комбинированное преобразование к вектору, умножьте вектор на созданную матрицу, используя rsmatrixmultiply ().

Rsmatrixtranspose : Transpepe A Matrix Place

void rsmatrixtranspose ( rs_matrix2x2 * m);
void rsmatrixtranspose ( rs_matrix3x3 * m);
void rsmatrixtranspose ( rs_matrix4x4 * m);
Параметры
м Матрица для транспонирования.

Транспонировать матрицу М на месте.