Bilgisayar Grafiklerinde Homojen Koordinatlar neden kullanılır?


Yanıtlar:


12

Grafiklerde kullanılan matematiği basitleştirir ve birleştirir:

  • Matrisli çevirileri temsil etmenizi sağlar.

  • Perspektif projeksiyonlarında bölünme derinliğini temsil etmenizi sağlar.

Birincisi afin geometri ile ilgilidir. İkincisi projektif geometri ile ilgilidir.


Ne tür örnekler arıyorsunuz? Çeviri matrisleri ve perspektif projeksiyonları ile ilgili herhangi bir şey aramak kolay mı olmalı?
Bart

@Bart, Analoji gerekli.

2
@Anonymous için özür dilerim, ama bu bana gerçekten bir şey söylemiyor. Tam olarak ne aradığınızı açıklamak için daha fazla kelime kullanmanız gerekecek.
Bart

Bence bu cevap çok yeni değil çünkü yeni başlayanlar için çok teknik. Belki basit ifadelerle basit bir örnek ilkeleri daha iyi gösterir
Nathan

5

Adında: Homojen koordinatlar iyi ... homojendir. Homojen olmak, dönme, çeviri, ölçekleme ve diğer dönüşümlerin tekdüze bir temsili anlamına gelir.

Tek tip bir gösterim optimizasyonlara izin verir. 3D grafik donanımı, 4x4 matrislerde matris çarpımı gerçekleştirmek için uzmanlaşabilir. Hatta 0 veya 1 çarpımları tanımak ve kaydetmek için uzmanlaşabilir, çünkü bunlar sıklıkla kullanılır.

Homojen koordinatlar kullanılmaması, güçlü bir şekilde optimize edilmiş donanımın sonuna kadar kullanılmasını zorlaştırabilir. Hangi program homojen koordinatlar için donanımın optimize edilmiş talimatlarının kullanılabileceğini (tipik olarak bir derleyici, ancak bazen işler daha karmaşık) tanır, diğer sunumlar için optimizasyon yapmakta zorlanır. Daha az optimize edilmiş talimatları seçecektir ve bu nedenle donanımın potansiyelini kullanmaz.

Örnek çağrıları olduğu gibi: Sony'nin PS4'ü büyük matris çarpımları yapabilir. O kadar iyi ki bir süre satıldı, çünkü daha pahalı süper bilgisayarlar yerine bunların kümeleri kullanıldı. Sony daha sonra donanımlarının askeri amaçlarla kullanılmamasını istedi. Evet, süper bilgisayarlar askeri teçhizattır.

Araştırmacılar, grafik olmasa bile matris çarpımlarını hesaplamak için grafik kartları kullanmak oldukça olağan hale gelmiştir. Bunun nedeni, genel amaçlı CPU'lardan daha iyi büyüklükte olmalarıdır. Karşılaştırma için, modern çok çekirdekli CPU'lar 16 boru hattı sırasına (x0.5 veya x2 çok önemli değil) sahipken, GPU'lar 1024 boru hattı sırasına sahiptir.

Gerçek paralel işlemeye izin veren boru hatlarından daha fazla çekirdek değildir. Çekirdekler dişler üzerinde çalışır. İş parçacıkları açıkça programlanmalıdır. Boru hatları talimat düzeyinde çalışır. Çip, talimatları aşağı yukarı kendi başına paralelleştirebilir.


"Sony'nin PS4 muazzam matris çarpmaları yapabilir." PS3'ün Hücre işlemcisini mi kastediyorsunuz? PS4 oldukça sıradan bir x86 işlemciye sahip.
Wumpf

Bu iyi bir cevap olsa da, OP sorusunu cevapladığını düşünmüyorum ve bir tür donanım için optimize edildiği için homojen kabloların kullanıldığını öne sürüyor, daha ziyade homojen kablolar daha kullanışlı ve sonunda donanım geliştirildi. Vec4s için başka bir argüman, 128bit hizalanmış olmasıdır, bu da geniş bellek veri yollarında (GPU)
okunmayı

4

Tamamlayıcı:

homojen koordinatlar ayrıca sonsuzluğu temsil etmeyi sağlar: , yani sonsuzluktaki yönündeki nokta . Tipik olarak, sonlu veya sonsuz konumdaki ışık kaynakları aynı şekilde temsil edilebilir.(x,y,z,0)=x,y,z0x,y,z

