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öster | Uçakların çıkarılacağı matris. |
---|---|
sol | Sol uçak. |
sağ ok | Sağ uçak. |
ilk yarı | Üstteki düzlem. |
ikinci yarı | Alt düzlem. |
yakınında | Uçağa yakın. |
uzak | Uzak 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üre | küreyi temsil eden kayan noktalı4’tür. |
---|---|
sol | Sol uçak. |
sağ ok | Sağ uçak. |
ilk yarı | Üstteki düzlem. |
ikinci yarı | Alt düzlem. |
yakınında | Uçağa yakın. |
uzak | Uzak 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ütun | Ayıklanacak öğenin sıfır tabanlı sütunu. |
satır | Ayı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
hedef | Ayarlanacak matris. |
---|---|
dizi | Matrisin ayarlanacağı değerler dizisi. Bu diziler, matris boyutuna bağlı olarak 4, 9 veya 16 kayan noktalı uzunlukta olmalıdır. |
kaynak | Kaynak 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. |
---|---|
Fovy | Y ekseni boyunca derece cinsinden görüş alanı. |
ilişkili program | x / y oranı. |
yakınında | Kırpma düzleminin yakınında. |
uzak | Uzak 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ük | Derece cinsinden ne kadar dönüş yapılacağı. |
x | Dönme ekseni olan vektörün X bileşeni. |
y | Dönme ekseni olan vektörün Y bileşeni. |
z | Dö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. |
---|---|
x | X bileşenlerini ölçeklendirmek için birden çok değerini kullanın. |
y | Y bileşenlerini ölçeklendirmek için "Çoklu" kullanın. |
z | Z 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. |
---|---|
x | Her x bileşenine eklenecek sayı. |
y | Her y bileşenine eklenecek sayı. |
z | Her 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ük | Derece cinsinden ne kadar dönüş yapılacağı. |
x | Dönme ekseni olan vektörün X bileşeni. |
y | Dönme ekseni olan vektörün Y bileşeni. |
z | Dö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. |
---|---|
x | X bileşenlerini ölçeklendirmek için birden çok değerini kullanın. |
y | Y bileşenlerini ölçeklendirmek için "Çoklu" kullanın. |
z | Z 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ütun | Ayarlanacak öğenin sıfır tabanlı sütunu. |
satır | Ayarlanacak öğenin sıfır tabanlı satırı. |
v | Ayarlanacak 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. |
---|---|
x | Her x bileşenine eklenecek sayı. |
y | Her y bileşenine eklenecek sayı. |
z | Her 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.