RenderScript Matris İşlevleri

Genel bakış

Bu fonksiyonlar, 2x2, 3x3 ve 4x4 sıralamasındaki kare matrisleri değiştirmenize olanak tanır. Özellikle grafik dönüşümler için kullanışlıdır ve OpenGL ile uyumludur.

Satırlar ve sütunlar için sıfır tabanlı bir dizin kullanırız. Örneğin, son rs_matrix4x4 öğesi (3, 3) değerindedir.

RenderScript, sütun ana matrisler ve sütun tabanlı vektörler kullanır. Bir vektörün dönüştürülmesi, rsMatrixMultiply() tarafından sağlanan vektörün (ör. (matrix * vector)) sonra çarpılmasıyla yapılır.

Aynı anda iki dönüşüm gerçekleştiren bir dönüşüm matrisi oluşturmak için iki kaynak matrisi çarpın ve ilk dönüşüm doğru bağımsız değişken olsun. Örneğin s1 ve ardından s2 dönüşümlerini uygulayan bir dönüşüm matrisi oluşturmak için rsMatrixLoadMultiply(&combined, &s2, &s1) yöntemini çağırın. Bu, (s2 * s1) * v olan s2 * (s1 * v) verisinden türetilmiştir.

Dönüşüm matrisleri oluşturmak için iki stilde işlev kullanıyoruz: rsMatrixLoadTransformation ve rsMatrixTransformation. İlk stil yalnızca ilk bağımsız değişkende dönüşüm matrisini depolar. İkincisi ise önceden var olan bir dönüşüm matrisini değiştirerek yeni dönüşümün önce gerçekleşmesini sağlar. Örneğin, zaten ölçeklendirme yapan bir matriste rsMatrixTranslate() çağırırsanız, bir vektöre uygulandığında elde edilen matris önce çeviriyi, ardından ölçeklendirmeyi yapar.

Özet

Fonksiyonlar
rsExtractFrustumPlanes Kesintili düzlemleri hesaplama
rsIsSphereInFrustum Bir kürenin kesikli düzlemler içinde olup olmadığını kontrol eder
rsMatrixGet Bir öğe al
rsMatrixTers Mevcut bir matrisi tersine çevirir
rsMatrixTers Transpozisyon Matrisi ters çevirir ve matrisin yerini çevirir
rsMatrixLoad Matrisi yükleme veya kopyalama
rsMatrixLoadFrustum Kesme projeksiyon matrisi yükleme
rsMatrixLoadIdentity Kimlik matrisi yükle
rsMatrixLoadMultiply İki matrisi çarpma
rsMatrixLoadOrtto Yazım projeksiyon matrisi yükleme
rsMatrixLoadPerspective Perspektif projeksiyon matrisi yükleme
rsMatrixLoadDöndür Döndürme matrisi yükleme
rsMatrixLoadScale Ölçeklendirme matrisi yükleme
rsMatrixLoadTranslate Çeviri matrisi yükleme
rsMatrixMultiply Matrisi vektör veya başka bir matrisle çarpabilme
rsMatrixDöndür Dönüşüm matrisine rotasyon uygulama
rsMatrixScale Dönüşüm matrisine ölçeklendirme uygulama
rsMatrixSet Tek bir öğe ayarla
rsMatrixTranslate Bir dönüşüm matrisine çeviri uygulama
rsMatrixTranspose Matrisin yerini değiştirmeyi

Fonksiyonlar

rsExtractFrustumPlanes : Kesintili düzlemleri hesaplama

void rsExtractFrustumPlanes(const rs_matrix4x4* viewProj, float4* sol, float4* sağ, float4* üst, float4* alt, float4* yakın, float4* uzak); API düzeyi 24'te eklendi
void rsExtractFrustumPlanes(const rs_matrix4x4* viewProj, float4* sol, float4* sağ, float4* üst, float4* alt, float4* yakın, float4* uzak); API düzeyi 24 ve sonraki sürümlerden kaldırıldı
Parametreler
gösterUçakların çıkarılacağı matris.
solSol uçak.
sağ okSağ uçak.
ilk yarıÜstteki düzlem.
ikinci yarıAlt düzlem.
yakınındaUçağa yakın.
uzakUzak uçak.
Righ

Görüntüleme projeksiyon matrisini kullanarak 6 kesik çizgi düzlemini hesaplar

