RenderScript 매트릭스 함수

개요

이러한 함수를 사용하면 순위 2x2, 3x3, 4x4의 정사각형 행렬을 조작할 수 있습니다. 특히 그래픽 변환에 유용하며 OpenGL과 호환됩니다.

행과 열에는 0부터 시작하는 색인을 사용합니다. 예를 들어 rs_행렬4x4의 마지막 요소는 (3, 3)에서 찾을 수 있습니다.

RenderScript는 열 주 행렬과 열 기반 벡터를 사용합니다. 벡터 변환은 rsMatrixMultiply()에서 제공하는 (matrix * vector)와 같은 벡터를 사후 곱하는 방식으로 이루어집니다.

한 번에 2개의 변환을 수행하는 변환 행렬을 만들려면 두 개의 소스 행렬에 첫 번째 변환을 오른쪽 인수로 곱합니다. 예를 들어 s1 다음에 s2를 적용하는 변환 행렬을 생성하려면 rsMatrixLoadMultiply(&combined, &s2, &s1)를 호출합니다. 이는 s2 * (s1 * v)((s2 * s1) * v)에서 파생됩니다.

변환 행렬을 만드는 함수에는 rsMatrixLoadTransformation 및 rsMatrixTransformation 두 가지 스타일이 있습니다. 전자의 스타일은 단순히 변환 행렬을 첫 번째 인수에 저장합니다. 후자는 새 변환이 먼저 발생하도록 기존 변환 매트릭스를 수정합니다. 예를 들어 이미 배율 조정을 수행하고 있는 행렬에서 rsMatrixTranslate()를 호출하는 경우, 벡터에 적용될 때 결과 행렬이 먼저 변환을 수행한 다음 배율을 조정합니다.

요약

함수
rsExtractFrustumPlanes 절두체 평면 컴퓨팅
rsIsSphereInFrustum 구가 절두체 평면 내에 있는지 확인
rsMatrixGet 요소 1개 가져오기
rsMatrixInverse 행렬을 제자리에 반전합니다.
rsMatrixInverseTranspose 행렬을 반전 및 전치합니다.
rsMatrixLoad 행렬 로드 또는 복사
rsMatrixLoadFrustum 절두체 투영 행렬 로드
rsMatrixLoadIdentity 단위행렬 로드
rsMatrixLoadMultiply 두 행렬을 곱합니다.
rsMatrixLoadOrtho 직교 투영 행렬 로드
rsMatrixLoadPerspective 원근 투영 행렬 로드
rsMatrixLoadRotation 회전 행렬 로드
rsMatrixLoadScale 확장 행렬 로드
rsMatrixLoadTranslate 변환 행렬 로드
rsMatrixMultiply 행렬에 벡터 또는 다른 행렬 곱하기
rsMatrixRotation 변환 행렬에 회전 적용
rsMatrixScale 변환 행렬에 크기 조정 적용
rsMatrixSet 요소 1개 설정
rsMatrixTranslate 변환 행렬에 변환 적용
rsMatrixTranspose 행렬 자리 바꾸기

함수

rsExtractFrustumPlanes : 절두체 영역 컴퓨팅

void rsExtractFrustumPlanes(const rs_matrix4x4* viewProj, float4* left, float4* righ, float4* top, float4* bottom, float4* near, float4* 멀리); API 수준 24에 추가되었습니다.
void rsExtractFrustumPlanes(const rs_matrix4x4* viewProj, float4* 왼쪽, float4* 오른쪽, float4* 상단, float4* 하단, float4* Near, float4* 멀리); API 수준 24 이상에서 삭제되었습니다.
매개변수
viewProj평면을 추출할 행렬입니다.
왼쪽왼쪽 평면
오른쪽오른쪽 평면
상단상단 평면
하단하단 평면
근처비행기 근처입니다.
멀리 있는 비행기예요.
Righ

뷰 투영 행렬에서 절두체 평면 6개 계산

rsIsSphereInFrustum : 구가 절두체 평면 내에 있는지 확인합니다.

bool rsIsSphereInFrustum(float4* sphere, float4* left, float4* right, float4* top, float4* bottom, float4* near, float4* 멀리);
매개변수
구를 나타내는 float4입니다.
왼쪽왼쪽 평면
오른쪽오른쪽 평면
상단상단 평면
하단하단 평면
근처비행기 근처입니다.
멀리 있는 비행기예요.

구가 절두체 6개 평면 내에 있으면 true를 반환합니다.

rsMatrixGet : 요소 1개 가져오기

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);
매개변수
요소를 추출할 행렬입니다.
추출할 요소의 0부터 시작하는 열입니다.
추출할 요소의 0부터 시작하는 행입니다.

행렬의 요소 하나를 반환합니다.

경고: 열과 행 매개변수의 순서는 예기치 않을 수 있습니다.

rsMatrixInverse : 행렬을 반전합니다.

bool rsMatrixInverse(rs_행렬4x4* m);
매개변수
반전할 매트릭스입니다.

행렬이 성공적으로 반전되면 true를 반환합니다.

rsMatrixInverseTranspose : 행렬을 반전 및 전치합니다.

