Hàm ma trận RenderScript

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ố
viewProjMa trận để trích xuất các mặt phẳng.
tráiMáy bay bên trái.
phảiMáy bay bên phải.
nửa đầu lượt đấuMáy bay trên cùng.
nửa sau lượt đấuMáy bay dưới cùng.
ở gầnGần máy bay.
xaMá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ầufloat4 biểu thị hình cầu.
tráiMáy bay bên trái.
phảiMáy bay bên phải.
nửa đầu lượt đấuMáy bay trên cùng.
nửa sau lượt đấuMáy bay dưới cùng.
ở gầnGần máy bay.
xaMá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ố
mMa trận để trích xuất phần tử.
cộtCột dựa trên 0 của phần tử cần trích xuất.
hàngHà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ố
mMa 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ố
mMa 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ố
đíchMa trận cần thiết lập.
mảngMả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ồnMa 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ố
mMa 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ố
mMa 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ố
mMa trận cần thiết lập.
CANNOT TRANSLATEMa trận bên trái của sản phẩm.
rhMa 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ố
mMa 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ố
mMa trận cần thiết lập.
láng giềngTrường nhìn, tính bằng độ dọc theo trục Y.
khía cạnhTỷ lệ x / y.
ở gầnGần máy bay cắt đoạn.
xaMá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ố
mMa trận cần thiết lập.
mục đíchMức độ xoay, tính bằng độ.
lầnThành phần X của vectơ là trục quay.
yThành phần Y của vectơ là trục quay.
zThà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ố
mMa trận cần thiết lập.
lầnNhiều để mở rộng thành phần x theo đó.
yNhiều để mở rộng các thành phần y theo đó.
zNhiề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ố
mMa trận cần thiết lập.
lầnSố cần thêm vào mỗi thành phần x.
ySố cần thêm vào mỗi thành phần y.
zSố 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ố
mMa trận bên trái của sản phẩm và ma trận cần được thiết lập.
rhMa 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ố
mMa trận để sửa đổi.
mục đíchMức độ xoay, tính bằng độ.
lầnThành phần X của vectơ là trục quay.
yThành phần Y của vectơ là trục quay.
zThà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ố
mMa trận để sửa đổi.
lầnNhiều để mở rộng thành phần x theo đó.
yNhiều để mở rộng các thành phần y theo đó.
zNhiề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ố
mMa trận sẽ được sửa đổi.
cộtCột dựa trên 0 của phần tử sẽ được đặt.
hàngHàng dựa trên 0 của phần tử cần đặt.
so vớiGiá 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ố
mMa trận để sửa đổi.
lầnSố cần thêm vào mỗi thành phần x.
ySố cần thêm vào mỗi thành phần y.
zSố 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ố
mMa trận để hoán vị.

Hoán vị ma trận m tại chỗ.