개요
이러한 함수를 사용하면 순위 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); |
매개변수
분 | 설정할 매트릭스입니다. |
---|---|
x | x 구성요소의 크기를 조정할 여러 측정항목입니다. |
y | y 구성요소를 확장하기 위한 복수입니다. |
z | z 구성요소의 크기를 조정할 여러 개 |
이 함수는 벡터의 각 구성요소에 숫자를 곱하는 크기 조정 행렬을 만듭니다. 이 숫자는 음수일 수 있습니다.
벡터를 조정하려면 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); |
매개변수
분 | 수정할 매트릭스입니다. |
---|---|
x | x 구성요소의 크기를 조정할 여러 측정항목입니다. |
y | y 구성요소를 확장하기 위한 복수입니다. |
z | z 구성요소의 크기를 조정할 여러 개 |
행렬 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을 제자리에 바꾸세요.