2011-10-18 19 views
5

मान लीजिए कि मैं किसी दिए गए फ़ाइल से आरजीबी के रूप में बाइट्स की सरणी लोड करता हूं।ओपनजीएल बनावट फिसल जाना चाहिए?

मैंने पढ़ा है कि ओपनजीएल अपने बनावट को "उलट" स्टोर करना पसंद करता है, और मैंने देखा है कि डेमो प्रोग्राम अपनी छवियों को ऊपर से फ़्लिप कर रहे हैं।

तो मेरे कार्यक्रम में, क्या मुझे भारित आरजीबी सरणी बाइट बाइट द्वारा लाइन या रेखा से लाइन को उलटना चाहिए?

उत्तर

6

ऐसा इसलिए है क्योंकि बिटमैप (.bmp) प्रारूप इसकी लाइनों को ऊपर-नीचे स्टोर करता है। मुझे यकीन नहीं है कि इसके साथ कौन आया, लेकिन यह एक फ़ाइल प्रारूप की बात है। तो अच्छा, हाँ, अगर आप अपने स्वयं के .bmp लोडर का उपयोग करते हैं तो आपको यह करना होगा। हालांकि, आप पहले से ही लिखे गए हैं जो "उल्टा-डाउन" आपके लिए छवि का उपयोग कर सकते हैं। फिर, यह केवल एक .bmp चीज है। ओपनजीएल डिफ़ॉल्ट रूप से गैर-फ़्लिप छवियों पर काम करता है।

यह एक छोटा सा चाल है: यदि आप अपने .bmp लोडर को बदलने के लिए नहीं करना चाहते हैं, तो आप ओपन बता आप के लिए अपनी छवि फ्लिप करने कर सकते हैं:

glMatrixMode(GL_TEXTURE); 
glLoadIdentity(); 
glScalef(1.0f, -1.0f, 1.0f); 
glMatrixMode(GL_MODELVIEW); 

है यही कारण है कि मैं "डिफ़ॉल्ट रूप से" के साथ था। यदि आप चाहें तो ओपनजीएल उल्टा-डाउन कर सकते हैं। हालांकि, यह केवल तभी काम करता है यदि आप केवल लोड .bmp फ़ाइलें लोड करते हैं। अन्य फ़ाइल प्रारूप अपनी लाइनों को ठीक से स्टोर करते हैं। इसलिए, मैं पहला दृष्टिकोण पसंद करता हूं - वास्तविक .bmp लोडर का उपयोग करें। आप फ़ाइलों .bmp लोड यदि, आप MUST फ्लिप छवि या तो हाथ से यह ओपन (जो सबसे .bmp लोडर करते हैं) को भेजने से पहले, या को unflipped छवि भेज:

बस स्पष्ट होना ओपनजीएल और अपने प्रतिपादन कोड से पहले उपरोक्त कोड जोड़ें।

+0

ठीक है, वास्तव में सभी फ़्लिप की गई छवियां बीएमपी थीं। लेकिन कैसे ओपनजीएल बनावट निर्देशांक लेता है? (0,0) आखिरी पंक्ति पर पहले पिक्सेल पर है, क्या मैं सही हूं, और (1,1) पहली पंक्ति पर आखिरी पिक्सेल है? क्या यह सही होने के लिए सरणी को फ़्लिप करने की आवश्यकता नहीं है? –

+0

अच्छा, यह निर्भर करता है! यदि आप कच्चे बीएमपी डेटा लेते हैं और इसे ओपनजीएल में भेजते हैं, तो हाँ, (0,0) अचानक पहली पंक्ति में पहला पिक्सेल बन जाता है। यदि आप पहली पंक्ति में अंतिम पिक्सेल बनने के लिए (0,0) चाहते हैं, तो आपको इसे OpenGL पर भेजने से पहले सरणी को फ़्लिप करना होगा। एक विकल्प ऊपर बनावट-मैट्रिक्स-स्केलिंग कोड है। –

+0

@catfish_deluxe_call_me_cd नहीं! (0,0) पहली पंक्ति में पहला पिक्सेल है। यह सिर्फ ओपनजीएल में है, छवि की रेखाएं नीचे से ऊपर तक क्रमबद्ध हैं, लेकिन मूल छवि डेटा की पहली पंक्ति के पहले पिक्सेल में अभी भी है ** ** ** ओपनजीएल को भेजें। –

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