मैं प्रति खंड प्रकाश कर रहा हूं और सामान्य वेक्टर को सही करते समय, मुझे यह कोड मिला: vec3 f_normal = mat3(MVI) * normal;
जहां एमवीआई है: mat4 MVI = transpose(inverse(ModelViewMatrix));
। तो mat3(MVI)
कथन के बाद क्या वापसी है?glsl में क्या extractly mat3 (एक mat4 matrix) कथन करते हैं?
उत्तर
mat3(MVI) * normal
4x4 मैट्रिक्स से ऊपरी 3x3 मैट्रिक्स देता है और उसके द्वारा सामान्य को गुणा करता है। इस मैट्रिक्स को 'सामान्य मैट्रिक्स' कहा जाता है। आप अपने आदर्शों को विश्व अंतरिक्ष से आंखों के स्थान पर लाने के लिए इसका उपयोग करते हैं। मैट्रिक्स के ऊपरी 3x3 भाग, पैमाने और रोटेशन के लिए महत्वपूर्ण है, जबकि बाकी केवल अनुवाद के लिए है (और normals अनुवाद कभी नहीं कर रहे हैं)
आंख अंतरिक्ष के लिए दुनिया अंतरिक्ष से एक सामान्य लेने के लिए आपको सिर्फ 3x3 उलटा जरूरत मॉडल व्यू मैट्रिक्स के को स्थानांतरित करें। जब तक उस मामले में ओथ्रो सामान्य (कोई गैर-वर्दी स्केल) में आपका मैट्रिक्स न हो, मूल मैट्रिक्स इसके विपरीत ट्रांसपोज़ जैसा ही होता है।
मॉडलव्यू मैट्रिक्स के ऊपरी 3x3 का उपयोग केवल तभी काम करता है जब कोई गैर-वर्दी स्केल नहीं होता है, अन्यथा आपको मॉडलव्यू के विपरीत (जो 4x4 मैट्रिक्स है) का स्थानांतरण करना होगा। ध्यान दें कि 4x4 मैट्रिक्स द्वारा गुणा करते समय आपको सामान्य से शून्य के डब्ल्यू-घटक को सेट करना होगा। –
@racarate सही। लोगों को गलत विचार पाने से बचने के लिए मैं अपना जवाब संशोधित करूंगा। –
GLSL types से "किसी अन्य मैट्रिक्स से मैट्रिक्स निर्माण करते समय आकार पर कोई प्रतिबंध नहीं हैं। इसलिए आप 2x4 मैट्रिक्स से 4x2 मैट्रिक्स बना सकते हैं, केवल इसी तत्वों की प्रतिलिपि बनाई गई है।"। तो, परिणामस्वरूप आपको एमवीआई के शीर्ष-बाएं 3x3 सबमिट्रिक्स मिलते हैं।
त्वरित उत्तर के लिए धन्यवाद, तो क्या यह अंतिम परिणाम को प्रभावित करता है? (यह मानक वेक्टर में चौथे तत्व का उपयोग क्यों नहीं करता है लेकिन एमवीआई पर कुछ तत्वों को हटा देता है?) –
यह एक सामान्य ऑपरेशन है और अंतर्निहित मैट्रिक्स के अर्थशास्त्र के बारे में कुछ भी नहीं जानता है। –
- 1. GLSL specular प्रकाश
- 2. एक Scipy Sparse Matrix
- 3. GLSL अंकगणितीय ऑपरेटर GLSL में
- 4. क्या आप पाइथन में "वैश्विक" कथन का उपयोग करते हैं?
- 5. glsl
- 6. GLSL
- 7. तैयार कथन कैसे काम करते हैं?
- 8. एसक्यूएल-रिकर्सिव कथन कैसे काम करते हैं?
- 9. Numpy 'smart' symmetric matrix
- 10. glsl अपवर्तन
- 11. क्या एक तैयार कथन
- 12. मैं glsl
- 13. एक सरणी के साथ एक glm :: mat4 कैसे प्रारंभ करें?
- 14. glsl में दो मानकों के बीच कोण की गणना कैसे करते हैं?
- 15. अगर कथन के रूप में '&&' का उपयोग करते हैं तो कथन?
- 16. क्या ये 2 कथन समान हैं?
- 17. क्लाइंट-साइड तैयार कथन क्या हैं?
- 18. अगर कथन के लिए/कथन के विरोध में कथन के लिए अलग-अलग व्यवहार क्यों करते हैं?
- 19. glsl fragmentshader ऑब्जेक्ट आईडी
- 20. ओपन GLSL shader: एक फ्लैट बहुभुज
- 21. === PHP में क्या करते हैं
- 22. ओपन GLSL SSAO कार्यान्वयन
- 23. glsl अनंतता स्थिर
- 24. कैसे GLSL समर्थन ARB_shading_language_include
- 25. GLSL बॉक्स परीक्षण
- 26. केडी-ट्री GLSL
- 27. glsl में प्रकाश का आधा-वेक्टर क्या है?
- 28. आप एक कथन में बनाए गए TQuery ऑब्जेक्ट का संदर्भ कैसे प्राप्त करते हैं?
- 29. ओपनजीएल एक्सटेंशन, सी और glsl
- 30. क्या FileInputStream.skip() एक खोज करते हैं?
अच्छा, सरल तर्क (और कंप्यूटर ग्राफिक्स के गणितीय मूलभूत बातें की एक छोटी समझ) यह बताता है कि यह ऊपरी बाएं 3x3 भाग है। इसके अलावा, हर तरह से shader में अपने मैट्रिक्स को स्थानांतरित और उलटा नहीं है। यह प्रति-वर्टेक्स नहीं बदलता है और सीपीयू पर किया जा सकता है (जहां यह एक एकल मैट्रिक्स के लिए अब नहीं लेता है)। –