सबसे पहले, ओपनजीएल एकाधिक समन्वय प्रणालियों का उपयोग करता है, इसलिए ओपनजीएल समन्वय प्रणाली नहीं है "। आप जो सामान्य संदर्भित कर रहे हैं वे सामान्यीकृत डिवाइस निर्देशांक (एनडीसी) हैं, जहां सभी तीन निर्देशांक सीमा [-1, 1] में हैं। विभिन्न समन्वय प्रणालियों और उनके नामों को here सेक्शन में बताया गया है, "9 .011 निर्देशांक कैसे परिवर्तित होते हैं? विभिन्न समन्वय रिक्त स्थान क्या हैं?"। 1)
दूसरा, ओपनजीएल में भ्रम से बचने के लिए, "व्यूपोर्ट" शब्द उस विंडो के हिस्से को संदर्भित करता है जिसे आप प्रतिपादित कर रहे हैं, और यह विंडो निर्देशांक में है। आपके प्रश्न में आपने इसे अपनी दुनिया के हिस्से (एल, आर, टी, बी) = (- 500, -500, 1200, 1200) का वर्णन करने के लिए उपयोग किया है, जिसे आप प्रस्तुत करना चाहते हैं, जो विश्व निर्देशांक में है।
आपने पूछा कि कैसे "स्क्रीन पर वस्तुओं को आकर्षित करने के लिए गणना करें"। आपको क्या करना है एक रूपांतरण (एक 4x4 मैट्रिक्स) परिभाषित करना है जो एक समन्वय प्रणाली से दूसरे में मानचित्र करता है। आपकी 2 डी दुनिया विश्व निर्देशांक में दी गई है, इसलिए आपको एक मैट्रिक्स को परिभाषित करने की आवश्यकता है जो विश्व समन्वयक को एनडीसी में बदलता है, यानी प्रक्षेपण मैट्रिक्स। अपने शेडर्स में आप बस अपने प्रक्षेपण मैट्रिक्स के साथ अपने चरम गुणा करें, और आपको एनडीसी मिलते हैं। glm::ortho
/glOrtho
ऐसे प्रोजेक्शन मैट्रिक्स की गणना करता है। परिप्रेक्ष्य प्रक्षेपण के लिए, यह स्पष्ट नहीं है कि आप क्या करना चाहते हैं, लेकिन आपको perspective
और lookat
ग्लैम में फ़ंक्शंस के साथ प्रयोग करना चाहिए।
स्पष्ट होने के लिए, आप जो भी समन्वय प्रणाली चाहते हैं (जिसे विश्व समन्वय प्रणाली कहा जाता है) में शिखर परिभाषित करें, और बस इन कोष्ठकों को खींचें। आपके कशेरुक शेडर का काम आपके द्वारा परिभाषित परिवर्तन को लागू करना है।
यह भी ध्यान रखें कि आपने एक वर्ग निर्दिष्ट किया है, और आम तौर पर जो आप चाहते हैं वह नहीं है। मॉनीटर और अधिकांश खिड़कियां स्क्वायर नहीं हैं, इसलिए यदि आप उस स्क्वायर को एक सामान्य व्यूपोर्ट पर मैप करते हैं, तो आपको अपनी दुनिया का विकृत दृश्य मिल जाएगा। आपको व्यूपोर्ट के पहलू अनुपात (चौड़ाई: ऊंचाई) में कारक करने की आवश्यकता है। मैंने here को समझाने की कोशिश की है।
1) एक साइड नोट के रूप में, एफएक्यू काफी पुराना है, और ओपनजीएल के प्राचीन संस्करणों को संदर्भित करता है। आजकल, प्रोग्रामर की अपेक्षा की जाती है और मॉडल-व्यू और प्रक्षेपण मैट्रिस दोनों को प्रबंधित करने के लिए प्रोत्साहित किया जाता है, क्योंकि आपको उन्हें अपने शेडरों में चाहिए। मैं अत्यधिक glm की अनुशंसा करता हूं, यह हेडर-केवल इतना एकीकृत करने के लिए बहुत आसान है, और इसमें अच्छा वाक्यविन्यास है जो जीएलएसएल को प्रतिबिंबित करता है।
यदि आप ऑर्थोग्राफिक प्रक्षेपण मैट्रिक्स का उपयोग करते हैं, तो दृश्य केवल 2 डी हो सकता है क्योंकि यह ज़ेड अक्ष को अनदेखा करता है, सही? ज्यादातर चीजों के लिए मैं यह ठीक कर रहा हूं, लेकिन मैं 2 डी दुनिया पर कम फ्लैट दृष्टिकोण बनाने के लिए जेड अक्ष का उपयोग करके प्रयोग करने में सक्षम होना चाहता हूं। तो आप ऑर्थो के बजाए परिप्रेक्ष्य के लिए रूपांतरण मैट्रिक्स को कैसे परिभाषित करते हैं? जीएल क्या काम करता है? – bgroenks
1) नहीं, यह जेड अक्ष को अनदेखा नहीं करता है, यह सिर्फ उसी पिक्सेल पर एक ही एक्सई समन्वय के साथ सब कुछ प्रोजेक्ट करता है। लेकिन आप अभी भी गहराई से परीक्षण कर सकते हैं। 2) 'glm :: परिप्रेक्ष्य'। –
आप glm :: परिप्रेक्ष्य का उपयोग कैसे करते हैं? यह 'gl_ModelViewProjectionMatrix' के साथ कैसे सहभागिता करता है? – bgroenks