2011-07-12 15 views
9

Şu anda küçük bir 3D motoru programlıyorum ve neden fragman gölgelendiricisinde göz alanı koordinatlarına gitmem gerektiğini merak ediyordum. Bunu yapmak için, kamera matrisini göz koordinatlarındaki ışık konumlarını ve göz koordinatlarında ışık yönlerini koymak için bir camera_normal matrisi dönüştürmek için bir üniforma koymak zorundayım. Neden herkes bu koordinatları kullanıyor? Hiç bir avantaj görmüyorum, bu yüzden bu seçimi anlamama yardım ederseniz minnettar olurum. Teşekkürler :)OpenGL boru hattındaki parçalanma aşamasında neden göz koordinatlarına gitmeliyiz?

cevap

7

çeşitli nedenleri göz uzay kullanılır vardır:

  1. Rahattır. Var olan iyi tanımlanmış bir alan ve bir şekilde pozisyonları dönüştürme yolunda hesapladığınız bir alan.
  2. Dünya alanıyla aynı ölçeğe sahip, ancak dünya uzayında yaşanan sorunlara sahip değil. Göz alanı her zaman (nispeten) sıfıra yakındır (göz 0'dan beri), bu nedenle açık bir dönüşüm matrisine sahip olmak için makul bir alan. Ölçek önemlidir, çünkü dünya uzayında hesaplanan mesafeleri (ışık zayıflama terimleri gibi) sağlayabilirsiniz. Mesafeler göz alanında değişmez.
  3. Yine de onu doğrusal bir alana dönüştürmeniz gerekir. Projeksiyon sonrası alanlar gibi doğrusal olmayan bir alanda özellikle dikkatle aydınlatma yapmak zor. Yani bir çeşit doğrusal uzayda normal ve normal değerler vermek zorunda kalacaksınız, bu yüzden göz alanı da olabilir.
  4. En az dönüşüm gerektirir. Göz alanı, projeksiyon dönüşümünden hemen önceki boşluktur. Doğrusal bir alana (örneğin ertelenmiş oluşturma) geri dönüşümü yapmanız gerekiyorsa, en az işlem gerektiren göz alanıdır.
4

Kamera matrisini gölgelendiriciye sağlamanız gerekmez ve orada ışık konumunu ve yön dönüşümünü gerçekleştirmeniz gerekmez. Aslında, bu şekilde yapmak için oldukça verimsizdir, çünkü her bir köşe için aynı sayılarda tekrar tekrar aynı işlemleri yapıyorsunuz.

Sadece ışık konumunu ve CPU tarafını yönlendirin ve kolayca dönüştürülen ışık parametrelerini gölgelendiriciye verin. Bununla birlikte, özellikle normal haritalama söz konusuysa, ışıklandırma hesaplamaları yine de göz alanında daha kısadır. Ama herşeyi yine de herşeye dönüştürmelisiniz, çünkü normlar perspektif dönüşümü tarafından dönüştürülmez (köşe pozisyonları doğrudan klip alanına dönüştürülebilir).

İlgili konular