Przegląd
Te funkcje umożliwiają obsługę macierzy kwadratowych rangi 2 x 2, 3 x 3 i 4 x 4. Są one szczególnie przydatne w przypadku przekształceń graficznych i są zgodne z OpenGL.
W wierszach i kolumnach używamy indeksu liczonego od zera. Np. ostatni element w tablicy rs_matrix4x4 znajduje się w miejscu (3, 3).
RenderScript wykorzystuje macierze dużych kolumn i wektory kolumnowe. Przekształcanie wektora odbywa się po jego pomnożeniu, np. (matrix * vector)
, zgodnie z funkcją rsMatrixMultiply().
Aby utworzyć macierz, która przeprowadza 2 przekształcenia naraz, należy pomnożyć te 2 macierze, przy czym pierwsza z nich będzie właściwym argumentem. Aby np. utworzyć macierz przekształceń, która stosuje przekształcenie s1, a następnie s2, wywołaj rsMatrixLoadMultiply(&combined, &s2, &s1)
.
Pochodzi z pola s2 * (s1 * v)
, czyli (s2 * s1) * v
.
Istnieją 2 rodzaje funkcji do tworzenia macierzy transformacji: rsMatrixLoadTransformation i rsMatrixTransformation. W poprzednim argumencie macierz przekształceń jest przechowywana w pierwszym argumencie. Ten ostatni zmienia dotychczasową macierz przekształceń tak, aby nowe przekształcenie odbywało się jako pierwsze. Jeśli np. wywołasz funkcję rsMatrixTranslate() w macierzy, która już skaluje, otrzymana macierz po zastosowaniu do wektora najpierw wykona translację, a następnie skalowanie.
Podsumowanie
Funkcje | |
---|---|
rsExtractFrustumPlanes | Obliczanie płaszczyzn ostrych |
rsIsSphereInFrustum | Sprawdza, czy kula znajduje się w płaszczyznach rozluźniających |
rsMatrixGet | Pobierz 1 element |
rsMatrixInverse. | Odwraca macierz w miejscu |
rsMatrixInverseTranspose | Odwraca i transponuje macierz w miejscu |
rsMatrixLoad | Wczytywanie lub kopiowanie macierzy |
rsMatrixLoadFrustum | Wczytaj macierz projekcji frustum |
rsMatrixLoadIdentity | Wczytywanie macierzy tożsamości |
rsMatrixLoadMultiply | Pomnóż 2 macierze |
rsMatrixLoadOrtho, | Wczytaj macierz odwzorowania ortograficznego |
rsMatrixLoadPerspective, | Wczytywanie macierzy projekcji perspektywy |
rsMatrixLoadDuration | Wczytaj macierz rotacji |
rsMatrixLoadScale | Wczytaj macierz skalowania |
rsMatrixLoadTranslate | Wczytaj macierz translacji |
rsMatrixMultiply | Pomnóż macierz przez wektor lub inną macierz |
rsMatrixRotacja | Zastosuj rotację do macierzy przekształceń |
rsMatrixScale. | Zastosuj skalowanie do macierzy transformacji |
rsMatrixSet | Ustawianie jednego elementu |
rsMatrixTranslate | Zastosuj translację do macierzy przekształceń |
rsMatrixTranspose | Transponuj miejsce macierzy |
Funkcje
rsExtractFrustumPlanes : obliczanie płaszczyzn rozluźniających
void rsExtractFrustumPlanes(const rs_matrix4x4* viewProj, float4* left, float4* righ, float4* góra, float4* dół, float4* blisko, float4* ); | Dodano do poziomu interfejsu API 24. |
void rsExtractFrustumPlanes(const rs_matrix4x4* viewProj, float4* left, float4* po prawej, float4* góra, float4* dół, float4* w pobliżu, float4* ); | Usunięto z interfejsu API na poziomie 24 lub wyższym |
Parametry
ViewProj | Macierz, z której zostaną wyodrębnione płaszczyzny. |
---|---|
po lewej | Opuszczono samolot. |
Strzałka w prawo | Prawa płaszczyzna. |
pierwsza połowa | Górna płaszczyzna. |
druga połowa | Dolna płaszczyzna. |
blisko | Blisko samolotu. |
daleko | Duży samolot. |
Ręg |
Oblicza 6 płaszczyzn rozrachunku na podstawie macierzy projekcji widoku
rsIsSphereInFrustum : sprawdza, czy kula znajduje się w płaszczyznach rozluźnienia.
bool rsIsSphereInFrustum(float4* sphere, float4* left, float4* right, float4* gór, float4* dół, float4* prawa, float4* ); |
Parametry
sfera | float4 reprezentująca sferę. |
---|---|
po lewej | Opuszczono samolot. |
Strzałka w prawo | Prawa płaszczyzna. |
pierwsza połowa | Górna płaszczyzna. |
druga połowa | Dolna płaszczyzna. |
blisko | Blisko samolotu. |
daleko | Duży samolot. |
Zwraca wartość prawda, jeśli sfera znajduje się w 6 płaszczyznach rozluźnienia.
rsMatrixGet : pobieranie jednego elementu
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); |
Parametry
min | Macierz, z której zostanie wyodrębniony element. |
---|---|
kolumna | Kolumna liczona od zera dla elementu do wyodrębnienia. |
wiersz | Wiersz elementu do wyodrębnienia od zera. |
Zwraca jeden element macierzy.
Ostrzeżenie: kolejność parametrów kolumn i wierszy może być nieoczekiwana.
rsMatrixInverse : odwraca macierz w miejscu
bool rsMatrixInverse(rs_matrix4x4* m); |
Parametry
min | Macierz do odwrócenia. |
---|
Zwraca wartość „prawda”, jeśli macierz została odwrócona.
rsMatrixInverseTranspose : odwraca i transponuje macierz w miejscu
bool rsMatrixInverseTranspose(rs_matrix4x4* m); |
Parametry
min | Macierz do modyfikacji. |
---|
Macierz jest najpierw odwrócona, a następnie transponowana. Zwraca wartość „prawda”, jeśli macierz została odwrócona.
rsMatrixLoad : wczytanie lub skopiowanie macierzy
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); |
Parametry
miejsce docelowe | Macierz do ustawienia. |
---|---|
tablica | Tablica wartości, na którą ma być ustawiona macierz. Tablice te powinny mieć 4, 9 lub 16 liczb zmiennoprzecinkowych, w zależności od rozmiaru macierzy. |
źródło | Macierz źródeł. |
Służy do ustawiania elementów macierzy z tablicy liczby zmiennoprzecinkowej lub innej macierzy.
W przypadku wczytywania z tablicy liczby zmiennoprzecinkowe powinny być w porządku odnoszących się do największego wiersza, np. element row 0, column 0
powinien być widoczny jako pierwszy, a po nim element row 0, column 1
itd.
Jeśli ładowanie z matrycy jest mniejsze, a źródło jest mniejsze niż miejsce docelowe, reszta miejsca docelowego jest wypełniana elementami macierzy tożsamości. Np. załadowanie tablicy rs_matrix2x2 do tablicy rs_matrix4x4 spowoduje:
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 : wczytaj macierz projekcji frustum
void rsMatrixLoadFrustum(rs_matrix4x4* m, float w lewo, float w prawo, pływająca na dole, float góra, pływająca w pobliżu, Duża); |
Parametry
min | Macierz do ustawienia. |
---|---|
po lewej | |
Strzałka w prawo | |
druga połowa | |
pierwsza połowa | |
blisko | |
daleko |
Konstruuje macierz rzutów ukośnych, zmieniając pole wskazane przez 6 płaszczyzn przycinania left, right, bottom, top, near, far
.
Aby zastosować to odwzorowanie do wektora, pomnóż wektor przez utworzoną macierz za pomocą funkcji rsMatrixMultiply().
rsMatrixLoadIdentity : wczytanie macierzy tożsamości
void rsMatrixLoadIdentity(rs_matrix2x2* m); | |
void rsMatrixLoadIdentity(rs_matrix3x3* m); | |
void rsMatrixLoadIdentity(rs_matrix4x4* m); |
Parametry
min | Macierz do ustawienia. |
---|
Elementy macierzy określają jej macierz tożsamości.
rsMatrixLoadMultiply : pomnożyć 2 macierze
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); |
Parametry
min | Macierz do ustawienia. |
---|---|
LH | Lewa macierz produktu. |
Rhs | Prawa macierz iloczynu. |
Ustawia m na iloczyn macierzy lhs * rhs
.
Aby połączyć 2 macierzy przekształceń 4 x 4, pomnóż drugą macierz przez pierwszą macierz. Aby np. utworzyć macierz przekształceń, która stosuje transformację s1, a następnie s2, wywołaj rsMatrixLoadMultiply(&combined, &s2, &s1)
.
Ostrzeżenie: w wersjach starszych niż 21 przechowywanie wyniku z powrotem w prawej macierzy nie jest obsługiwane i może powodować niezdefiniowane zachowanie. Zamiast niej użyj parametru rsMatrixMulitply. Np. zamiast wykonać rsMatrixLoadMultiply (&m2r, &m2r, &m2l), użyj rsMatrixMultiply (&m2r, &m2l). rsMatrixLoadMultiply (&m2l, &m2r, &m2l) działa zgodnie z oczekiwaniami.
rsMatrixLoadOrtho : wczytanie macierzystej ortograficznej macierzy
void rsMatrixLoadOrtho(rs_matrix4x4* m, float left, float w prawo, float do dołu, float góra, pływająca blisko, falująca); |
Parametry
min | Macierz do ustawienia. |
---|---|
po lewej | |
Strzałka w prawo | |
druga połowa | |
pierwsza połowa | |
blisko | |
daleko |
Konstruuje ortograficzną macierz rzutów, przekształcając ramkę oznaczoną przez 6 płaszczyzn przycinania left, right, bottom, top, near, far
w sześcian jednostkowy z rogiem w miejscu (-1, -1, -1)
i odwrotną w (1, 1, 1)
.
Aby zastosować to odwzorowanie do wektora, pomnóż wektor przez utworzoną macierz za pomocą funkcji rsMatrixMultiply().
Patrz https://pl.wikipedia.org/wiki/Odwzorowanie_ortograficzne .
rsMatrixLoadPerspective : wczytanie macierzy projekcji perspektyw
void rsMatrixLoadPerspective(rs_matrix4x4* m, float fovy, float prognozowania, float w pobliżu, float daleko); |
Parametry
min | Macierz do ustawienia. |
---|---|
smutek | Pole widzenia, w stopniach na osi Y. |
aspekt | Stosunek x / y. |
blisko | Blisko płaszczyzny przycinania. |
daleko | Duża płaszczyzna przycinania. |
Konstruuje macierz rzutów perspektywicznych przy założeniu symetrycznego pola widzenia.
Aby zastosować to odwzorowanie do wektora, pomnóż wektor przez utworzoną macierz za pomocą funkcji rsMatrixMultiply().
rsMatrixLoadpatrz : wczytaj macierz rotacji
void rsMatrixLoadProcessing(rs_matrix4x4* m, float rot, float x, float y, float z); |
Parametry
min | Macierz do ustawienia. |
---|---|
zgniły | Obrót w stopniach. |
x | Komponent X wektora, który jest osią obrotu. |
Y | Komponent Y wektora stanowiącego oś obrotu. |
Z | Komponent Z wektora, który jest osią obrotu. |
Ta funkcja tworzy macierz rotacji. Oś obrotu to wektor (x, y, z)
.
Aby obrócić wektor, pomnóż wektor przez utworzoną macierz za pomocą funkcji rsMatrixMultiply().
Patrz https://pl.wikipedia.org/wiki/Rotation_matrix .
rsMatrixLoadScale : wczytaj macierz skalowania
void rsMatrixLoadScale(rs_matrix4x4* m, float x, float y, float z); |
Parametry
min | Macierz do ustawienia. |
---|---|
x | Wielokrotne, aby skalować komponenty x. |
Y | Wielokrotne, aby skalować komponenty y. |
Z | Wielokrotność, o ile można skalować komponenty z. |
Ta funkcja tworzy macierz skalowania, w której każdy składnik wektora jest mnożony przez liczbę. Ta liczba może być ujemna.
Aby skalować wektor, pomnóż wektor przez utworzoną macierz za pomocą funkcji rsMatrixMultiply().
rsMatrixLoadTranslate : wczytanie macierzy translacji
void rsMatrixLoadTranslate(rs_matrix4x4* m, float x, float y, float z); |
Parametry
min | Macierz do ustawienia. |
---|---|
x | Liczba, która ma zostać dodana do każdego komponentu x. |
Y | Liczba, która ma zostać dodana do każdego komponentu y. |
Z | Liczba, która ma zostać dodana do każdego komponentu z. |
Ta funkcja tworzy macierz translacji, w której do każdego elementu wektora dodawana jest liczba.
Aby przetłumaczyć wektor, pomnóż wektor przez utworzoną macierz za pomocą funkcji rsMatrixMultiply().
rsMatrixMultiply : mnoży macierz przez wektor lub inną macierz
Parametry
min | Lewa macierz iloczynu i macierz do ustawienia. |
---|---|
Rhs | Prawa macierz iloczynu. |
in |
W przypadku wariantu macierzy ustawia m na iloczyn macierzy m * rhs
.
Gdy połączysz 2 macierze przekształcenia 4 x 4 za pomocą tej funkcji, otrzymana macierz będzie odpowiadać przekształceniu Rhs, a następnie pierwotnemu przekształceniu m.
W przypadku macierzy wg wariantu wektorów zwraca wynik pomnożenia wektora przez macierz, tj. m * in
.
Podczas mnożenia liczby zmiennoprzecinkowej3 do parametru rs_matrix4x4 wektor jest rozszerzany do wartości (1).
Podczas mnożenia liczby zmiennoprzecinkowej2 do rs_matrix4x4 wektor jest rozszerzany do wartości (0, 1).
Podczas mnożenia liczby zmiennoprzecinkowej2 do rs_matrix3x3 wektor jest rozszerzany do wartości (0).
Od API 14 ta funkcja przyjmuje stałą macierz jako pierwszy argument.
rsMatrixRotacja : zastosuj obrót do macierzy przekształceń
void rsMatrixSwitch(rs_matrix4x4* m, zmiennoprzecinkowa, zmiennoprzecinkowa x, zmiennoprzecinkowa y, zmiennoprzecinkowa z); |
Parametry
min | Macierz do modyfikacji. |
---|---|
zgniły | Obrót w stopniach. |
x | Komponent X wektora, który jest osią obrotu. |
Y | Komponent Y wektora stanowiącego oś obrotu. |
Z | Komponent Z wektora, który jest osią obrotu. |
Pomnóż macierz m przez macierz obracania.
Ta funkcja modyfikuje macierz przekształceń, aby najpierw wykonać rotację. Oś obrotu jest wektorem (x, y, z)
.
Aby zastosować to połączone przekształcenie do wektora, pomnóż wektor przez utworzoną macierz za pomocą funkcji rsMatrixMultiply().
rsMatrixScale : zastosuj skalowanie do macierzy transformacji
void rsMatrixScale(rs_matrix4x4* m, float x, float y, float z); |
Parametry
min | Macierz do modyfikacji. |
---|---|
x | Wielokrotne, aby skalować komponenty x. |
Y | Wielokrotne, aby skalować komponenty y. |
Z | Wielokrotność, o ile można skalować komponenty z. |
Pomnóż macierz m przez macierz skalowania.
Ta funkcja modyfikuje macierz przekształceń, aby najpierw przeprowadzić skalowanie. Podczas skalowania każdy składnik wektora jest mnożony przez liczbę. Ta liczba może być ujemna.
Aby zastosować to połączone przekształcenie do wektora, pomnóż wektor przez utworzoną macierz za pomocą funkcji rsMatrixMultiply().
rsMatrixSet : ustaw jeden element
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); |
Parametry
min | Macierz, która zostanie zmodyfikowana. |
---|---|
kolumna | Kolumna z zerem wartości do ustawienia. |
wiersz | Wiersz elementu do ustawienia od zera. |
v | Wartość do ustawienia. |
Ustaw element macierzy.
Ostrzeżenie: kolejność parametrów kolumn i wierszy może być nieoczekiwana.
rsMatrixTranslate : zastosowanie translacji do macierzy transformacji
void rsMatrixTranslate(rs_matrix4x4* m, float x, float y, float z); |
Parametry
min | Macierz do modyfikacji. |
---|---|
x | Liczba, która ma zostać dodana do każdego komponentu x. |
Y | Liczba, która ma zostać dodana do każdego komponentu y. |
Z | Liczba, która ma zostać dodana do każdego komponentu z. |
Pomnóż macierz m przez macierz translacji.
Ta funkcja modyfikuje macierz przekształceń, aby najpierw wykonać translację. Podczas tłumaczenia do każdej składnikowej wektora dodawana jest liczba.
Aby zastosować to połączone przekształcenie do wektora, pomnóż wektor przez utworzoną macierz za pomocą funkcji rsMatrixMultiply().
rsMatrixTranspose : transponuj miejsce macierzy
void rsMatrixTranspose(rs_matrix2x2* m); | |
void rsMatrixTranspose(rs_matrix3x3* m); | |
void rsMatrixTranspose(rs_matrix4x4* m); |
Parametry
min | Macierz do transponowania. |
---|
Przenieś macierz m na miejsce.