2012-03-02 15 views
8

ओपन प्रलेखन कहते हैं कि कॉल कि gluLookAt() GL_MODELVIEW मैट्रिक्स पर किया जाना चाहिए:gluLookAt() सबसे अच्छा उपयोग, GL_PROJECTION मैट्रिक्स पर या GL_MODELVIEW मैट्रिक्स पर

http://www.opengl.org/resources/faq/technical/viewing.htm

वास्तव में डॉक्स एक से लिंक लेख जो कहना है कि GL_PROJECTION मैट्रिक्स पर gluLookAt() का उपयोग कर extremly बुरा है:

Help stamp out GL_PROJECTION abuse

दूसरी ओर, वहाँ ट्यूटोरियल और उदाहरण के एक बहुत हैं जहां gluLookAt() मैं है एन तथ्य जीएल_PROJECTION मैट्रिक्स पर बुलाया। और साथ ही, उपर्युक्त आलेख में कहा गया है कि यह GL_PROJECTION मैट्रिक्स पर इसका उपयोग नहीं करने के लिए कहता है, यह है कि इस तरह के उपयोग में ऐसा करने से कोई दृश्य समस्या नहीं है।

मेरे प्रश्न तब हैं: वास्तविक जीवन परियोजनाओं में gluLookAt() का उपयोग करने का सबसे अच्छा तरीका क्या है? क्या यह वास्तव में GL_PROJECTION मैट्रिक्स पर इसका उपयोग करने के लिए बहुत अधिक नहीं है?

+4

"दूसरी तरफ, ऐसे कई ट्यूटोरियल और उदाहरण हैं जहां gluLookAt() को वास्तव में GL_PROJECTION मैट्रिक्स पर बुलाया जाता है।" बहुत से जीएल ट्यूटोरियल एक उदाहरण हैं जो बेवकूफ चीजें करते हैं। यह उन्हें करने के लिए एक औचित्य नहीं है। वास्तव में, यह जीएल ट्यूटोरियल से बचने का एक और कारण है जो शेडर्स का उपयोग नहीं करता है; कम से कम शेडर ट्यूटोरियल उन लोगों द्वारा लिखे गए हैं जो चीजें जानते हैं। –

उत्तर

8

gluLookAt() फ़ंक्शन आपको एक रूपांतरण मैट्रिक्स देता है जो आपके दृश्य में किसी ऑब्जेक्ट के घूर्णन को बदल देता है। तो यह स्पष्ट रूप से एक मॉडल परिवर्तन है और GL_MODELVIEW मैट्रिक्स में जाना चाहिए।

के लिए के रूप में क्यों, यह स्पष्ट हो जाता है जब आप एक शीर्ष शेडर में यह अपने आप करते हैं:

कोने की स्थिति वास्तव में सिर्फ v.pos * modelview * projection, modelview मैट्रिक्स अन्य गणना के लिए प्रक्षेपण घटक (बिना की जरूरत है हैं उदाहरण के लिए प्रकाश और धुंध)। यही कारण है कि फिक्स्ड फ़ंक्शन पाइपलाइन इन दो मैट्रिक्स को अलग करती है।

तो आपको एपीआई में निर्दिष्ट प्रतिमानों के साथ रहना चाहिए और विशेष रूप से कभी भी बुरा ओपनगल "ट्यूटोरियल" के किसी भी असंख्य पर भरोसा नहीं करना चाहिए।

+0

वर्टेक्स को बदलने के दौरान संचालन का क्रम आम तौर पर अन्य तरीके से होता है: 'प्रक्षेपण * मॉडलव्यू * v.pos' अगर आप इसे इस तरह करते हैं, तो किसी को सभी मैट्रिक्स और वैक्टरों को स्थानांतरित करना होता है। – datenwolf

2

मुझे यकीन नहीं है कि मैं सवाल समझता हूं। क्या आप पूछ रहे हैं कि पृष्ठ आपको ऐसा कुछ नहीं करने के लिए कहता है जो केवल "सबसे अधिक" काम करता है?

यह वास्तव में समझना मुश्किल नहीं है। परिभाषा के अनुसार, "इस तरह के अधिकांश उपयोग" का अर्थ है कि कुछ ऐसे उपयोग प्रदर्शन समस्याएं हैं।

तो आप या तो ऐसा काम कर सकते हैं जो कभी-कभी काम करेगा और फिर दूसरी बार तोड़ देगा, या आप यह काम कर सकते हैं जो हमेशा काम करेगा।

यह एक कठिन विकल्प नहीं है। यहां तक ​​कि मोरेसो इसे सही तरीके से करने का मतलब है कि सचमुच कोड की एक पंक्ति को दो पंक्तियों से नीचे ले जाना है।

1

मेरे प्रश्न तब हैं: वास्तविक जीवन परियोजनाओं में gluLookAt() का उपयोग करने का सबसे अच्छा तरीका क्या है? क्या यह वास्तव में GL_PROJECTION मैट्रिक्स पर इसका उपयोग करने के लिए बहुत अधिक नहीं है?

दृश्य बिंदु को स्थिति देने के लिए हमेशा मॉडलव्यू मैट्रिक्स का उपयोग करें। यह मैट्रिक्स 'नाम मॉडल (यानी ज्यामिति की नियुक्ति) और देखें (दृष्टिकोण का स्थान) देखें।

प्रक्षेपण मैट्रिक्स ओपनजीएल "कैमरा" के लेंस की तरह है। आप कैमरे के शरीर को देखने के लिए जगह में रखते हुए अपने कैमरे के लेंस नहीं ले जाते हैं, है ना? लेंस को स्थानांतरित करना इसके अनुप्रयोग हैं, जैसे झुकाव/शिफ्ट प्रभाव लागू करना।

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

  • कोई संबंधित समस्या नहीं^_^