पहचान मैट्रिक्स, प्रक्षेपण और मॉडलव्यू मैट्रिसेस के संदर्भ में, अनिवार्य रूप से मैट्रिक्स को उसकी डिफ़ॉल्ट स्थिति में रीसेट करता है।
जैसा कि आप उम्मीद करते हैं कि आप जानते हैं, glTranslate
और glRotate
हमेशा मैट्रिक्स की वर्तमान स्थिति के सापेक्ष होते हैं। उदाहरण के लिए, यदि आप कॉल glTranslate
करते हैं , तो आप मैट्रिक्स की वर्तमान स्थिति से अनुवाद कर रहे हैं, मूल से नहीं। लेकिन अगर आप मूल पर शुरू करना चाहते हैं glLoadIdentity()
, तो जब आप कॉल करते हैं , और तब आप glTranslate
उस मैट्रिक्स से कर सकते हैं जो अब मूल पर स्थित है, या glRotate
मैट्रिक्स से जो अब डिफ़ॉल्ट दिशा में उन्मुख है।
मुझे लगता है कि बून का जवाब, कि यह 1 के बराबर है, बिल्कुल सही नहीं है। मैट्रिक्स वास्तव में इस तरह दिखता है:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
यही पहचान मैट्रिक्स है। बून सही है, गणितीय रूप से, कि किसी भी मैट्रिक्स को उस मैट्रिक्स के साथ गुणा किया जाता है (या एक मैट्रिक्स जो ऐसा दिखता है; विकर्ण वाले, अन्य सभी 0s) का परिणाम मूल मैट्रिक्स में होगा, लेकिन मुझे विश्वास नहीं होता कि उन्होंने समझाया कि यह क्यों महत्वपूर्ण है।
यही कारण है कि यह महत्वपूर्ण है क्योंकि ओपनजीएल प्रत्येक मैट्रिक्स के माध्यम से सभी पदों और घुमावों को गुणा करता है; उदाहरण के लिए जब आप एक बहुभुज ( glBegin(GL_FACE)
, कुछ बिंदुओं glEnd()
) को खींचते हैं, तो वह इसे MODELVIEW के साथ गुणा करके "विश्व स्थान" में बदल देता है, और फिर इसे PROJECT मैट्रिक्स के साथ गुणा करके 3D से 2D में अनुवाद करता है, और यह देता है स्क्रीन पर 2 डी बिंदु, गहराई के साथ (स्क्रीन 'कैमरा' से), जिसका उपयोग यह पिक्सेल खींचने के लिए करता है। लेकिन जब इन मैट्रिक्स में से कोई एक पहचान मैट्रिक्स होता है, तो पॉइंट्स को मैट्रिक्स के साथ गुणा किया जाता है और इसलिए इसे बदला नहीं जाता है, इसलिए मैट्रिक्स का कोई प्रभाव नहीं होता है; यह अंकों का अनुवाद नहीं करता है, यह उन्हें घुमाता नहीं है, यह उन्हें छोड़ देता है-जैसा है।
मुझे आशा है कि यह थोड़ा और स्पष्ट करता है!