Fungsi Matriks RenderScript

Ringkasan

Fungsi-fungsi ini memungkinkan Anda memanipulasi matriks kuadrat dengan peringkat 2x2, 3x3, dan 4x4. Library ini sangat berguna untuk transformasi grafis dan kompatibel dengan OpenGL.

Kami menggunakan indeks berbasis nol untuk baris dan kolom. Misalnya, elemen terakhir dari rs_matrix4x4 ditemukan di (3, 3).

RenderScript menggunakan matriks utama kolom dan vektor berbasis kolom. Transformasi vektor dilakukan dengan melakukan postmultiplying vektor, misalnya (matrix * vector), seperti yang disediakan oleh rsMatrixMultiply().

Untuk membuat matriks transformasi yang melakukan dua transformasi sekaligus, kalikan dua matriks sumber, dengan transformasi pertama sebagai argumen yang tepat. Misalnya, untuk membuat matriks transformasi yang menerapkan transformasi s1 diikuti dengan s2, panggil rsMatrixLoadMultiply(&combined, &s2, &s1). ID ini berasal dari s2 * (s1 * v), yang merupakan (s2 * s1) * v.

Kita memiliki dua gaya fungsi untuk membuat matriks transformasi: rsMatrixLoadTransformation dan rsMatrixTransformation. Gaya pertama hanya menyimpan matriks transformasi dalam argumen pertama. Yang kedua mengubah matriks transformasi yang sudah ada sehingga transformasi baru terjadi terlebih dahulu. Misalnya, jika Anda memanggil rsMatrixTranslate() pada matriks yang sudah melakukan penskalaan, matriks yang dihasilkan saat diterapkan ke vektor terlebih dahulu akan melakukan terjemahan, lalu penskalaan.

Ringkasan

Fungsi
rsExtractFrustumPlanes Menghitung bidang frustum
rsIsSphereInFrustum Memeriksa apakah bola berada di dalam bidang frustum
rsMatrixGet Mendapatkan satu elemen
rsMatrixInverse Membalikkan matriks yang telah diterapkan
rsMatrixInverseTranspose Membalikkan dan melakukan transposisi matriks di tempatnya
rsMatrixLoad Memuat atau menyalin matriks
rsMatrixLoadFrustum Memuat matriks proyeksi frustum
rsMatrixLoadIdentity Memuat matriks identitas
rsMatrixLoadMultiply Kalikan dua matriks
rsMatrixLoadOrtho Memuat matriks proyeksi ortografis
rsMatrixLoadPerspective Memuat matriks proyeksi perspektif
rsMatrixLoadRotate Memuat matriks rotasi
rsMatrixLoadScale Memuat matriks penskalaan
rsMatrixLoadTranslate Memuat matriks terjemahan
rsMatrixMultiply Mengalikan matriks dengan vektor atau matriks lain
rsMatrixRotate Menerapkan rotasi ke matriks transformasi
rsMatrixScale Menerapkan penskalaan ke matriks transformasi
rsMatrixSet Tetapkan satu elemen
rsMatrixTranslate Menerapkan terjemahan ke matriks transformasi
rsMatrixTranspose Transpose tempat matriks

Fungsi

rsExtractFrustumPlanes : Menghitung bidang frustum

void rsExtractFrustumPlanes(const rs_matrix4x4* viewProj, float4* left, float4* righ, float4* top, float4* bottom, float4* dekat, float4* jauh); Ditambahkan di API level 24
void rsExtractFrustumPlanes(const rs_matrix4x4* viewProj, float4* left, float4* kanan, float4* top, float4* bawah, float4* dekat, float4* jauh); Dihapus dari API level 24 dan yang lebih tinggi
Parameter
lihatProjMatriks untuk mengekstrak bidang.
leftPesawat kiri.
rightBidang kanan.
paruh pertama inningBidang atas.
paruh kedua inningBidang bawah.
dekatDi dekat pesawat.
jauhPesawat jauh.
righ

Menghitung 6 bidang frustum dari matriks proyeksi tampilan

rsIsSphereInFrustum : Memeriksa apakah bola berada di dalam bidang frustum

bool rsIsSphereInFrustum(float4* sphere, float4* kiri, float4* kanan, float4* atas, float4* bawah, float4* dekat, float4* jauh);
Parameter
bolafloat4 yang mewakili bola dunia.
leftPesawat kiri.
rightBidang kanan.
paruh pertama inningBidang atas.
paruh kedua inningBidang bawah.
dekatDi dekat pesawat.
jauhPesawat jauh.

Menampilkan nilai benar jika bola berada dalam 6 bidang frustum.

rsMatrixGet : Mendapatkan satu elemen