bool rsMatrixInverseTranspose(rs_행렬4x4* 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_행렬2x2를 rs_행렬4x4에 로드하면 다음과 같은 이점이 있습니다.

M00 M01 0.0 0.0
M10 M11 0.0 0.0
0.0 0.0 1.0 0.0
0.0 0.0 0.0 1.0

rsMatrixLoadFrustum : 절두체 투영 행렬 로드

void rsMatrixLoadFrustum(rs_행렬4x4* m, float left, float right, float bottom, float top, float near, float 멀리);
매개변수
설정할 매트릭스입니다.
왼쪽
오른쪽
하단
상단
근처

절두체 투영 행렬을 구성하여 6개의 클리핑 평면 left, right, bottom, top, near, far으로 식별된 상자를 변환합니다.

이 투영을 벡터에 적용하려면 rsMatrixMultiply()를 사용하여 생성된 행렬과 벡터를 곱합니다.

rsMatrixLoadIdentity : ID 행렬 로드

void rsMatrixLoadIdentity(rs_Matrix2x2* m);
void rsMatrixLoadIdentity(rs_행렬3x3* m);
void rsMatrixLoadIdentity(rs_Matrix4x4* m);
매개변수
설정할 매트릭스입니다.

행렬의 원소를 단위행렬로 설정합니다.

rsMatrixLoadMultiply : 두 행렬 곱하기

void rsMatrixLoadMultiply(rs_행렬2x2* m, const rs_행렬2x2* lhs, const rs_Matrix2x2* rhs);
void rsMatrixLoadMultiply(rs_행렬3x3* m, const rs_행렬3x3* lhs, const rs_Matrix3x3* rhs);
void rsMatrixLoadMultiply(rs_행렬4x4* m, const rs_행렬4x4* lhs, const rs_Matrix4x4* rhs);
매개변수
설정할 매트릭스입니다.
LS곱의 왼쪽 행렬입니다.
RHS곱의 오른쪽 행렬입니다.

m을 lhs * rhs의 행렬 곱으로 설정합니다.

4x4 변환 행렬 2개를 결합하려면 두 번째 변환 행렬에 첫 번째 변환 행렬을 곱합니다. 예를 들어 변환 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, float left, float right, float bottom, float top, float near, float 멀리);
매개변수
설정할 매트릭스입니다.
왼쪽
오른쪽
하단
상단
근처

직각 투영 행렬을 구성하여 6개의 클리핑 평면 left, right, bottom, top, near, far으로 식별되는 상자를 모서리가 (-1, -1, -1)에 있고 반대쪽이 (1, 1, 1)에 있는 단위 정육면체로 변환합니다.

이 투영을 벡터에 적용하려면 rsMatrixMultiply()를 사용하여 생성된 행렬과 벡터를 곱합니다.

https://en.wikipedia.org/wiki/Orthographic_projection 을 참조하세요 .

rsMatrixLoadPerspective : 원근 투영 행렬 로드

void rsMatrixLoadPerspective(rs_Matrix4x4* m, float fovy, float 카테고리, float near, float Far);
매개변수
설정할 매트릭스입니다.
포비Y축을 따라 표시되는 시야각입니다(단위: 도).
관점x / y 비율
근처클리핑 평면에 근접
클리핑 평면이 매우 넓습니다.

대칭 시야를 가정하여 원근 투영 행렬을 작성합니다.

이 투영을 벡터에 적용하려면 rsMatrixMultiply()를 사용하여 생성된 행렬과 벡터를 곱합니다.

rsMatrixLoadRotation : 회전 행렬 로드

void rsMatrixLoadRotation(rs_Matrix4x4* m, float rot, float x, float y, float z);
매개변수
설정할 매트릭스입니다.
부패수행할 회전 정도입니다(단위: 도).
x회전의 축인 벡터의 X 구성요소입니다.
y회전의 축인 벡터의 Y 구성요소입니다.
z회전의 축인 벡터의 Z 구성요소입니다.

이 함수는 회전 행렬을 만듭니다. 회전 축은 (x, y, z) 벡터입니다.

벡터를 회전하려면 rsMatrixMultiply()를 사용하여 생성된 행렬과 벡터를 곱합니다.

https://en.wikipedia.org/wiki/Rotation_matrix 를 참조하세요 .

rsMatrixLoadScale : 확장 행렬 로드

void rsMatrixLoadScale(rs_Matrix4x4* m, float x, float y, float z);
매개변수
설정할 매트릭스입니다.
xx 구성요소의 크기를 조정할 여러 측정항목입니다.
yy 구성요소를 확장하기 위한 복수입니다.
zz 구성요소의 크기를 조정할 여러 개

이 함수는 벡터의 각 구성요소에 숫자를 곱하는 크기 조정 행렬을 만듭니다. 이 숫자는 음수일 수 있습니다.

벡터를 조정하려면 rsMatrixMultiply()를 사용하여 생성된 행렬과 벡터를 곱합니다.

rsMatrixLoadTranslate : 변환 행렬 로드

