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
lihatProj | Matriks untuk mengekstrak bidang. |
---|---|
left | Pesawat kiri. |
right | Bidang kanan. |
paruh pertama inning | Bidang atas. |
paruh kedua inning | Bidang bawah. |
dekat | Di dekat pesawat. |
jauh | Pesawat 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
bola | float4 yang mewakili bola dunia. |
---|---|
left | Pesawat kiri. |
right | Bidang kanan. |
paruh pertama inning | Bidang atas. |
paruh kedua inning | Bidang bawah. |
dekat | Di dekat pesawat. |
jauh | Pesawat 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
m | Matriks untuk mengekstrak elemen. |
---|---|
kolom | Kolom berbasis nol dari elemen yang akan diekstrak. |
baris | Baris 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
m | Matriks untuk dibalik. |
---|
Menampilkan nilai benar jika matriks berhasil dibalik.
rsMatrixInverseTranspose : Membalikkan dan melakukan transposisi matriks di tempat
bool rsMatrixInverseTranspose(rs_matrix4x4* m); |
Parameter
m | Matriks 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
tujuan | Matriks untuk ditetapkan. |
---|---|
array | Array nilai yang akan ditetapkan matriksnya. Array ini harus 4, 9, atau 16 {i>float<i}, tergantung pada ukuran matriks. |
sumber | Matriks 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
m | Matriks 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
m | Matriks 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
m | Matriks untuk ditetapkan. |
---|---|
LSM | Matriks sebelah kiri produk. |
rhs | Matriks 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
m | Matriks 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
m | Matriks untuk ditetapkan. |
---|---|
Fovy | Ruang pandang, dalam derajat di sepanjang sumbu Y. |
aspek | Rasio x / y. |
dekat | Mendekati bidang pemotongan. |
jauh | Bidang 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
m | Matriks untuk ditetapkan. |
---|---|
busuk | Berapa banyak rotasi yang harus dilakukan, dalam derajat. |
x | Komponen X dari vektor yang merupakan sumbu rotasi. |
y | Y dari vektor yang merupakan sumbu rotasi. |
z | Z 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
m | Matriks untuk ditetapkan. |
---|---|
x | Beberapa untuk menskalakan komponen x. |
y | Beberapa untuk menskalakan komponen y. |
z | Beberapa 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
m | Matriks untuk ditetapkan. |
---|---|
x | Angka yang akan ditambahkan ke setiap komponen x. |
y | Angka untuk ditambahkan ke setiap komponen y. |
z | Angka 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
m | Matriks sebelah kiri dari produk dan matriks yang akan ditetapkan. |
---|---|
rhs | Matriks 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
m | Matriks untuk dimodifikasi. |
---|---|
busuk | Berapa banyak rotasi yang harus dilakukan, dalam derajat. |
x | Komponen X dari vektor yang merupakan sumbu rotasi. |
y | Y dari vektor yang merupakan sumbu rotasi. |
z | Z 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
m | Matriks untuk dimodifikasi. |
---|---|
x | Beberapa untuk menskalakan komponen x. |
y | Beberapa untuk menskalakan komponen y. |
z | Beberapa 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
m | Matriks yang akan dimodifikasi. |
---|---|
kolom | Kolom berbasis nol dari elemen yang akan ditetapkan. |
baris | Baris berbasis nol untuk elemen yang akan ditetapkan. |
vs | Nilai 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
m | Matriks untuk dimodifikasi. |
---|---|
x | Angka yang akan ditambahkan ke setiap komponen x. |
y | Angka untuk ditambahkan ke setiap komponen y. |
z | Angka 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
m | Matriks untuk ditransposisikan. |
---|
Transpose matriks m di tempatnya.