स्क्रीन के ऊपरी बाएं हिस्से में OpenGL मूल को बदलते समय मुझे क्या चिंता करनी चाहिए?


11

स्वयं की शिक्षा के लिए, मैं एसडीएल / ओपनगैल का उपयोग करके सी ++ में 2 डी प्लेटफ़ॉर्मर इंजन लिख रहा हूं। मैंने शुरुआत में sdltutorials.com और lazyfoo.net पर ट्यूटोरियल का उपयोग करके शुद्ध SDL के साथ शुरू किया था, लेकिन अब मैं एक OpenGL रेंडरिंग संदर्भ बनाने के लिए SDL का उपयोग कर रहा हूं और फिर OpenGL फ़ंक्शंस (विशेष रूप से तत्काल मोड पर) के साथ प्रस्तुत कर रहा हूं, लेकिन मैं VAOs / बारबो के बारे में सीख रहा हूं )। मैं केवल इंटरफ़ेस, ऑडियो आदि के लिए एसडीएल का उपयोग कर रहा हूं।

एसडीएल स्क्रीन के ऊपरी बाएं हिस्से में उत्पत्ति के साथ एक समन्वय प्रणाली का उपयोग करता है और सकारात्मक वाई-अक्ष को इंगित करता है। इसे खोलने के लिए OpenGL में मेरे ऑर्थोग्राफ़िक प्रोजेक्शन को सेट करना आसान है।

मुझे पता है कि बनावट निर्देशांक 0 से 1 तक मानों के साथ एक दाहिने हाथ की प्रणाली है - प्रतिपादन से पहले बनावट को लंबवत रूप से फ़्लिप करना (अच्छी तरह से, फ़ाइल को लोड करने से पहले फ्लिप करें) बनावट प्रस्तुत करता है जो सही ढंग से प्रस्तुत करता है ... जो कि ठीक है अगर मैं ड्राइंग कर रहा हूं संपूर्ण बनावट, लेकिन अंततः मैं टाइल्स का उपयोग करूंगा और समस्याओं की कल्पना कर सकता हूं।

जब मैं ऐसा करता हूं तो मुझे रेंडरिंग के संदर्भ में क्या चिंतित होना चाहिए?

अगर किसी के पास कोई सलाह है या उन्होंने खुद ऐसा किया है और भविष्य में होने वाले नुकसान को इंगित कर सकते हैं, तो यह बहुत अच्छा होगा, लेकिन वास्तव में किसी भी विचार की सराहना की जाएगी।


1
क्या आप SDL का उपयोग रेंडर करने के लिए (SDL के ब्लटिंग फ़ंक्शन के रूप में) कर रहे हैं, या आप OpenL रेंडरिंग संदर्भ बनाने के लिए SDL का उपयोग कर रहे हैं, तो रेंडर करने के लिए OpenGL फ़ंक्शंस का उपयोग कर रहे हैं?
निकोल बोलस

1
मैं एक OpenGL रेंडरिंग संदर्भ बनाने के लिए SDL का उपयोग कर रहा हूं और रेंडर करने के लिए OpenGL फ़ंक्शन का उपयोग कर रहा हूं। मैं इस प्रश्न में स्पष्ट करूँगा।
व्युत्पन्न

1
हो सकता है कि यदि आप एक भौतिकी प्रणाली का उपयोग करने जा रहे हों, तो बेहतर देखें कि वह किस समन्वय प्रणाली का उपयोग करता है (righ सौंप या बाएं हाथ, Y-UP या Y-DOWN) और उसी का उपयोग करते रहें। बेशक आप गुरुत्वाकर्षण को निष्क्रिय करने जैसे काम कर सकते हैं, लेकिन मैं इसका उपयोग करने की कोशिश करूंगा ताकि जांघों को आसान बनाया जा सके।
गुस्तावो मैकिएल

जवाबों:


8

"जब मैं ऐसा करता हूं तो मुझे रेंडरिंग के संदर्भ में क्या चिंतित होना चाहिए?" - बहुत ज्यादा नहीं। एक कोऑर्डिनेट सिस्टम सिर्फ एक कन्वेंशन है, हार्ड-एंड-फास्ट नियम नहीं है, और यह पूरी तरह से कानूनी और वैध काम है। बस यह सुनिश्चित करें कि आप अपने स्वयं के उपयोग में सुसंगत हैं और सब कुछ ठीक चलेगा।


महान! मेरे पास एक हंक सेल्फ कंसिस्टेंसी थी जिसकी मुझे चिंता करने की जरूरत थी, लेकिन यह मेरे लिए नया क्षेत्र है।
व्युत्पन्न

1
मुझे कहना चाहिए कि प्रिय पुराने क्वेक ने 1996 में वापस किया और यह ठीक काम किया।
मैक्सिमस मिनिमस

5

ओपनजीएल के साथ 2 डी में काम करते समय, मैं अक्सर शीर्ष-बाएं कोने का उपयोग मूल के रूप में करता हूं। इसके साथ किया जा सकता है:

glOrtho(0,      // left
        width,  // right
        height, // bottom
        0,      // top
        0,      // zNear
        1       // zFar
        );

हालांकि, ऊपरी-बाएँ मूल को बदलते समय कुछ नुकसान होते हैं।

एक ख़तरा मैंने एक से अधिक बार चलाया है: glScissor()जिसका उपयोग क्लिपिंग के लिए किया जाता है, हमेशा निचले-बाएँ निर्देशांक का उपयोग करता है।

इसके हस्ताक्षर हैं:

void glScissor( GLint x, GLint y, GLsizei width, GLsizei height )

जहां x, yनिर्दिष्ट निचले बाएँ कैंची बॉक्स के कोने।

आम तौर पर, विंडो में काम करने वाले कोई भी कार्य सभी मूल के रूप में निचले बाएं हिस्से का उपयोग करते हैं। इस तरह कार्य शामिल हैं gluProject, gluUnProject, glCopyPixels, आदि

लेकिन कुछ फ़ंक्शंस जैसे स्थिति के लिए glDrawPixelsउपयोग glRasterPos, और ऑब्जेक्टglRasterPos का उपयोग करता है (यानी रूपांतरित) निर्देशांक

यदि आप लिनक्स पर चल रहे हैं, और पता है कि कैसे उपयोग करना है man, तो आप यहाँ OpenGL manpages की एक प्रति ले जाना चाहते हैं: ftp://ftp.sgi.com/sgi/opengl/doc/ मैं उन्हें एक वास्तविक समय मिल सकता है- सेवर।

इसके अलावा, मुझे लगता है कि आप कहते हैं "लोड करने से पहले फ़ाइल फ्लिप करें"। यह आवश्यक नहीं है। इसे लोड करते समय छवि को फ़्लिप करने के बजाय, केवल बनावट को फ्लिप करें निर्देश देते समय 1.0 से 0.0 तक जाने के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.