float rsMatrixGet(const rs_matrix2x2* m, uint32_t col, uint32_t baris);
float rsMatrixGet(const rs_matrix3x3* m, uint32_t col, uint32_t baris);
float rsMatrixGet(const rs_matrix4x4* m, uint32_t col, uint32_t baris);
Parameter
mMatriks untuk mengekstrak elemen.
kolomKolom berbasis nol dari elemen yang akan diekstrak.
barisBaris berbasis nol dari elemen yang akan diekstrak.

Menampilkan satu elemen matriks.

Peringatan: Urutan parameter kolom dan baris mungkin tidak terduga.

rsMatrixInverse : Membalikkan matriks yang diterapkan

bool rsMatrixInverse(rs_matrix4x4* m);
Parameter
mMatriks untuk dibalik.

Menampilkan nilai benar jika matriks berhasil dibalik.

rsMatrixInverseTranspose : Membalikkan dan melakukan transposisi matriks di tempat

bool rsMatrixInverseTranspose(rs_matrix4x4* m);
Parameter
mMatriks untuk dimodifikasi.

Matriks dibalik terlebih dahulu, lalu ditransposisikan. Menampilkan true (benar) jika matriks berhasil dibalik.

rsMatrixLoad : Memuat atau menyalin matriks

void rsMatrixLoad(rs_matrix2x2* destination, const float* array);
void rsMatrixLoad(rs_matrix2x2* destination, const rs_matrix2x2* source);
void rsMatrixLoad(rs_matrix3x3* destination, const float* array);
void rsMatrixLoad(rs_matrix3x3* destination, const rs_matrix3x3* source);
void rsMatrixLoad(rs_matrix4x4* destination, const float* array);
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);
Parameter
tujuanMatriks untuk ditetapkan.
arrayArray nilai yang akan ditetapkan matriksnya. Array ini harus 4, 9, atau 16 {i>float<i}, tergantung pada ukuran matriks.
sumberMatriks sumber.

Menetapkan elemen matriks dari array float atau dari matriks lain.

Jika dimuat dari array, float harus dalam urutan baris utama, yaitu elemen row 0, column 0 harus menjadi yang pertama, diikuti oleh elemen di row 0, column 1, dst.

Jika pemuatan dari matriks dan sumber lebih kecil dari tujuan, sisa tujuan akan diisi dengan elemen matriks identitas. Misalnya, memuat rs_matrix2x2 ke dalam rs_matrix4x4 akan menghasilkan:

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 : Memuat matriks proyeksi frustum

rsMatrixLoadFrustum(rs_matrix4x4* m, mengambang kiri, kanan mengambang, bagian bawah mengambang, mengambang atas, mengambang dekat, mengambang jauh);
Parameter
mMatriks untuk ditetapkan.
left
right
paruh kedua inning
paruh pertama inning
dekat
jauh

Membuat matriks proyeksi frustum, mengubah kotak yang diidentifikasi oleh enam bidang pemotongan left, right, bottom, top, near, far.

Untuk menerapkan proyeksi ini ke vektor, kalikan vektor dengan matriks yang dibuat menggunakan rsMatrixMultiply().

rsMatrixLoadIdentity : Memuat matriks identitas

void rsMatrixLoadIdentity(rs_matrix2x2* m);
void rsMatrixLoadIdentity(rs_matrix3x3* m);
void rsMatrixLoadIdentity(rs_matrix4x4* m);
Parameter
mMatriks untuk ditetapkan.

Tetapkan elemen matriks ke matriks identitas.

rsMatrixLoadMultiply : Mengalikan dua matriks

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);
Parameter
mMatriks untuk ditetapkan.
LSMMatriks sebelah kiri produk.
rhsMatriks kanan produk.

Menetapkan m ke produk matriks lhs * rhs.

Untuk menggabungkan dua matriks transformasi 4x4, kalikan matriks transformasi kedua dengan matriks transformasi pertama. Misalnya, untuk membuat matriks transformasi yang menerapkan transformasi s1 diikuti dengan s2, panggil rsMatrixLoadMultiply(&combined, &s2, &s1).

Peringatan: Sebelum versi 21, menyimpan hasil kembali ke matriks yang tepat tidak didukung dan akan menghasilkan perilaku yang tidak ditentukan. Sebagai gantinya, gunakan rsMatrixMulitply. Misalnya, daripada melakukan rsMatrixLoadMultiply (&m2r, &m2r, &m2l), gunakan rsMatrixMultiply (&m2r, &m2l). rsMatrixLoadMultiply (&m2l, &m2r, &m2l) berfungsi seperti yang diharapkan.

rsMatrixLoadOrtho : Memuat matriks proyeksi ortografis

