Tổng quan
Các hàm này cho phép bạn thao tác với các ma trận vuông bậc 2x2, 3x3 và 4x4. Các hàm này đặc biệt hữu ích cho các phép biến đổi đồ hoạ và tương thích với OpenGL.
Chúng tôi sử dụng chỉ mục dựa trên 0 cho các hàng và cột. Ví dụ: phần tử cuối cùng của rs_ma trận4x4 được tìm thấy tại (3, 3).
RenderScript sử dụng ma trận chính cột và vectơ dựa trên cột. Việc biến đổi
một vectơ được thực hiện bằng cách nhân sau vectơ, ví dụ: (matrix * vector)
,
như được rsMatrixPeople() cung cấp.
Để tạo một ma trận biến đổi thực hiện 2 phép biến đổi cùng một lúc, hãy nhân 2 ma trận nguồn với phép biến đổi đầu tiên làm đối số đúng. Ví dụ: để tạo một ma trận biến đổi áp dụng phép biến đổi s1 rồi đến s2, hãy gọi rsMatrixLoadMultiply(&combined, &s2, &s1)
.
Giá trị này bắt nguồn từ s2 * (s1 * v)
, là (s2 * s1) * v
.
Chúng tôi có hai kiểu hàm để tạo ma trận biến đổi: rsMatrixLoadTransformation và rsMatrixTransformation. Kiểu cũ chỉ lưu trữ ma trận biến đổi trong đối số đầu tiên. Phần sau sửa đổi ma trận biến đổi có sẵn để phép biến đổi mới xảy ra trước. Ví dụ: nếu bạn gọi rsMatrixTranslate() trên một ma trận đã thực hiện chuyển tỷ lệ, thì ma trận thu được khi được áp dụng cho vectơ trước tiên sẽ thực hiện việc dịch, sau đó chuyển tỷ lệ.
Tóm tắt
Hàm | |
---|---|
rsExtractFrustumPlanes | Tính mặt phẳng hình phẳng |
rsIsSphereInFrustum | Kiểm tra xem một hình cầu có nằm trong các mặt phẳng hình cầu hay không |
rsMatrixGet | Nhận một phần tử |
rsMatrixInverse | Nghịch đảo ma trận tại chỗ |
rsMatrixInverseTranspose | Đảo ngược và hoán vị ma trận tại chỗ |
rsMatrixLoad | Tải hoặc sao chép ma trận |
rsMatrixLoadFrustum | Tải ma trận chiếu hình đáy |
rsMatrixLoadIdentity | Tải ma trận nhận dạng |
rsMatrixLoad nhân | Nhân 2 ma trận |
rsMatrixLoadOrtho | Tải ma trận chiếu chỉnh hình |
rsMatrixLoadPerspective | Tải ma trận chiếu phối cảnh |
rsMatrixLoadLoad | Tải ma trận xoay |
rsMatrixLoadScale | Tải ma trận tỷ lệ |
rsMatrixLoadCompile | Tải ma trận dịch |
rsMatrixtrix | Nhân ma trận với một vectơ hoặc một ma trận khác |
rsMatrixRotate | Áp dụng phép xoay cho ma trận biến đổi |
rsMatrixScale | Áp dụng tỷ lệ cho ma trận biến đổi |
rsMatrixSet | Thiết lập một phần tử |
rsMatrixTranslate | Áp dụng bản dịch cho ma trận biến đổi |
rsMatrixTranspose | Hoán vị một địa điểm ma trận |
Hàm
rsExtractFrustumPlanes : Tính toán mặt phẳng hình phẳng
void rsExtractFrustumPlanes(const rs_ma4x4* viewProj, float4* left, float4* righ, float4* top, float4* bottom, float4* gần, float4* xa); | Đã thêm vào API cấp 24 |
void rsExtractFrustumPlanes(const rs_trix4x4* viewProj, float4* trái, float4* phải, float4* trên cùng, float4* dưới cùng, float4* gần, float4* xa); | Đã xoá khỏi API cấp 24 trở lên |
Tham số
viewProj | Ma trận để trích xuất các mặt phẳng. |
---|---|
trái | Máy bay bên trái. |
phải | Máy bay bên phải. |
nửa đầu lượt đấu | Máy bay trên cùng. |
nửa sau lượt đấu | Máy bay dưới cùng. |
ở gần | Gần máy bay. |
xa | Máy bay xa. |
trả lời |
Tính 6 mặt phẳng đáy từ ma trận chiếu khung hiển thị
rsIsSphereInFrustum : Kiểm tra xem một hình cầu có nằm trong mặt phẳng hình khối hay không
bool rsIsSphereInFrustum(float4* hình cầu, float4* trái, float4* bên phải, float4* trên cùng, float4* dưới cùng, float4* gần, float4* xa); |
Tham số
hình cầu | float4 biểu thị hình cầu. |
---|---|
trái | Máy bay bên trái. |
phải | Máy bay bên phải. |
nửa đầu lượt đấu | Máy bay trên cùng. |
nửa sau lượt đấu | Máy bay dưới cùng. |
ở gần | Gần máy bay. |
xa | Máy bay xa. |
Trả về true nếu hình cầu nằm trong 6 mặt phẳng hình đáy.
rsMatrixGet : Tải một phần tử
float rsMatrixGet(const rs_matrix2x2* m, uint32_t col, hàng uint32_t); | |
float rsMatrixGet(const rs_matrix3x3* m, uint32_t col, hàng uint32_t); | |
float rsMatrixGet(const rs_matrix4x4* m, uint32_t col, hàng uint32_t); |
Tham số
m | Ma trận để trích xuất phần tử. |
---|---|
cột | Cột dựa trên 0 của phần tử cần trích xuất. |
hàng | Hàng dựa trên 0 của phần tử cần trích xuất. |
Trả về một phần tử của ma trận.
Cảnh báo: Thứ tự của các thông số cột và hàng có thể khác với thứ tự.
rsMatrixInverse : Đảo ngược ma trận tại chỗ
bool rsMatrixInverse(rs_matrix4x4* m); |
Tham số
m | Ma trận để đảo ngược. |
---|
Trả về true nếu ma trận được đảo ngược thành công.
rsMatrixInverseTranspose : Đảo ngược và hoán vị một ma trận tại chỗ
bool rsMatrixInverseTranspose(rs_matrix4x4* m); |
Tham số
m | Ma trận để sửa đổi. |
---|
Trước tiên, ma trận được đảo ngược rồi hoán vị. Trả về true nếu ma trận được đảo ngược thành công.
rsMatrixLoad : Tải hoặc sao chép một ma trận
void rsMatrixLoad(rs_matrix2x2* đích, mảng const float*); | |
void rsMatrixLoad(rs_matrix2x2* đích, nguồn rs_matrix2x2* const); | |
void rsMatrixLoad(rs_matrix3x3* đích, mảng const float*); | |
void rsMatrixLoad(đích đến rs_matrix3x3*, nguồn const rs_trix3x3*); | |
void rsMatrixLoad(rs_trix4x4* đích, mảng const float*); | |
void rsMatrixLoad(đích đến rs_matrix4x4*, nguồn const rs_matrix2x2*); | |
void rsMatrixLoad(đích đến rs_ma4x4*, nguồn const rs_matrix3x3*); | |
void rsMatrixLoad(đích đến rs_ma4x4*, nguồn const rs_matrix4x4*); |
Tham số
đích | Ma trận cần thiết lập. |
---|---|
mảng | Mảng giá trị để đặt ma trận. Các mảng này nên dài 4, 9 hoặc 16 số thực có độ chính xác đơn, tuỳ thuộc vào kích thước ma trận. |
nguồn | Ma trận nguồn. |
Đặt các phần tử của ma trận từ một mảng dấu phẩy động hoặc từ một ma trận khác.
Nếu tải từ một mảng, số thực dấu phẩy động phải theo thứ tự chính theo hàng, tức là phần tử a row 0, column 0
phải ở đầu tiên, tiếp theo là phần tử ở row 0, column 1
, v.v.
Nếu tải từ một ma trận và nguồn nhỏ hơn đích đến, thì phần còn lại của đích đến sẽ chứa các phần tử của ma trận nhận dạng. Ví dụ: tải rs_ma trận2x2 vào rs_ma trận4x4 sẽ mang lại:
phút | m01 | 0,0 | 0,0 |
m10 | m11 | 0,0 | 0,0 |
0,0 | 0,0 | 1 | 0,0 |
0,0 | 0,0 | 0,0 | 1 |
rsMatrixLoadFrustum : Tải ma trận chiếu hình đáy
void rsMatrixLoadFrustum(rs_matrix4x4* m, nổi bên trái, nổi bên phải, nổi dưới cùng, nổi trên cùng, nổi gần, nổi ở xa); |
Tham số
m | Ma trận cần thiết lập. |
---|---|
trái | |
phải | |
nửa sau lượt đấu | |
nửa đầu lượt đấu | |
ở gần | |
xa |
Xây dựng một ma trận chiếu phẳng, biến đổi hộp xác định được bằng 6 mặt phẳng cắt left, right, bottom, top, near, far
.
Để áp dụng phép chiếu này cho một vectơ, hãy nhân vectơ với ma trận đã tạo bằng cách sử dụng rsMatrixtăng().
rsMatrixLoadIdentity : Tải ma trận nhận dạng
khoảng trống rsMatrixLoadIdentity(rs_matrix2x2* m); | |
khoảng trống rsMatrixLoadIdentity(rs_matrix3x3* m); | |
khoảng trống rsMatrixLoadIdentity(rs_matrix4x4* m); |
Tham số
m | Ma trận cần thiết lập. |
---|
Đặt các phần tử của ma trận thành ma trận đơn vị.
rsMatrixLoadText : Nhân hai ma trận
void rsMatrixLoadOnce(rs_matrix2x2* m, const rs_matrix2x2* lhs, const rs_trix2x2* rhs); | |
void rsMatrixLoadtăng(rs_matrix3x3* m, const rs_matrix3x3* lhs, const rs_matrix3x3* rhs); | |
void rsMatrixLoadtăng(rs_matrix4x4* m, const rs_matrix4x4* lhs, const rs_trix4x4* rhs); |
Tham số
m | Ma trận cần thiết lập. |
---|---|
CANNOT TRANSLATE | Ma trận bên trái của sản phẩm. |
rh | Ma trận bên phải của sản phẩm. |
Đặt m thành tích ma trận của lhs * rhs
.
Để kết hợp 2 ma trận biến đổi 4x4, hãy nhân ma trận biến đổi thứ hai với ma trận biến đổi thứ nhất. Ví dụ: để tạo ma trận biến đổi áp dụng phép biến đổi s1 rồi đến s2, hãy gọi rsMatrixLoadMultiply(&combined, &s2, &s1)
.
Cảnh báo: Trước phiên bản 21, việc lưu trữ kết quả trở lại vào ma trận bên phải không được hỗ trợ và sẽ dẫn đến hành vi không xác định. Thay vào đó, hãy sử dụng rsMatrixMulitply. Ví dụ: thay vì thực hiện rsMatrixLoad Individual (&m2r, &m2r, &m2l), hãy sử dụng rsMatrixtrix (&m2r, &m2l). rsMatrixLoadFound (&m2l, &m2r, &m2l) sẽ hoạt động như mong đợi.
rsMatrixLoadOrtho : Tải ma trận chiếu chỉnh hình
void rsMatrixLoadOrtho(rs_matrix4x4* m, nổi bên trái, nổi bên phải, nổi dưới cùng, nổi trên cùng, nổi gần, nổi ở xa); |
Tham số
m | Ma trận cần thiết lập. |
---|---|
trái | |
phải | |
nửa sau lượt đấu | |
nửa đầu lượt đấu | |
ở gần | |
xa |
Xây dựng một ma trận chiếu chỉnh hình, biến đổi hộp được xác định bằng 6 mặt phẳng cắt left, right, bottom, top, near, far
thành một hình lập phương đơn vị với một góc tại (-1, -1, -1)
và ngược lại tại (1, 1, 1)
.
Để áp dụng phép chiếu này cho một vectơ, hãy nhân vectơ với ma trận đã tạo bằng cách sử dụng rsMatrixtăng().
Xem https://en.wikipedia.org/wiki/Orthographic_projection .
rsMatrixLoadPerspective : Tải một ma trận chiếu phối cảnh
void rsMatrixLoadPerspective(rs_trix4x4* m, float fovy, floating, float gần, nổi xa); |
Tham số
m | Ma trận cần thiết lập. |
---|---|
láng giềng | Trường nhìn, tính bằng độ dọc theo trục Y. |
khía cạnh | Tỷ lệ x / y. |
ở gần | Gần máy bay cắt đoạn. |
xa | Máy bay cắt xa. |
Xây dựng ma trận chiếu phối cảnh, giả sử trường nhìn đối xứng.
Để áp dụng phép chiếu này cho một vectơ, hãy nhân vectơ với ma trận đã tạo bằng cách sử dụng rsMatrixtăng().
rsMatrixLoadRotate : Tải một ma trận xoay
void rsMatrixLoadLoad(rs_matrix4x4* m, float float, float x, float y, float z); |
Tham số
m | Ma trận cần thiết lập. |
---|---|
mục đích | Mức độ xoay, tính bằng độ. |
lần | Thành phần X của vectơ là trục quay. |
y | Thành phần Y của vectơ là trục quay. |
z | Thành phần Z của vectơ là trục quay. |
Hàm này tạo một ma trận xoay. Trục quay là vectơ (x, y, z)
.
Để xoay một vectơ, hãy nhân vectơ với ma trận đã tạo bằng cách sử dụng rsMatrixtăng().
Xem https://en.wikipedia.org/wiki/Rotation_trix .
rsMatrixLoadScale : Tải ma trận tỷ lệ
void rsMatrixLoadScale(rs_matrix4x4* m, số thực x, số thực y, số thực z); |
Tham số
m | Ma trận cần thiết lập. |
---|---|
lần | Nhiều để mở rộng thành phần x theo đó. |
y | Nhiều để mở rộng các thành phần y theo đó. |
z | Nhiều để điều chỉnh các thành phần z theo tỷ lệ. |
Hàm này tạo một ma trận tỷ lệ, trong đó mỗi thành phần của vectơ được nhân với một số. Số này có thể là số âm.
Để điều chỉnh tỷ lệ vectơ, hãy nhân vectơ với ma trận đã tạo bằng rsMatrixPeople().
rsMatrixLoadCompile : Tải ma trận dịch
void rsMatrixLoadTranslate(rs_matrix4x4* m, số thực x, số thực dấu phẩy động y, số thực z); |
Tham số
m | Ma trận cần thiết lập. |
---|---|
lần | Số cần thêm vào mỗi thành phần x. |
y | Số cần thêm vào mỗi thành phần y. |
z | Số cần thêm vào mỗi thành phần z. |
Hàm này tạo một ma trận dịch, trong đó một số sẽ được thêm vào mỗi phần tử của vectơ.
Để dịch vectơ, hãy nhân vectơ với ma trận đã tạo bằng rsMatrixPeople().
rsMatrixPeople : Nhân một ma trận với một vectơ hoặc một ma trận khác
float2 rsMatrixtăng(const rs_ma trận2x2* m, float2 in); | Đã thêm vào API cấp 14 |
float2 rsMatrixtăng(rs_matrix2x2* m, float2 in); | Đã xoá khỏi API cấp 14 trở lên |
float3 rsMatrixTăng(const rs_ma trận3x3* m, float2 in); | Đã thêm vào API cấp 14 |
float3 rsMatrixtăng(const rs_ma trận3x3* m, float3 in); | Đã thêm vào API cấp 14 |
float3 rsMatrixPeople(rs_matrix3x3* m, float2 in); | Đã xoá khỏi API cấp 14 trở lên |
float3 rsMatrixPeople(rs_matrix3x3* m, float3 in); | Đã xoá khỏi API cấp 14 trở lên |
float4 rsMatrixTăng(const rs_ma trận4x4* m, float2 in); | Đã thêm vào API cấp 14 |
float4 rsMatrixTăng(const rs_trix4x4* m, float3 in); | Đã thêm vào API cấp 14 |
float4 rsMatrixtăng(const rs_matrix4x4* m, float4 in); | Đã thêm vào API cấp 14 |
float4 rsMatrixTăng(rs_matrix4x4* m, float2 in); | Đã xoá khỏi API cấp 14 trở lên |
float4 rsMatrixtăng(rs_matrix4x4* m, float3 in); | Đã xoá khỏi API cấp 14 trở lên |
float4 rsMatrixtăng(rs_matrix4x4* m, float4 in); | Đã xoá khỏi API cấp 14 trở lên |
void rsMatrixText(rs_matrix2x2* m, const rs_matrix2x2* rhs); | |
void rsMatrixOnce(rs_matrix3x3* m, const rs_Matrix3x3* rhs); | |
void rsMatrixText(rs_matrix4x4* m, const rs_trix4x4* rhs); |
Tham số
m | Ma trận bên trái của sản phẩm và ma trận cần được thiết lập. |
---|---|
rh | Ma trận bên phải của sản phẩm. |
in |
Đối với ma trận theo biến thể ma trận, hãy đặt m thành sản phẩm ma trận m * rhs
.
Khi kết hợp 2 ma trận biến đổi 4x4 bằng hàm này, ma trận thu được sẽ tương ứng với việc thực hiện phép biến đổi rhs trước tiên, sau đó là phép biến đổi m ban đầu.
Đối với ma trận theo biến thể vectơ, hãy trả về phép nhân sau khi nhân vectơ với ma trận, tức là m * in
.
Khi nhân một float3 với rs_ma trận4x4, vectơ được mở rộng với (1).
Khi nhân một float2 với rs_Ma trận4x4, vectơ được mở rộng với (0, 1).
Khi nhân một float2 với rs_ma trận3x3, vectơ được mở rộng với (0).
Bắt đầu từ API 14, hàm này lấy ma trận const làm đối số đầu tiên.
rsMatrixRotate : Áp dụng chế độ xoay cho ma trận biến đổi
void rsMatrixPivot(rs_matrix4x4* m, float rot, float x, float y, float z); |
Tham số
m | Ma trận để sửa đổi. |
---|---|
mục đích | Mức độ xoay, tính bằng độ. |
lần | Thành phần X của vectơ là trục quay. |
y | Thành phần Y của vectơ là trục quay. |
z | Thành phần Z của vectơ là trục quay. |
Nhân ma trận m với ma trận xoay.
Hàm này sửa đổi một ma trận biến đổi để thực hiện việc xoay trước tiên. Trục xoay là vectơ (x, y, z)
.
Để áp dụng phép biến đổi kết hợp này cho một vectơ, hãy nhân vectơ với ma trận đã tạo bằng cách sử dụng rsMatrixTăng().
rsMatrixScale : Áp dụng tỷ lệ cho ma trận biến đổi
void rsMatrixScale(rs_matrix4x4* m, float x, float y, float z); |
Tham số
m | Ma trận để sửa đổi. |
---|---|
lần | Nhiều để mở rộng thành phần x theo đó. |
y | Nhiều để mở rộng các thành phần y theo đó. |
z | Nhiều để điều chỉnh các thành phần z theo tỷ lệ. |
Nhân ma trận m với ma trận tỷ lệ.
Hàm này sửa đổi ma trận biến đổi để điều chỉnh tỷ lệ trước tiên. Khi chia tỷ lệ, mỗi thành phần của vectơ sẽ được nhân với một số. Số này có thể là số âm.
Để áp dụng phép biến đổi kết hợp này cho một vectơ, hãy nhân vectơ với ma trận đã tạo bằng cách sử dụng rsMatrixTăng().
rsMatrixSet : Đặt một phần tử
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); |
Tham số
m | Ma trận sẽ được sửa đổi. |
---|---|
cột | Cột dựa trên 0 của phần tử sẽ được đặt. |
hàng | Hàng dựa trên 0 của phần tử cần đặt. |
so với | Giá trị cần đặt. |
Thiết lập một phần tử của ma trận.
Cảnh báo: Thứ tự của các thông số cột và hàng có thể khác với thứ tự.
rsMatrixTranslate : Áp dụng bản dịch cho ma trận biến đổi
void rsMatrixTranslate(rs_matrix4x4* m, float x, float y, float z); |
Tham số
m | Ma trận để sửa đổi. |
---|---|
lần | Số cần thêm vào mỗi thành phần x. |
y | Số cần thêm vào mỗi thành phần y. |
z | Số cần thêm vào mỗi thành phần z. |
Nhân ma trận m với ma trận dịch.
Hàm này sửa đổi ma trận biến đổi để thực hiện phép dịch trước. Khi dịch, một số sẽ được thêm vào mỗi thành phần của vectơ.
Để áp dụng phép biến đổi kết hợp này cho một vectơ, hãy nhân vectơ đó với ma trận đã tạo bằng cách sử dụng rsMatrixtăng().
rsMatrixTranspose : Hoán vị một địa điểm ma trận
void rsMatrixTranspose(rs_matrix2x2* m); | |
khoảng trống rsMatrixTranspose(rs_matrix3x3* m); | |
void rsMatrixTranspose(rs_matrix4x4* m); |
Tham số
m | Ma trận để hoán vị. |
---|
Hoán vị ma trận m tại chỗ.