rsIsSphereInFrustum : Bir kürenin kesikli düzlemler içinde olup olmadığını kontrol eder

bool rsIsSphereInFrustum(float4* sphere, float4* sol, float4* sağ, float4* üst, float4* alt, float4* yakın, float4* uzak);
Parametreler
küreküreyi temsil eden kayan noktalı4’tür.
solSol uçak.
sağ okSağ uçak.
ilk yarıÜstteki düzlem.
ikinci yarıAlt düzlem.
yakınındaUçağa yakın.
uzakUzak uçak.

Küre 6 kesik kesik düzlemindeyse true değerini döndürür.

rsMatrixGet : Bir öğe al

kayan noktalı rsMatrixGet(const rs_matrix2x2* m, uint32_t col, uint32_t satırı);
kayan noktalı rsMatrixGet(const rs_matrix3x3* m, uint32_t col, uint32_t satırı);
kayan noktalı rsMatrixGet(const rs_matrix4x4* m, uint32_t col, uint32_t satır);
Parametreler
dk.Öğenin ayıklanacağı matris.
sütunAyıklanacak öğenin sıfır tabanlı sütunu.
satırAyıklanacak öğenin sıfır tabanlı satırı.

Bir matrisin bir elemanını döndürür.

Uyarı: Sütun ve satır parametrelerinin sırası beklenmedik olabilir.

rsMatrixInverse : Mevcut bir matrisi tersine çevirir

bool rsMatrixInverse(rs_matrix4x4* m);
Parametreler
dk.Tersine çevrilecek matris.

Matris başarıyla ters çevrilmişse true değerini döndürür.

rsMatrixInverseTranspose : Mevcut bir matrisi ters çevirir ve matrisin ters çevirisini yapar

bool rsMatrixInverseTranspose(rs_matrix4x4* m);
Parametreler
dk.Değiştirilecek matris.

Matris önce ters çevrilmiş, ardından ters çevrilmiştir. Matris başarıyla ters çevrilmişse true değerini döndürür.

rsMatrixLoad : Matrisi yükleme veya kopyalama

void rsMatrixLoad(rs_matrix2x2* hedef, kurucusu kayan* dizi);
void rsMatrixLoad(rs_matrix2x2* hedef, kurucu rs_matrix2x2* kaynak);
void rsMatrixLoad(rs_matrix3x3* hedef, kurucusu kayan* dizi);
void rsMatrixLoad(rs_matrix3x3* hedef, kurucu rs_matrix3x3* kaynak);
void rsMatrixLoad(rs_matrix4x4* hedef, tutarlı kayma* dizisi);
void rsMatrixLoad(rs_matrix4x4* hedef, tutarlı rs_matrix2x2* kaynak);
void rsMatrixLoad(rs_matrix4x4* hedef, kurucu rs_matrix3x3* kaynak);
void rsMatrixLoad(rs_matrix4x4* hedef, kurucu rs_matrix4x4* kaynak);
Parametreler
hedefAyarlanacak matris.
diziMatrisin ayarlanacağı değerler dizisi. Bu diziler, matris boyutuna bağlı olarak 4, 9 veya 16 kayan noktalı uzunlukta olmalıdır.
kaynakKaynak matrisi.

Hareketli değerler dizisinden veya başka bir matristen matrisin elemanlarını ayarlayın.

Bir diziden yükleniyorsa kayan öğeler satır ana sıralamada olmalıdır. Yani, bir row 0, column 0 öğesi ilk sırada olmalı, ardından row 0, column 1 konumundaki öğe gelmelidir vb.

Bir matristen yükleme yapılıyorsa ve kaynak hedeften küçükse hedefin geri kalanı kimlik matrisinin öğeleriyle doldurulur. Örneğin, bir rs_matrix2x2 dosyasını rs_matrix4x4'e yüklemek şunları sağlar:

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 : Kesintili projeksiyon matrisi yükleme

void rsMatrixLoadFrustum(rs_matrix4x4* m, sola kaydır, sağa kaydır, alta kayma, üst kayan, yakınlarda kayan, uzağa kaydır);
Parametreler
dk.Ayarlanacak matris.
sol
sağ ok
ikinci yarı
ilk yarı
yakınında
uzak

Altı kırpma düzleminin tespit ettiği kutuyu left, right, bottom, top, near, far dönüştürerek bir kesik kesik projeksiyon matrisi oluşturur.

