Bir parçası başına aydınlatma yapıyorum ve normal vecter düzeltirken ben bu kodu var: vec3 f_normal = mat3(MVI) * normal;
MVI Nerede: mat4 MVI = transpose(inverse(ModelViewMatrix));
. Peki mat3(MVI)
ifadesinden sonra ne dönüyor?ne yapıyoruz extractly mat3 (a mat4 matrisi) ifadesi GLSL içinde?
cevap
mat3(MVI) * normal
4x4 matris üst 3x3 matris döndürür ve bu normal çarpar. Bu matris 'normal matris' olarak adlandırılır. Normlarını dünya uzayından göz alanlarına getirmek için bunu kullanıyorsunuz. Matrisin üst 3x3 kısmı ölçek ve rotasyon için önemlidir, geri kalanı sadece çeviri içindir (ve normlar asla çevrilmez)
Dünya uzayından göz alanına normal bir şekilde girmek için 3x3 tersine ihtiyacınız vardır. model görünüm matrisinin aktarımı. bu durumda othro Normal (hiçbir düzgün olmayan ölçeğinde) da matrisin sürece orijinal Matris, ters çevrilmiş devrik aynıdır.
Modelview matrisinin üst 3x3'ünü kullanmak, yalnızca tek tip olmayan ölçekler olmadığında çalışır, aksi takdirde model görünümünün tersini (4x4 matrisi) kullanmanız gerekir. Bir 4x4 matrisi ile çarpılırken, normalin w bileşenini sıfır olarak ayarlamanız gerektiğini unutmayın. –
@racarate düzeltildi. İnsanların yanlış fikir edinmesini önlemek için cevabımı değiştireceğim. –
GLSL types'dan: "Başka bir matristeki matris yapısı yapılırken boyut sınırlaması yoktur. Böylece 2x4 matrisinden bir 4x2 matrisi oluşturabilir, yalnızca ilgili öğeler kopyalanabilir.". Sonuç olarak, MVI'nın sol üst 3x3 alt matrisini elde edersiniz.
teşekkürler, bu nedenle nihai sonuca etkiler geliyor? (neden normal vektörlerde dördüncü elemanı kullanmaz, fakat MVI üzerinde bazı elemanları çıkarmaz?) –
Genel bir işlemdir ve üzerinde çalışılan temel matrisin semantiği hakkında hiçbir şey bilmiyor. –
- 1. GLSL
- 2. GLSL içinde gl_FragCoord nasıl hesaplanır
- 3. tutarsızlıklar veya "kötü" bir görünüm matrisi
- 4. GLSL ile bir doku tonunu nasıl değiştirebilirim?
- 5. F # hesaplama ifadesi ne zaman
- 6. GLSL
- 7. GLSL 4.1 with gl_ModelViewProjectionMatrix
- 8. GLSL
- 9. GLSL
- 10. GLSL
- 11. GLSL Tessellation Displacement Mapping
- 12. Angularjs içinde/else ifadesi
- 13. Neden bu GLSL Vertex Shader derlenmiyor?
- 14. Dplyr içinde gruplandırılmış değişkenlerin korelasyon matrisi
- 15. Bu "Lambda İfadesi" ne yapar?
- 16. GLSL | Billboard gölgelendirici, ölçeklemeyi koruyun
- 17. GLSL boyutu
- 18. Matrisi
- 19. jsp içinde giriş ifadesi içinde koşullu ifade
- 20. Vim sözdizimi ve Lateks matrisi içinde işaretleme
- 21. 2d matrisi için 3d matrisi yeniden şekillendirin
- 22. GLSL: Özel işlevim bulamadı
- 23. Bir glm :: mat4 dizisi nasıl başlatılır?
- 24. Bir glm :: vec3'ü bir glm :: mat4
- 25. "$ 1/*" ifadesi "$ 1/* içinde dosya için" anlamı
- 26. "go install./..." ifadesindeki "./..." ifadesi ne anlama geliyor?
- 27. Bu CSS deyimindeki "@" ifadesi ne anlama geliyor?
- 28. @ "../ .." ifadesi bir yolda ne anlama geliyor?
- 29. MySQL USING ifadesi, DELETE ile ne yapar?
- 30. "+0" ifadesi ne demek regexp \ k <name+0>?
Eh, basit muhakeme (ve bilgisayar grafikleri matematiksel temelleri sadece küçük bir anlayış) üst sol 3x3 parçası olduğunu belirler. Bunun yanı sıra, her şekilde, matrisinizi gölgelendiriciye dönüştürmeyin ve tersine çevirmeyin. Bu vertex'ler değişmez ve (o tek matriks için artık almaz yerde) CPU üzerinde yapılabilir. Hızlı cevap için –