Ş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?
9
A
cevap
7
çeşitli nedenleri göz uzay kullanılır vardır:
- Rahattır. Var olan iyi tanımlanmış bir alan ve bir şekilde pozisyonları dönüştürme yolunda hesapladığınız bir alan.
- 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.
- 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.
- 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
- 1. Kıvılcım boru hattındaki Deeplearning4j: org.apache.spark.ml.PredictionModel.predict yönteminin
- 2. Bir boru hattındaki `$?` Değerinin doğru değeri nedir?
- 3. Jenkins çok dallı boru hattındaki yapılandırmayı düzenleme
- 4. Varlıkların boru hattındaki doğru yolu belirtin Rails 4+
- 5. Deklarasyonlu boru hattındaki atlanan aşamaların daha iyi görüntülenmesi
- 6. Deklarasyonlu Jenkins boru hattındaki aşamalar arasındaki değişkenleri nasıl geçirebilirim?
- 7. Jenkins boru hattındaki kimlik bilgileri ile SVN Checkout?
- 8. Geçerli bellekte parçalanma hatası
- 9. JavaScript pixel koordinatlarına dönüştürmek
- 10. C++ derleme aşamasında
- 11. Sistem çağrısı kabulünde parçalanma hatası
- 12. Geliştirme aşamasında Docker vs. Rocket
- 13. Neden Boru Angular2'de düzgün çalışmıyor?
- 14. boru
- 15. UIKit koordinatlarını SpriteKit koordinatlarına dönüştürün
- 16. Metin boyutunu veri koordinatlarına dönüştürür
- 17. jQuery, sayfa yüklenme aşamasında kayboluyor
- 18. Evrensel bağlantılar, geliştirme aşamasında çalışmıyor
- 19. Scalacheck/Scalatest PropertyCheckConfig neden göz ardı ediliyor?
- 20. Neden 'svn' göz ardı etmiyor mu?
- 21. Android Opengl ES: GLUtils.glTexImage2D neden GL_INVALID_ENUM
- 22. Neden birden çok OpenGL bağlamı kullanıyorsunuz?
- 23. Opengl sahnesinde neden derinlik arabellek sorunları var?
- 24. Yığın üzerindeki büyük dizileri ayırırken parçalanma hatası
- 25. openGL: shader'lu satırlar
- 26. OpenGL
- 27. OpenGL
- 28. OpenGL:
- 29. OpenGL
- 30. OpenGL