Bu projeksiyonu bir vektöre uygulamak için rsMatrixMultiply() işlevini kullanarak vektörü, oluşturulan matrisle çarpın.

rsMatrixLoadIdentity : Kimlik matrisini yükleme

void rsMatrixLoadIdentity(rs_matrix2x2* m);
void rsMatrixLoadIdentity(rs_matrix3x3* m);
void rsMatrixLoadIdentity(rs_matrix4x4* m);
Parametreler
dk.Ayarlanacak matris.

Matrisin elemanlarını özdeş matrise ayarlayın.

rsMatrixLoadMultiply : İki matrisi çarpın

void rsMatrixLoadMultiply(rs_matrix2x2* m, tutarlı rs_matrix2x2* lhs, tutarlı rs_matrix2x2* rhs);
void rsMatrixLoadMultiply(rs_matrix3x3* m, tutarlı rs_matrix3x3* lhs, tutarlı rs_matrix3x3* rhs);
void rsMatrixLoadMultiply(rs_matrix4x4* m, tutarlı rs_matrix4x4* lhs, tutarlı rs_matrix4x4* rhs);
Parametreler
dk.Ayarlanacak matris.
saÜrünün sol matrisi.
saÜrünün doğru matrisi.

m'yi, lhs * rhs matris çarpımına ayarlar.

İki 4x4 dönüşüm matrisini birleştirmek için ikinci dönüşüm matrisini ilk dönüşüm matrisiyle çarpın. Örneğin s1 ve ardından s2 dönüşümlerini uygulayan bir dönüşüm matrisi oluşturmak için rsMatrixLoadMultiply(&combined, &s2, &s1) yöntemini çağırın.

Uyarı: Sürüm 21'den önce, sonucun sağ matriste yeniden depolanması desteklenmez ve tanımlanmamış davranışa yol açar. Bunun yerine rsMatrixMulitply'yi kullanın. Örneğin, rsMatrixLoadMultiply (&m2r, &m2r, &m2l) yapmak yerine rsMatrixMultiply (&m2r, &m2l) kullanın. rsMatrixLoadMultiply (&m2l, &m2r, &m2l) beklendiği gibi çalışır.

rsMatrixLoadOrtho : Ortografik projeksiyon matrisi yükleme

void rsMatrixLoadOrtho(rs_matrix4x4* m, sola kaydır, sağa kaydır, alta kayma, üst kayan, yakınlarda kayan, uzağa kaydır);
Parametreler
dk.Ayarlanacak matris.
sol
sağ ok
ikinci yarı
ilk yarı
yakınında
uzak

Altı kırpma düzlemiyle left, right, bottom, top, near, far tanımlanan kutuyu, köşesi (-1, -1, -1) olan bir birim küpe ve tersi de (1, 1, 1) olan bir birim küpe dönüştürerek ortografik bir projeksiyon matrisi oluşturur.

Bu projeksiyonu bir vektöre uygulamak için rsMatrixMultiply() işlevini kullanarak vektörü, oluşturulan matrisle çarpın.

https://en.wikipedia.org/wiki/Orthography_projection sayfasına bakın .

rsMatrixLoadPerspective : Perspektif projeksiyon matrisi yükleme

void rsMatrixLoadPerspective(rs_matrix4x4* m, bolluk, en boy oranında bolluk, yakınlarda süzülme, uzağa süzülme);
Parametreler
dk.Ayarlanacak matris.
FovyY ekseni boyunca derece cinsinden görüş alanı.
ilişkili programx / y oranı.
yakınındaKırpma düzleminin yakınında.
uzakUzak uçurma.

Simetrik bir görüş alanı varsayarak bir perspektif projeksiyon matrisi oluşturur.

Bu projeksiyonu bir vektöre uygulamak için rsMatrixMultiply() işlevini kullanarak vektörü, oluşturulan matrisle çarpın.

rsMatrixLoadDöndür : Döndürme matrisi yükleme

void rsMatrixLoadLoad(rs_matrix4x4* m, kayan çürütme, kayan x, kayan y, kayan z);
Parametreler
dk.Ayarlanacak matris.
çürükDerece cinsinden ne kadar dönüş yapılacağı.
xDönme ekseni olan vektörün X bileşeni.
yDönme ekseni olan vektörün Y bileşeni.
zDönme ekseni olan vektörün Z bileşeni.

