2012-06-04 14 views
9

मैं प्रति खंड प्रकाश कर रहा हूं और सामान्य वेक्टर को सही करते समय, मुझे यह कोड मिला: vec3 f_normal = mat3(MVI) * normal; जहां एमवीआई है: mat4 MVI = transpose(inverse(ModelViewMatrix));। तो mat3(MVI) कथन के बाद क्या वापसी है?glsl में क्या extractly mat3 (एक mat4 matrix) कथन करते हैं?

+2

अच्छा, सरल तर्क (और कंप्यूटर ग्राफिक्स के गणितीय मूलभूत बातें की एक छोटी समझ) यह बताता है कि यह ऊपरी बाएं 3x3 भाग है। इसके अलावा, हर तरह से shader में अपने मैट्रिक्स को स्थानांतरित और उलटा नहीं है। यह प्रति-वर्टेक्स नहीं बदलता है और सीपीयू पर किया जा सकता है (जहां यह एक एकल मैट्रिक्स के लिए अब नहीं लेता है)। –

उत्तर

11
mat3(MVI) * normal 

4x4 मैट्रिक्स से ऊपरी 3x3 मैट्रिक्स देता है और उसके द्वारा सामान्य को गुणा करता है। इस मैट्रिक्स को 'सामान्य मैट्रिक्स' कहा जाता है। आप अपने आदर्शों को विश्व अंतरिक्ष से आंखों के स्थान पर लाने के लिए इसका उपयोग करते हैं। मैट्रिक्स के ऊपरी 3x3 भाग, पैमाने और रोटेशन के लिए महत्वपूर्ण है, जबकि बाकी केवल अनुवाद के लिए है (और normals अनुवाद कभी नहीं कर रहे हैं)

आंख अंतरिक्ष के लिए दुनिया अंतरिक्ष से एक सामान्य लेने के लिए आपको सिर्फ 3x3 उलटा जरूरत मॉडल व्यू मैट्रिक्स के को स्थानांतरित करें। जब तक उस मामले में ओथ्रो सामान्य (कोई गैर-वर्दी स्केल) में आपका मैट्रिक्स न हो, मूल मैट्रिक्स इसके विपरीत ट्रांसपोज़ जैसा ही होता है।

+0

मॉडलव्यू मैट्रिक्स के ऊपरी 3x3 का उपयोग केवल तभी काम करता है जब कोई गैर-वर्दी स्केल नहीं होता है, अन्यथा आपको मॉडलव्यू के विपरीत (जो 4x4 मैट्रिक्स है) का स्थानांतरण करना होगा। ध्यान दें कि 4x4 मैट्रिक्स द्वारा गुणा करते समय आपको सामान्य से शून्य के डब्ल्यू-घटक को सेट करना होगा। –

+0

@racarate सही। लोगों को गलत विचार पाने से बचने के लिए मैं अपना जवाब संशोधित करूंगा। –

2

GLSL types से "किसी अन्य मैट्रिक्स से मैट्रिक्स निर्माण करते समय आकार पर कोई प्रतिबंध नहीं हैं। इसलिए आप 2x4 मैट्रिक्स से 4x2 मैट्रिक्स बना सकते हैं, केवल इसी तत्वों की प्रतिलिपि बनाई गई है।"। तो, परिणामस्वरूप आपको एमवीआई के शीर्ष-बाएं 3x3 सबमिट्रिक्स मिलते हैं।

+0

त्वरित उत्तर के लिए धन्यवाद, तो क्या यह अंतिम परिणाम को प्रभावित करता है? (यह मानक वेक्टर में चौथे तत्व का उपयोग क्यों नहीं करता है लेकिन एमवीआई पर कुछ तत्वों को हटा देता है?) –

+3

यह एक सामान्य ऑपरेशन है और अंतर्निहित मैट्रिक्स के अर्थशास्त्र के बारे में कुछ भी नहीं जानता है। –

संबंधित मुद्दे