rsMatrixLoadOrtho(rs_matrix4x4* m, {i>float kiri<i}, {i>float kanan<i}, float bottom, float top, float near, float jauh);
Parameter
mMatriks untuk ditetapkan.
left
right
paruh kedua inning
paruh pertama inning
dekat
jauh

Membuat matriks proyeksi ortografi, mengubah kotak yang diidentifikasi oleh enam bidang pemotongan left, right, bottom, top, near, far menjadi kubus satuan dengan sudut di (-1, -1, -1) dan sebaliknya di (1, 1, 1).

Untuk menerapkan proyeksi ini ke vektor, kalikan vektor dengan matriks yang dibuat menggunakan rsMatrixMultiply().

Lihat https://en.wikipedia.org/wiki/Orthographic_projection .

rsMatrixLoadPerspective : Memuat matriks proyeksi perspektif

rsMatrixLoadPerspective(rs_matrix4x4* m, float fovy, aspek float, float near, float jauh);
Parameter
mMatriks untuk ditetapkan.
FovyRuang pandang, dalam derajat di sepanjang sumbu Y.
aspekRasio x / y.
dekatMendekati bidang pemotongan.
jauhBidang penyesuaian jauh.

Menyusun matriks proyeksi perspektif, dengan asumsi ruang pandang simetris.

Untuk menerapkan proyeksi ini ke vektor, kalikan vektor dengan matriks yang dibuat menggunakan rsMatrixMultiply().

rsMatrixLoadRotate : Memuat matriks rotasi

void rsMatrixLoadRotate(rs_matrix4x4* m, {i>float rot<i}, {i>float x<i}, float y, float z);
Parameter
mMatriks untuk ditetapkan.
busukBerapa banyak rotasi yang harus dilakukan, dalam derajat.
xKomponen X dari vektor yang merupakan sumbu rotasi.
yY dari vektor yang merupakan sumbu rotasi.
zZ dari vektor yang merupakan sumbu rotasi.

Fungsi ini membuat matriks rotasi. Sumbu rotasi adalah vektor (x, y, z).

Untuk memutar vektor, kalikan vektor dengan matriks yang dibuat menggunakan rsMatrixMultiply().

Lihat https://en.wikipedia.org/wiki/Rotation_matrix .

rsMatrixLoadScale : Memuat matriks penskalaan

void rsMatrixLoadScale(rs_matrix4x4* m, float x, float y, float z);
Parameter
mMatriks untuk ditetapkan.
xBeberapa untuk menskalakan komponen x.
yBeberapa untuk menskalakan komponen y.
zBeberapa untuk menskalakan komponen z.

Fungsi ini membuat matriks penskalaan, dengan setiap komponen vektor dikalikan dengan angka. Angka ini bisa negatif.

Untuk menskalakan vektor, kalikan vektor dengan matriks yang dibuat menggunakan rsMatrixMultiply().

rsMatrixLoadTranslate : Memuat matriks terjemahan

void rsMatrixLoadTranslate(rs_matrix4x4* m, float x, float y, float z);
Parameter
mMatriks untuk ditetapkan.
xAngka yang akan ditambahkan ke setiap komponen x.
yAngka untuk ditambahkan ke setiap komponen y.
zAngka yang akan ditambahkan ke setiap komponen z.

Fungsi ini membuat matriks terjemahan, dengan angka yang ditambahkan ke setiap elemen vektor.

Untuk menerjemahkan vektor, kalikan vektor dengan matriks yang dibuat menggunakan rsMatrixMultiply().

rsMatrixMultiply : Mengalikan matriks dengan vektor atau matriks lain

float2 rsMatrixMultiply(const rs_matrix2x2* m, float2 in); Ditambahkan di API level 14
float2 rsMatrixMultiply(rs_matrix2x2* m, float2 in); Dihapus dari API level 14 dan yang lebih tinggi
float3 rsMatrixMultiply(const rs_matrix3x3* m, float2 in); Ditambahkan di API level 14
float3 rsMatrixMultiply(const rs_matrix3x3* m, float3 in); Ditambahkan di API level 14
float3 rsMatrixMultiply(rs_matrix3x3* m, float2 in); Dihapus dari API level 14 dan yang lebih tinggi
float3 rsMatrixMultiply(rs_matrix3x3* m, float3 in); Dihapus dari API level 14 dan yang lebih tinggi
float4 rsMatrixMultiply(const rs_matrix4x4* m, float2 in); Ditambahkan di API level 14
float4 rsMatrixMultiply(const rs_matrix4x4* m, float3 in); Ditambahkan di API level 14
float4 rsMatrixMultiply(const rs_matrix4x4* m, float4 in); Ditambahkan di API level 14
float4 rsMatrixMultiply(rs_matrix4x4* m, float2 in); Dihapus dari API level 14 dan yang lebih tinggi
float4 rsMatrixMultiply(rs_matrix4x4* m, float3 in); Dihapus dari API level 14 dan yang lebih tinggi
float4 rsMatrixMultiply(rs_matrix4x4* m, float4 in); Dihapus dari API level 14 dan yang lebih tinggi
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);
Parameter
mMatriks sebelah kiri dari produk dan matriks yang akan ditetapkan.
rhsMatriks kanan produk.
in