Bu işlev bir rotasyon matrisi oluşturur. Dönme ekseni (x, y, z) vektörüdür.

Bir vektörü döndürmek için, rsMatrixMultiply() işlevini kullanarak vektörü oluşturulan matrisle çarpın.

https://en.wikipedia.org/wiki/Rotation_matrix (Rotation_matrix) sayfasına bakın .

rsMatrixLoadScale : Ölçeklendirme matrisi yükleme

void rsMatrixLoadScale(rs_matrix4x4* m, kayan x, kayan y, kayan z);
Parametreler
dk.Ayarlanacak matris.
xX bileşenlerini ölçeklendirmek için birden çok değerini kullanın.
yY bileşenlerini ölçeklendirmek için "Çoklu" kullanın.
zZ bileşenlerini ölçeklendirmek için çoklu kullanın.

Bu işlev, vektörün her bir bileşeninin bir sayıyla çarpıldığı bir ölçeklendirme matrisi oluşturur. Bu sayı negatif olabilir.

Bir vektörü ölçeklendirmek için, rsMatrixMultiply() işlevini kullanarak vektörü, oluşturulan matrisle çarpın.

rsMatrixLoadTranslate : Bir çeviri matrisi yükleme

void rsMatrixLoadTranslate(rs_matrix4x4* m, kayan x, kayan y, kayan z);
Parametreler
dk.Ayarlanacak matris.
xHer x bileşenine eklenecek sayı.
yHer y bileşenine eklenecek sayı.
zHer Z bileşenine eklenecek sayı.

Bu işlev, bir vektörün her bir öğesine sayı eklenen bir çeviri matrisi oluşturur.

Bir vektörü çevirmek için, rsMatrixMultiply() işlevini kullanarak vektörü, oluşturulan matrisle çarpın.

rsMatrixMultiply : Matrisi bir vektörle veya başka bir matrisle çarpın

float2 rsMatrixMultiply(const rs_matrix2x2* m, float2 inç); API düzeyi 14'te eklendi
float2 rsMatrixMultiply(rs_matrix2x2* m, kayan2 inç); API düzeyi 14 ve sonraki sürümlerden kaldırıldı
float3 rsMatrixMultiply(const rs_matrix3x3* m, float2 inç); API düzeyi 14'te eklendi
float3 rsMatrixMultiply(const rs_matrix3x3* m, float3 in); API düzeyi 14'te eklendi
float3 rsMatrixMultiply(rs_matrix3x3* m, float2 in); API düzeyi 14 ve sonraki sürümlerden kaldırıldı
float3 rsMatrixMultiply(rs_matrix3x3* m, float3 in); API düzeyi 14 ve sonraki sürümlerden kaldırıldı
float4 rsMatrixMultiply(const rs_matrix4x4* m, kayan2 inç); API düzeyi 14'te eklendi
float4 rsMatrixMultiply(const rs_matrix4x4* m, kayan3 inç); API düzeyi 14'te eklendi
float4 rsMatrixMultiply(const rs_matrix4x4* m, float4 inç); API düzeyi 14'te eklendi
float4 rsMatrixMultiply(rs_matrix4x4* m, float2 in); API düzeyi 14 ve sonraki sürümlerden kaldırıldı
float4 rsMatrixMultiply(rs_matrix4x4* m, float3 in); API düzeyi 14 ve sonraki sürümlerden kaldırıldı
float4 rsMatrixMultiply(rs_matrix4x4* m, kayan4 inç); API düzeyi 14 ve sonraki sürümlerden kaldırıldı
void rsMatrixMultiply(rs_matrix2x2* m, tutarlı rs_matrix2x2* rhs);
void rsMatrixMultiply(rs_matrix3x3* m, tutarlı rs_matrix3x3* rhs);
void rsMatrixMultiply(rs_matrix4x4* m, tutarlı rs_matrix4x4* rhs);
Parametreler
dk.Ayarlanacak ürünün ve matrisin sol matrisi.
saÜrünün doğru matrisi.
inç

Matris varyantına göre matris varyantı için m, m * rhs matris çarpımına ayarlanır.

Bu işlev kullanılarak iki 4x4 dönüşüm matrisi birleştirildiğinde, elde edilen matris, önce rhs dönüşümünü ardından orijinal m dönüşümünü gerçekleştirmeye karşılık gelir.