void rsMatrixLoadTranslate(rs_Matrix4x4* m, float x, float y, float z);
매개변수
설정할 매트릭스입니다.
x각 x 구성요소에 추가할 숫자입니다.
y각 y 구성요소에 추가할 숫자입니다.
z각 z 구성요소에 추가할 숫자입니다.

이 함수는 평행이동 행렬을 만들고, 벡터의 각 요소에 숫자를 추가합니다.

벡터를 변환하려면 rsMatrixMultiply()를 사용하여 생성된 행렬과 벡터를 곱합니다.

rsMatrixMultiply : 행렬에 벡터 또는 다른 행렬 곱하기

float2 rsMatrixMultiply(const rs_Matrix2x2* m, float2 in); API 수준 14에 추가되었습니다.
float2 rsMatrixMultiply(rs_행렬2x2* 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_행렬2x2* m, const rs_Matrix2x2* rhs);
void rsMatrixMultiply(rs_행렬3x3* m, const rs_matrix3x3* rhs);
void rsMatrixMultiply(rs_행렬4x4* m, const rs_Matrix4x4* rhs);
매개변수
곱의 왼쪽 행렬과 설정할 행렬입니다.
RHS곱의 오른쪽 행렬입니다.
인치

행렬 변이별 행렬의 경우 m을 행렬곱 m * rhs로 설정합니다.

이 함수를 사용하여 2개의 4x4 변환 행렬을 결합하면 결과 행렬은 먼저 rhs 변환 다음에 원래의 m 변환을 수행하는 것과 같습니다.

벡터 변이 행렬의 경우, 행렬의 곱셈 후 행렬(예: m * in

float3을 rs_행렬4x4에 곱하면 벡터는 (1)으로 확장됩니다.

float2를 rs_행렬4x4에 곱하면 벡터는 (0, 1)로 확장됩니다.

float2를 rs_행렬3x3에 곱하면 벡터는 (0)으로 확장됩니다.

API 14부터 이 함수는 const 행렬을 첫 번째 인수로 사용합니다.

rsMatrixRotation : 변환 행렬에 회전 적용

void rsMatrixRotation(rs_행렬4x4* m, float rot, float x, float y, float z);
매개변수
수정할 매트릭스입니다.
부패수행할 회전 정도입니다(단위: 도).
x회전의 축인 벡터의 X 구성요소입니다.
y회전의 축인 벡터의 Y 구성요소입니다.
z회전의 축인 벡터의 Z 구성요소입니다.

행렬 m에 회전 행렬을 곱합니다.

이 함수는 먼저 회전을 실행하도록 변환 매트릭스를 수정합니다. 회전 축은 (x, y, z) 벡터입니다.

결합된 변환을 벡터에 적용하려면 rsMatrixMultiply()를 사용하여 생성된 행렬과 벡터를 곱합니다.

rsMatrixScale : 변환 행렬에 크기 조정 적용

void rsMatrixScale(rs_행렬4x4* m, float x, float y, float z);
매개변수
수정할 매트릭스입니다.
xx 구성요소의 크기를 조정할 여러 측정항목입니다.
yy 구성요소를 확장하기 위한 복수입니다.
zz 구성요소의 크기를 조정할 여러 개

행렬 m에 크기 조정 행렬을 곱합니다.

이 함수는 먼저 크기 조정을 수행하도록 변환 매트릭스를 수정합니다. 배율을 조정할 때는 벡터의 각 구성요소에 숫자를 곱합니다. 이 숫자는 음수일 수 있습니다.

결합된 변환을 벡터에 적용하려면 rsMatrixMultiply()를 사용하여 생성된 행렬과 벡터를 곱합니다.

rsMatrixSet : 요소 1개 설정

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_Matrix4* m, uint32_t col, uint32_t row, float v);
매개변수
수정할 매트릭스입니다.
설정할 요소의 0부터 시작하는 열입니다.
설정할 요소의 0부터 시작하는 행입니다.
v설정할 값입니다.

행렬의 요소를 설정합니다.

경고: 열과 행 매개변수의 순서는 예기치 않을 수 있습니다.

rsMatrixTranslate : 변환 행렬에 변환 적용

void rsMatrixTranslate(rs_행렬4x4* m, float x, float y, float z);
매개변수
수정할 매트릭스입니다.
x각 x 구성요소에 추가할 숫자입니다.
y각 y 구성요소에 추가할 숫자입니다.
z각 z 구성요소에 추가할 숫자입니다.

행렬 m에 평행이동 행렬을 곱합니다.

이 함수는 먼저 변환을 실행하도록 변환 매트릭스를 수정합니다. 변환할 때 벡터의 각 구성요소에 숫자가 추가됩니다.

결합된 변환을 벡터에 적용하려면 rsMatrixMultiply()를 사용하여 생성된 행렬과 벡터를 곱합니다.

rsMatrixTranspose : 행렬의 자리 바꾸기

void rsMatrixTranspose(rs_matrix2x2* m);
void rsMatrixTranspose(rs_Matrix3x3* m);
void rsMatrixTranspose(rs_Matrix4x4* m);
매개변수
전치할 매트릭스입니다.

행렬 m을 제자리에 바꾸세요.