2010-12-30 12 views
10

मुझे समझ में नहीं आता कि ओपनजीएल का glMatrixMode क्या है।ओपनजीएल में ग्लैमैट्रिक्स मोड क्यों है?

जहां तक ​​मैं देख सकता हूँ, जब glMatrixMode(GL_MODELVIEW) कहा जाता है, यह glVertex, glTranslate, glRotate और की तरह, है कि द्वारा पीछा किया जाता, ओपन आदेशों जगह अंतरिक्ष में कहीं न कहीं कुछ वस्तुओं। दूसरी ओर, यदि glOrtho या glFrustum या gluProjection कहा जाता है (यानी रखा गया ऑब्जेक्ट प्रदान किया गया है), तो इसकी glMatrixMode(GL_PROJECTION) की अग्रिम कॉल है।

मुझे लगता है कि मैं अब तक क्या लिखा एक धारणा है, जिस पर किसी मुझे गलत साबित होगा है, लेकिन विभिन्न मैट्रिक्स मोड रों बिल्कुल का उपयोग करने का बिंदु नहीं है है क्योंकि जीएल-कार्यों के विभिन्न प्रकार के होते हैं : से संबंधित वस्तुओं और वस्तुओं को किस प्रकार प्रदान किया जाता है?

+6

ध्यान दें कि अब इसे बहिष्कृत कर दिया गया है और आपको ओपनजीएल 3.1 से शुरू होने वाले शेडर्स और स्पष्ट वर्दी का उपयोग करना चाहिए। उदाहरण के लिए, ओपनजीएल ईएस 2.0 glMatrixMode() और इसी तरह का समर्थन नहीं करता है। (ठीक है, बेशक, जब तक आपके पास बहुत सारे कोड नहीं हैं जो/या पुराने हार्डवेयर/ड्राइवरों का समर्थन करने की आवश्यकता है।) – Macke

+4

और 'glVertex' को ओपनजीएल 1.0 अप से बहिष्कृत माना जाना चाहिए था। :) – Kos

+4

जब आप बहिष्कृत के रूप में कुछ का जिक्र करते हैं, तो कृपया यह भी उल्लेख करें कि आधुनिक प्रतिस्थापन क्या है, क्योंकि इसके बिना यह अधिक जानकारीपूर्ण नहीं है। ओपनजीएल 1.1 के बजाय – SasQ

उत्तर

18

यह आसान है और बहुत संक्षेप में जवाब दिया जा सकता: (के रूप में glVertex में)

  • प्रतिपादन कोने वर्तमान स्थिति पर निर्भर करता है मैट्रिक्स "मॉडल-व्यू मैट्रिक्स" कहा जाता है की और "प्रक्षेपण मैट्रिक्स",

  • आदेशों glTranslatef, glPushMatrix, glLoadIdentity, glLoadMatrix, glOrtho, gluPerspective और पूरे परिवार के वर्तमान मैट्रिक्स (जो ऊपर के दोनों है) को प्रभावित,

  • आदेश glMatrixModeमैट्रिक्स (मॉडल-व्यू या प्रक्षेपण) जो चयन करता है forementioned आदेश से प्रभावित है।

(इसके अलावा, वहाँ भी बनावट बनावट निर्देशांक के लिए इस्तेमाल किया मैट्रिक्स है, लेकिन यह seldomly प्रयोग किया जाता है।)

तो आम उपयोग है:

  • मॉडल-व्यू मैट्रिक्स सक्रिय है अधिकांश समय,
  • जब भी आपको प्रक्षेपण मैट्रिक्स (आमतौर पर शुरुआत में या जब खिड़की का आकार बदलता है) शुरू करना होता है, तो प्रक्षेपण के लिए सक्रिय स्विच करें, एक परिप्रेक्ष्य स्थापित करें, और मॉडल-व्यू पर वापस लौटें।
+0

आपको पूर्ण प्रदर्शन पास के माध्यम से हर बार प्रक्षेपण मैट्रिक्स को फिर से सेट करना चाहिए (यानी एक नया रीसेट करें)। वैसे भी आपको किसी भी वास्तविक दुनिया के आवेदन के लिए कई अलग-अलग अनुमानों का उपयोग करना होगा। उदाहरण के लिए किसी गेम में एचयूडी प्रस्तुत करने के लिए आप दृश्य के मुकाबले कुछ अन्य प्रक्षेपण का उपयोग करेंगे। ओपनजीएल को संदर्भ प्राप्त करने के अलावा "प्रारंभिकरण" नहीं पता है, इसलिए कृपया कहीं भी एक बार सामान करने के बारे में भूल जाएं, या उस बेवकूफ पैटर्न को रीशेप हैंडलर में प्रक्षेपण सेट करना। – datenwolf

+0

@ डेटनवॉल्फ - सच है, लेकिन 2 डी ओवरले के लिए प्रोजेक्शन मैट्रिक्स पर पुश/पॉपमैट्रिक्स भी काम करता है, इसलिए यह वास्तव में एक बड़ा अंतर नहीं है। – Kos

+0