Vektör varyantına göre matris için, vektörün matrisle sonradan çarpımını döndürür, yani; m * in.

Bir ondalık değer3 ile rs_matrix4x4 çarpılırken vektör, (1) ile genişletilir.

Hareketli değer2, bir rs_matrix4x4 ile çarpılırken vektör, (0, 1) ile genişletilir.

Hareketli değer2, bir rs_matrix3x3 ile çarpılırken vektör, (0) ile genişletilir.

API 14'ten itibaren bu işlev, ilk bağımsız değişken olarak bir sabit değer matrisini alır.

rsMatrixDöndür : Dönüşüm matrisine rotasyon uygulama

void rsMatrixReturn(rs_matrix4x4* m, kayan çürütme, kayan x, kayan y, kayan z);
Parametreler
dk.Değiştirilecek matris.
çürükDerece cinsinden ne kadar dönüş yapılacağı.
xDönme ekseni olan vektörün X bileşeni.
yDönme ekseni olan vektörün Y bileşeni.
zDönme ekseni olan vektörün Z bileşeni.

m matrisini bir rotasyon matrisi ile çarpın.

Bu işlev, önce bir döndürme yapmak için dönüşüm matrisini değiştirir. Dönme ekseni (x, y, z) vektörüdür.

Bu birleşik dönüşümü bir vektöre uygulamak için rsMatrixMultiply() işlevini kullanarak vektörü, oluşturulan matrisle çarpın.

rsMatrixScale : Dönüşüm matrisine ölçeklendirme uygulama

void rsMatrixScale(rs_matrix4x4* m, kayan x, kayan y, kayan z);
Parametreler
dk.Değiştirilecek matris.
xX bileşenlerini ölçeklendirmek için birden çok değerini kullanın.
yY bileşenlerini ölçeklendirmek için "Çoklu" kullanın.
zZ bileşenlerini ölçeklendirmek için çoklu kullanın.

m matrisini bir ölçeklendirme matrisi ile çarpın.

Bu işlev, önce ölçeklendirme yapmak için dönüşüm matrisini değiştirir. Ölçeklendirme yaparken, vektörün her bileşeni bir sayıyla çarpılır. Bu sayı negatif olabilir.

Bu birleşik dönüşümü bir vektöre uygulamak için rsMatrixMultiply() işlevini kullanarak vektörü, oluşturulan matrisle çarpın.

rsMatrixSet : Tek bir öğe ayarlayın

void rsMatrixSet(rs_matrix2x2* m, uint32_t col, uint32_t satırı, kayan v);
void rsMatrixSet(rs_matrix3x3* m, uint32_t col, uint32_t satır, kayan v);
void rsMatrixSet(rs_matrix4x4* m, uint32_t col, uint32_t satırı, kayan v);
Parametreler
dk.Değiştirilecek olan matris.
sütunAyarlanacak öğenin sıfır tabanlı sütunu.
satırAyarlanacak öğenin sıfır tabanlı satırı.
vAyarlanacak değer.

Matrisin bir öğesini ayarlayın.

Uyarı: Sütun ve satır parametrelerinin sırası beklenmedik olabilir.

rsMatrixTranslate : Bir çeviriyi dönüşüm matrisine uygulama

void rsMatrixTranslate(rs_matrix4x4* m, kayan x, kayan y, kayan z);
Parametreler
dk.Değiştirilecek matris.
xHer x bileşenine eklenecek sayı.
yHer y bileşenine eklenecek sayı.
zHer Z bileşenine eklenecek sayı.

m matrisini bir çeviri matrisi ile çarpın.

Bu işlev, önce bir çeviri yapmak için dönüşüm matrisini değiştirir. Çeviri yaparken vektörün her bileşenine bir sayı eklenir.

Bu birleşik dönüşümü bir vektöre uygulamak için rsMatrixMultiply() işlevini kullanarak vektörü, oluşturulan matrisle çarpın.

rsMatrixTranspose : Bir matrisin yerini değiştirin

void rsMatrixTranspose(rs_matrix2x2* m);
void rsMatrixTranspose(rs_matrix3x3* m);
void rsMatrixTranspose(rs_matrix4x4* m);
Parametreler
dk.Ters çevirilecek matris.

m matrisinin yerini değiştirin.