Funkcje macierzyste RenderScript

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
ViewProjMacierz, z której zostaną wyodrębnione płaszczyzny.
po lewejOpuszczono samolot.
Strzałka w prawoPrawa płaszczyzna.
pierwsza połowaGórna płaszczyzna.
druga połowaDolna płaszczyzna.
bliskoBlisko samolotu.
dalekoDuż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
sferafloat4 reprezentująca sferę.
po lewejOpuszczono samolot.
Strzałka w prawoPrawa płaszczyzna.
pierwsza połowaGórna płaszczyzna.
druga połowaDolna płaszczyzna.
bliskoBlisko samolotu.
dalekoDuż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
minMacierz, z której zostanie wyodrębniony element.
kolumnaKolumna liczona od zera dla elementu do wyodrębnienia.
wierszWiersz 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
minMacierz 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
minMacierz 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 doceloweMacierz do ustawienia.
tablicaTablica 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łoMacierz ź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
minMacierz 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
minMacierz 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
minMacierz do ustawienia.
LHLewa macierz produktu.
RhsPrawa 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
minMacierz 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
minMacierz do ustawienia.
smutekPole widzenia, w stopniach na osi Y.
aspektStosunek x / y.
bliskoBlisko płaszczyzny przycinania.
dalekoDuż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
minMacierz do ustawienia.
zgniłyObrót w stopniach.
xKomponent X wektora, który jest osią obrotu.
YKomponent Y wektora stanowiącego oś obrotu.
ZKomponent 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
minMacierz do ustawienia.
xWielokrotne, aby skalować komponenty x.
YWielokrotne, aby skalować komponenty y.
ZWielokrotność, 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
minMacierz do ustawienia.
xLiczba, która ma zostać dodana do każdego komponentu x.
YLiczba, która ma zostać dodana do każdego komponentu y.
ZLiczba, 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

float2 rsMatrixMultiply(const rs_matrix2x2* m, float2 in); Dodano do poziomu interfejsu API 14.
float2 rsMatrixMultiply(rs_matrix2x2* m, float2 in); Usunięto z interfejsu API na poziomie 14 lub wyższym.
float3 rsMatrixMultiply(const rs_matrix3x3* m, float2 in); Dodano do poziomu interfejsu API 14.
float3 rsMatrixMultiply(const rs_matrix3x3* m, float3 in); Dodano do poziomu interfejsu API 14.
float3 rsMatrixMultiply(rs_matrix3x3* m, float2 in); Usunięto z interfejsu API na poziomie 14 lub wyższym.
float3 rsMatrixMultiply(rs_matrix3x3* m, float3 in); Usunięto z interfejsu API na poziomie 14 lub wyższym.
float4 rsMatrixMultiply(const rs_matrix4x4* m, float2 in); Dodano do poziomu interfejsu API 14.
float4 rsMatrixMultiply(const rs_matrix4x4* m, float3 in); Dodano do poziomu interfejsu API 14.
float4 rsMatrixMultiply(const rs_matrix4x4* m, float4 in); Dodano do poziomu interfejsu API 14.
float4 rsMatrixMultiply(rs_matrix4x4* m, float2 in); Usunięto z interfejsu API na poziomie 14 lub wyższym.
float4 rsMatrixMultiply(rs_matrix4x4* m, float3 in); Usunięto z interfejsu API na poziomie 14 lub wyższym.
float4 rsMatrixMultiply(rs_matrix4x4* m, float4 in); Usunięto z interfejsu API na poziomie 14 lub wyższym.
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);
Parametry
minLewa macierz iloczynu i macierz do ustawienia.
RhsPrawa 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
minMacierz do modyfikacji.
zgniłyObrót w stopniach.
xKomponent X wektora, który jest osią obrotu.
YKomponent Y wektora stanowiącego oś obrotu.
ZKomponent 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
minMacierz do modyfikacji.
xWielokrotne, aby skalować komponenty x.
YWielokrotne, aby skalować komponenty y.
ZWielokrotność, 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
minMacierz, która zostanie zmodyfikowana.
kolumnaKolumna z zerem wartości do ustawienia.
wierszWiersz elementu do ustawienia od zera.
vWartość 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
minMacierz do modyfikacji.
xLiczba, która ma zostać dodana do każdego komponentu x.
YLiczba, która ma zostać dodana do każdego komponentu y.
ZLiczba, 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
minMacierz do transponowania.

Przenieś macierz m na miejsce.