अजीब चीज यह है कि मैं कल्पना नहीं कर सकता कि प्रक्षेपण मैट्रिक्स की तुलना में किसी अन्य चीज़ के लिए 'ग्लोथो' या 'ग्लूपेर्सपेक्टिव' का उपयोग कैसे किया जा सकता है, और 'ग्लट्रांसलेट', 'ग्लोटोट' और प्रक्षेपण मैट्रिक्स के लिए अन्य ट्रांसफॉर्म का उपयोग किया जा सकता है, तो क्यों नहीं प्रक्षेपण स्थापित करने के लिए कार्य आंतरिक रूप से प्रक्षेपण मैट्रिक्स का चयन करें? यह उपयोगकर्ताओं को कुछ सिरदर्द बचाएगा और मुझे लगता है कि अधिक बेवकूफ साबित होगा। फ़ंक्शन जिन्हें मैट्रिक्स पर भी बुलाया जा सकता है, अभी भी मोड चयन का उपयोग पहले से ही कर सकते हैं। – SasQ

2

सभी ज्यामिति निर्देशांक अनुक्रम में कई रैखिक परिवर्तनों से गुजरते हैं। जबकि किसी भी रैखिक परिवर्तन को एक एकल मैट्रिक्स द्वारा व्यक्त किया जा सकता है, अक्सर आप परिवर्तनों के अनुक्रम के बारे में सोचना और अनुक्रम संपादित करना चाहते हैं, और यदि आपके पास केवल एक ही मैट्रिक्स है तो आप केवल उस अनुक्रम के सिरों को बदल सकते हैं। कई परिवर्तन कदम प्रदान करके, ओपनजीएल आपको मध्य में कई जगह देता है जहां आप परिवर्तन भी बदल सकते हैं।

ज्यामिति उत्सर्जित करने से पहले glMatrixMode पर कॉलिंग का कोई प्रभाव नहीं पड़ता है। ट्रांसफॉर्म मैट्रिक्स को संपादित करने से पहले आप glMatrixMode पर कॉल करें, यह निर्धारित करने के लिए कि उन अनुक्रमों में समग्र अनुक्रम कहां दिखाई देता है।

(एनबी: अनुक्रम को देखते हुए एक बहुत अधिक समझ में अगर तुम्हें याद है कि अनुवाद और रोटेशन क्योंकि अनुवाद रोटेशन के केंद्र में परिवर्तन, विनिमेय नहीं कर रहे हैं बनाता है उसी तरह अनुवाद और स्केलिंग विनिमेय नहीं हैं।।)

4

आप कर सकते हैं प्रक्षेपण मैट्रिक्स के लिए glRotate और glTranslate का भी उपयोग करें।

इसके अलावा: ओपनजीएल बनावट और रंगों के परिवर्तनों का समर्थन करता है। यदि आप इस सुविधा को सक्रिय करते हैं तो आप उदाहरण के लिए प्रत्येक फ्रेम (धीमी) बनावट बनावट को दोबारा लिखने के बिना किसी ऑब्जेक्ट के बनावट निर्देशांक को संशोधित कर सकते हैं।

यदि आप किसी ऑब्जेक्ट में बनावट को स्क्रॉल करना चाहते हैं तो यह एक बहुत उपयोगी सुविधा है। इसके लिए आपको केवल टेक्स्ट ऑब्जेक्ट को आकर्षित करना है, मैट्रिक्स मोड को GL_TEXTURE पर सेट करना है और ऑफसेट को बनावट में सेट करने के लिए glTranslate को कॉल करना है।

+2

इसके अलावा, प्रोजेक्टिव बनावट मैट्रिस छाया और प्रक्षेपित बनावट (स्टेज स्पॉटलाइट्स, हेडलाइट्स, डिस्को, फिल्म प्रोजेक्टर इत्यादि) के साथ उपयोग में आते हैं ... – Macke

3

जैसा कि निल्स ने इंगित किया है, आपके पास जो कुछ भी बताया गया है उससे आपके पास मैट्रिस के लिए और कुछ है। पूरी तरह से सभी मैट्रिक्स सामान के साथ भाग (3.1 के बाद से)

  • ओपन कोर करता है, इसलिए जीएल ES 2.0 करता है:

    मैं एक जोड़े को विचार जोड़ देंगे। यह केवल इस तथ्य के कारण है कि शेडर कार्यक्रमों ने उन्हें जीएल स्तर पर उजागर करने की आवश्यकता की अधिक आवश्यकता को हटा दिया है (हालांकि यह अभी भी एक सुविधा है)। फिर आपके पास केवल वर्दी होती है, और आपको क्लाइंट पक्ष पर पूरी तरह से अपना मूल्य गणना करना होगा।

  • आपके द्वारा उल्लेख किए गए लोगों की तुलना में अधिक मैट्रिक्स मैनिपुलेशन एंट्री पॉइंट्स हैं।उनमें से कुछ प्रक्षेपण/मॉडलव्यू (glLoadIdentity/glLoadMatrix/glMultMatrix, पुश/पॉप) के लिए समान रूप से अच्छी तरह से लागू होते हैं, यदि आप मैट्रिक्स गणना स्वयं करना चाहते हैं तो वे बहुत उपयोगी हैं (कहें क्योंकि आपको अपने आवेदन में कहीं और चाहिए)।

+2

"क्या यह सभी मैट्रिक्स सामान से दूर है" वास्तव में सटीक नहीं है। मैट्रिक्स गुणा अभी भी वर्टेक्स निर्देशांक में परिवर्तन लागू करने का तरीका है। अंतर यह है कि यह अब पाइपलाइन में एक निश्चित कार्य नहीं है, लेकिन पूरी तरह से प्रोग्राम करने योग्य शेडर्स द्वारा नियंत्रित है। –

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