Perspektif dönüşümü hakkında, perspektif bozulması olmadan (PC'deki erken grafik donanımının aksine) doğru şekilde enterpolasyona izin verir.


2

Kişisel bir tat olarak her zaman (mümkün olduğunda) homojen koordinatlar kullanmaktan kaçındım ve düz Kartezyen formülasyonu tercih ettim.

Bunun ana nedeni, homojen koordinatların, dönüşüm matrislerinde (0, 0, 0, 1) 4 yararsız depolama ve hesaplamayı (ayrıca "varsayılan olarak" kullanılan genel amaçlı matris hesaplama rutinlerinin yükünü içeren 4 önemsiz girişi kullanmasıdır. bu durum).

Dezavantajı, denklemleri yazarken daha fazla dikkat etmeniz ve matris teorisinin desteğini kaybetmenizdir, ancak şimdiye kadar hayatta kaldım.


1
Prensip olarak, bu girişleri, gerçekte oldukları gibi hareket etseler bile saklamamış olan veri türleri uygulanabilir.

1
@Hurkyl Açıkçası. Genel amaçlı matris araç kutuları elinizin altında olduğundan, bu nadiren yapılır.
Yves Daoust

@Yvesdaoust plain Cartesian formulation3D grafiklerde kullanımını tanımlayan bir kaynak örneği verebilir veya bu kaynağa bağlantı verebilir misiniz ?
Dan

@ Dan: y = Ax + b kullanın, burada A bir 3x3 matris ve ba 3x1 vektörü, y '= Ax' yerine y ', x' artırılmış vektörler ve A 4x4 matrisidir.
Yves Daoust

@Yvesdaoust Yani gölgelendiricilerinize 4x4 matris yerine 3x3 matris ve 3x1 vektör geçiriyor musunuz? Nerede hesaplıyorsunuz ve saklıyorsunuz w?
Dan

2

Matrisleri kullanarak dönüşümleri temsil etmek istediğinizi düşünün. Puanlar ve ve olarak ölçeklendirme Bunlar doğrusal dönüşümler olarak bilinir ve dönüşümleri matris olarak yapmamıza izin verir çarpmalar. Ancak, çevirileri matris çarpımı olarak yapamayacağınıza dikkat edin. Bunun yerine

[xy]
[uv]=[cos(θ)sin(θ)sin(θ)cos(θ)][xy]
[uv]=[k100k2][xy]
[uv]=[xy]+[st]
Afin dönüşüm olarak bilinir. Ancak bu istenmeyen bir durumdur (hesaplama olarak).

R ve S dönme ve ölçeklendirme matrisleri olsun ve T bir çeviri vektörü olsun. Bilgisayar grafiklerinde, bir noktaya bir dizi çeviri yapmanız gerekebilir. Bunun ne kadar zor olabileceğini hayal edebilirsiniz.

Ölçekleyin, çevirin, sonra döndürün ve ölçekleyin, sonra tekrar çevirin: Çok kötü değil ama bu hesaplamayı bir milyon noktada yaptığınızı hayal edin. İstediğimiz şey rotasyonu, ölçeklemeyi ve çeviriyi matris çarpımı olarak temsil etmektir. Daha sonra bu matrisler, hesaplamaları yapmak kolay olan tek bir dönüşüm matrisi için birlikte çoğaltılabilir.

p=SR(Sp+T)+T

Ölçeklendir, çevir, sonra döndür ve ölçeklendir, sonra tekrar :

M=TSRTS
p=Mp

Bunu noktalarımıza başka bir koordinat ekleyerek başarabiliriz. Tüm bunları 2D grafikler (3D noktalar) için göstereceğim, ancak tüm bunları 3D grafiklere (4D noktaları) genişletebilirsiniz. Döndürme matrisi: Ölçek matrisi: Çeviri matrisi: Bunların aslında size istenen dönüşümü sağladığına ve birden fazla matrisi bir araya getirerek bir dizi dönüşüm oluşturabileceğinize ikna etmek için bazı örnekler üzerinde çalışmalısınız.

p=[xy1]
R=[cos(θ)sin(θ)0sin(θ)cos(θ)0001]
S=[k1000k20001]
T=[10t101t2001]

Daha ileri gidebilir ve ekstra koordinatın herhangi bir değer almasına izin verebilirsiniz. ve bu homojen (x, y, w) koordinatın (x / w, y / öklid (x, y) koordinatını temsil ettiğini söyleyin ). Normalde matris dönüşümlerini kullanarak bölme yapamazsınız, ancak w'nin bölen olmasına izin vererek w'yi bir değere (bir matris çarpımı yoluyla) ayarlayabilir ve bölmeyi temsil etmesine izin verebilirsiniz. Bu, projeksiyon yapmak için kullanışlıdır, çünkü (3B olarak) x ve y koordinatlarını -z'ye bölmeniz gerekir (sağ elli koordinat sisteminde). Aşağıdaki projeksiyon matrisini kullanarak ayarlayarak bunu yapabilirsiniz: Q = [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 - 1 0 ]

p=[xyw]
Q=[1000010000100010]

1

Afin koordinatlardaki hesaplamalar genellikle eklemeler veya çarpmalarla karşılaştırıldığında pahalı olan bölümler gerektirir. Bir kişinin projektif koordinatları kullanırken bölünmesi gerekmez.

Projektif koordinatları (ve daha genel olarak projektif geometrisi) kullanmak, özel durumları da ortadan kaldırma eğilimindedir ve her şeyi daha basit ve daha homojen hale getirir.


"Afin koordinatlarda hesaplamalar genellikle bölünmeler gerektirir": Nedenini anlamıyorum. Aslında tam olarak aynı ifadeleri hesaplarsınız.
Yves Daoust

@Yves: Belirli "bilgi işlem matris dönüşümleri" sorusuna değil, daha genel "bilgisayar grafiklerinde kullanım" konusuna yanıt veriyorum.

@Hurkyl: Ben de yapın. Bir sahneyi oluştururken, aynı miktarda bölünme ile tam olarak aynı ifadeleri hesaplarsınız (fark, 0 faktörlü kukla terimlerdedir).
Yves Daoust

@Yves: Hrm. Afinite dönüşümü bir dereceye kadar ertelenebilir hesaplamalar yapmaya alışkınım; Sık sık gelmediğini söylersen uzmanlığından vazgeçeceğim.

-1
  • daha basit formüller
  • Daha az özel durum
  • Birleşme ve
  • ikilik

2
Cevap çok belirsiz. Her noktayı ayrıntılandırmalısınız.
Rotem
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.