2010-10-24 17 views
5

क्यों यह काला रंग खींचता है?glColor3i केवल काले रंग

glPushMatrix(); 
// Check the current color 
glColor3i(255, 0, 255); 
GLint currentColor[4]; 
glGetIntegerv(GL_CURRENT_COLOR, currentColor); 
//currentColor[0] = 254, 1 = 0, 2 = 254, 3 = doesn't matter 

glBegin(GL_QUADS); 
glLineWidth(1); 
    glVertex2f(0, 0); 
    glVertex2f(WINDOW_WIDTH * .1, 0); 
    glVertex2f(WINDOW_WIDTH * .1, WINDOW_HEIGHT); 
    glVertex2f(0, WINDOW_HEIGHT); 
glEnd(); 
glPopMatrix(); 
+0

इसके अलावा, निम्नलिखित के साथ और बिना प्रयास किया: \t glDisable (GL_BLEND); glDisable (GL_DITHER); \t glDisable (GL_FOG); glDisable (GL_LIGHTING); \t glDisable (GL_TEXTURE_1D); glDisable (GL_TEXTURE_2D); \t glDisable (GL_TEXTURE_3D); glShadeModel (GL_FLAT); –

उत्तर

12

स्मृति से, मुझे लगता है कि glColor3i रंग पूर्ण मानों का उपयोग करता है जो पूर्ण पूर्णांक सीमा को कवर करने के लिए स्केल किए जाते हैं। इसलिए आपके 255 मान लगभग शून्य के बराबर हैं .....

इसके बजाय 2147483647 आज़माएं।

+0

आप सही हैं, और मेरी ओपनजीएल पुस्तक गलत है –

+9

हाँ, यदि आप 0-255 रेंज का उपयोग करना चाहते हैं, तो glColor3ub (255, 0, 255) का उपयोग करें; –

3

सभी टाइप किए गए अभिन्न ग्लो एंट्री पॉइंट्स में यह रेंज व्यवहार है। फ़्लोटिंग पॉइंट वेरिएंट सामान्यीकृत मानों का उपयोग करते हैं: 0.0 - 1.0। glColor वर्तमान वर्टेक्स रंग सेट करता है जो ग्लैक्लर पॉइंटर सक्षम नहीं होने पर वर्टेक्स सरणी प्रसंस्करण के दौरान आउटपुट को भी प्रभावित करता है (यदि वास्तव में जीएल का आपका संस्करण वर्टेक्स विशेषताओं का नाम देता है और ओपनगलएस 2.x और अधिक में जेनेरिक नहीं है)।

ग्लोकोलर के लिए सामान्य रूप glcolor {3,4} {u, b} और glcolor {3,4} f हैं।

अपने मामले में आपको अपने 0xFF मानों से चिपकना चाहिए और glColor3ub (255, 0, 255) या शायद आसान glColor3f (1.0f, 0.0f, 1.0f) का उपयोग करना चाहिए।

glT_olX3i() के संयोजन के साथ INT_MAX या ~ 2 बिलियन के अभिन्न मूल्य का उपयोग करके बहुत अच्छी तरह से पढ़ा नहीं जाता है।

+0

यह भी एक अच्छा समाधान है –

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