2011-02-25 14 views
7

मैं एक ओपनजीएल बनावट में बिटमैप लोड करने की कोशिश कर रहा हूं और इसे स्क्रीन पर प्रदर्शित करता हूं, लेकिन जब मैं ऐसा करता हूं, लाल और नीले मान स्विच करने लगते हैं (उदाहरण: नीली छवि नारंगी, हरा दिखाई देती है छवियां अपरिवर्तित बनी हुई हैं, आदि ..)। बिटमैप्स लोड करते समय यह समस्या केवल तभी मौजूद होती है, मैं अपेक्षाकृत त्रुटि मुक्त .pngs लोड कर सकता हूं।ओपनजीएल बनावट में बीएमपी लोड करना लाल और नीले रंग के रंगों को स्विच करता है। (सी ++/विंडोज)

यह वह कोड है जिसका उपयोग मैं बिटमैप्स लोड करने और बनावट सेट करने के लिए कर रहा हूं। मैं DevIl का उपयोग कर रहा हूं, लेकिन मुझे यकीन नहीं है कि यह कितना प्रासंगिक है, क्योंकि जब मैं एक अलग सिस्टम का उपयोग करता था तो समस्या मौजूद थी (मुझे याद नहीं है कि यह विंडो एच में एक फंक्शन था, मुझे विश्वास है):

ilOriginFunc(IL_ORIGIN_LOWER_LEFT); 
ilEnable(IL_ORIGIN_SET); 
ILuint image; 
ilGenImages(1, &image); 
ilBindImage(image); 
ilLoad(IL_BMP, "Data/NeHe.bmp"); // Incidentally, loading a png, although it fixes the problem, 
           // rotates the image 180 degrees. Not sure if that's important or not, 
           // But it's why I added the first line of code 

glGenTextures(3, &_texture[0]); 
glBindTexture(GL_TEXTURE_2D, _texture[0]); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexImage2D(GL_TEXTURE_2D, 0, 3, ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT), \ 
    0, GL_RGB, GL_UNSIGNED_BYTE, ilGetData()); 

ilInit() और glEnable(GL_TEXTURE_2D) दोनों को कम प्रासंगिक कार्यों के बीच प्रोग्राम में पहले कहा जाता है। समस्या (और उम्मीदपूर्वक फिक्सिंग) के कारण को खोजने में कोई भी मदद की सराहना की जाएगी।

उत्तर

10

आपको अपना आरजीबी और बीजीआर पीछे की तरफ मिल गया है।

glTexImage2D(GL_TEXTURE_2D, 0, 3, ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT), \ 
    0, GL_RGB, GL_UNSIGNED_BYTE, ilGetData()); 

वहाँ एक GL_BGR आप GL_RGB की, दूसरी लाइन पर निर्दिष्ट कर सकते हैं बजाय है? इसे ठीक करना चाहिए।

एक पीएनजी छवि को फ्लिप करने का कारण बनता है क्योंकि बीएमपी कैसे संग्रहीत किया जाता है: बीएमपी नीचे संग्रहित होते हैं, फ़ाइल में पहले पिक्सेल छवि की निचली पंक्ति होती हैं।

+0

धन्यवाद। मैंने GL_BGR की कोशिश की, लेकिन मुझे एक त्रुटि मिली है कि यह अस्तित्व में नहीं है। मैं यह भी नहीं देखता कि बिगमैप को बीजीआर डेटा के साथ पहली जगह क्यों संग्रहीत किया जाएगा, है ना? –

+1

@ केंड 64: बीएमपी फाइलें, या सटीक होने के लिए वास्तव में बीजीआर ऑर्डर में संग्रहीत हैं। असल में आधुनिक प्रणालियों पर भी फ्रैम्फफर बिटप्लेन्स बीजीआर (ए) ऑर्डर में हैं, इसलिए बीजीआर प्रारूप में बनावट की आपूर्ति आमतौर पर आरजीबी प्रारूप से तेज होती है। GL_BGR ओपनजीएल संस्करणों> 1.1 से एक टोकन है, हालांकि विंडोज प्लेटफ़ॉर्म एसडीके केवल ओपनजीएल-1.1 के लिए हेडर के साथ जहाजों के बाहर है - कुछ भी एक्सटेंशन के माध्यम से एक्सेस किया जाना चाहिए। बस GLEW http://glew.sourceforge.net या GLee प्राप्त करें, उन लोगों से हेडर का उपयोग किया जाता है जो इसके साथ किए जाते हैं। – datenwolf

+1

आप "#शामिल करें" को भी आजमा सकते हैं, लेकिन संभवतः मेरे मामले में http://www.opengl.org/registry/api/glext.h – Alink

1

मुझे थोड़ी देर पहले एक ही समस्या थी। GL_RBGglTexImage2DGL_BGR पर सेट करने का प्रयास करें।

0

आपके पास आमतौर पर glTexImage2D पर कॉल होगा जो पिक्सल के बाहरी प्रारूप को निर्दिष्ट करता है। चीजों की आवाज़ से, आपको इसे जांचना होगा और GL_RGB से GL_BGR तक स्विच करना होगा।

2

आप GL_RGB से GL_BGR_EXT पर स्विच कर सकते हैं। कुछ मामलों में GL_BGR पहचाना नहीं गया है।

+2

से glext.h का हालिया संस्करण प्राप्त करने की आवश्यकता है। –

0

मुझे पता है कि यह एक पुराना विषय है, लेकिन मुझे लगता है कि जेसी और एक्स को वीसी 4 में फ़्लिप करना सबसे आसान तरीका है कि texture2D खंड shader में लौटाता है, gltexture2d नहीं। यह उन एक्सटेंशन पर भरोसा नहीं करता है जो मौजूद नहीं हो सकते हैं। इसे एक जीएलएस 2 प्रोजेक्ट पर हल किया गया है जिस पर मैं काम कर रहा हूं।

   "varying vec2 v_texCoord;       " 
       "uniform sampler2d s_texture;      " 
       "vec4 v_bgr;          " 
       "void main()          " 
       "{            " 
       " v_bgr = texture2D(s_texture, v_texCoord); " 
       " gl_FragColor = v_bgr.zyxw;      " 
       "}            "; 
संबंधित मुद्दे