Untuk varian matriks menurut matriks, tetapkan m ke hasil kali matriks m * rhs.

Saat menggabungkan dua matriks transformasi 4x4 menggunakan fungsi ini, matriks yang dihasilkan akan sesuai dengan menjalankan transformasi rhs terlebih dahulu diikuti dengan transformasi m asli.

Untuk matriks menurut varian vektor, menampilkan hasil pascaperkalian vektor dengan matriks, yaitu. m * in.

Saat mengalikan float3 dengan rs_matrix4x4, vektor diperluas dengan (1).

Saat mengalikan float2 dengan rs_matrix4x4, vektor diperluas dengan (0, 1).

Saat mengalikan float2 dengan rs_matrix3x3, vektor diperluas dengan (0).

Dimulai dengan API 14, fungsi ini menggunakan matriks konstanta sebagai argumen pertama.

rsMatrixRotate : Menerapkan rotasi ke matriks transformasi

void rsMatrixRotate(rs_matrix4x4* m, float rot, float x, float y, float z);
Parameter
mMatriks untuk dimodifikasi.
busukBerapa banyak rotasi yang harus dilakukan, dalam derajat.
xKomponen X dari vektor yang merupakan sumbu rotasi.
yY dari vektor yang merupakan sumbu rotasi.
zZ dari vektor yang merupakan sumbu rotasi.

Kalikan matriks m dengan matriks rotasi.

Fungsi ini mengubah matriks transformasi untuk melakukan rotasi terlebih dahulu. Sumbu rotasi adalah vektor (x, y, z).

Untuk menerapkan transformasi gabungan ini ke vektor, kalikan vektor dengan matriks yang dibuat menggunakan rsMatrixMultiply().

rsMatrixScale : Menerapkan penskalaan ke matriks transformasi

void rsMatrixScale(rs_matrix4x4* m, float x, float y, float z);
Parameter
mMatriks untuk dimodifikasi.
xBeberapa untuk menskalakan komponen x.
yBeberapa untuk menskalakan komponen y.
zBeberapa untuk menskalakan komponen z.

Kalikan matriks m dengan matriks penskalaan.

Fungsi ini mengubah matriks transformasi untuk melakukan penskalaan terlebih dahulu. Saat melakukan penskalaan, setiap komponen vektor dikalikan dengan angka. Angka ini bisa negatif.

Untuk menerapkan transformasi gabungan ini ke vektor, kalikan vektor dengan matriks yang dibuat menggunakan rsMatrixMultiply().

rsMatrixSet : Menetapkan satu elemen

void rsMatrixSet(rs_matrix2x2* m, uint32_t col, uint32_t baris, float v);
void rsMatrixSet(rs_matrix3x3* m, uint32_t col, uint32_t baris, float v);
void rsMatrixSet(rs_matrix4x4* m, uint32_t col, uint32_t baris, float v);
Parameter
mMatriks yang akan dimodifikasi.
kolomKolom berbasis nol dari elemen yang akan ditetapkan.
barisBaris berbasis nol untuk elemen yang akan ditetapkan.
vsNilai yang akan ditetapkan.

Tetapkan elemen matriks.

Peringatan: Urutan parameter kolom dan baris mungkin tidak terduga.

rsMatrixTranslate : Menerapkan terjemahan ke matriks transformasi

void rsMatrixTranslate(rs_matrix4x4* m, float x, float y, float z);
Parameter
mMatriks untuk dimodifikasi.
xAngka yang akan ditambahkan ke setiap komponen x.
yAngka untuk ditambahkan ke setiap komponen y.
zAngka yang akan ditambahkan ke setiap komponen z.

Kalikan matriks m dengan matriks terjemahan.

Fungsi ini mengubah matriks transformasi untuk melakukan terjemahan terlebih dahulu. Saat menerjemahkan, angka ditambahkan ke setiap komponen vektor.

Untuk menerapkan transformasi gabungan ini ke vektor, kalikan vektor dengan matriks yang dibuat menggunakan rsMatrixMultiply().

rsMatrixTranspose : Transpose tempat matriks

void rsMatrixTranspose(rs_matrix2x2* m);
void rsMatrixTranspose(rs_matrix3x3* m);
void rsMatrixTranspose(rs_matrix4x4* m);
Parameter
mMatriks untuk ditransposisikan.

Transpose matriks m di tempatnya.