2010-04-16 11 views
8

बस अगर कोई मेरी मदद कर सकते निम्नलिखित कोड जहां पाठ रंग ठीक से सेट नहीं किया जा रहा है के साथ अपने मुद्दे को ट्रैक (अपने बस प्रतिपादन जो कुछ भी रंग की पृष्ठभूमि में है)ग्लूट बिटमैप कैरेक्टर रंग सेट करना?

void RenderText(int x, int y, const char *string) 
{ 
int i, len; 

glUseProgram(0); 

glLoadIdentity(); 
glColor3f(1.0f, 1.0f, 1.0f); 
glTranslatef(0.0f, 0.0f, -5.0f); 
glRasterPos2i(x, y); 

glDisable(GL_TEXTURE_2D); 
for (i = 0, len = strlen(string); i < len; i++) 
{ 
    glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (int)string[i]); 
} 
glEnable(GL_TEXTURE_2D); 
} 

मैं देख लिया है सोच सभी सामान्य चीजें (मुझे लगता है), टेस्टरिंग को अक्षम करना, रास्टरपोसिंग से पहले रंग सेट करना, आदि Ive ने शेडर्स को अक्षम कर दिया लेकिन मुझे अभी भी समस्याएं हैं

+0

आप क्या निरीक्षण की एक तस्वीर पोस्ट करें। – Bahbar

+0

जब आप कहो कि यह है "पृष्ठभूमि में जो भी रंग है, उसे प्रस्तुत करना", क्या आपका मतलब 'ग्लक्लेयर रंग' के साथ रंग सेट है, या कुछ अलग है? – bcat

उत्तर

0

रंग आमतौर पर glColor3f फ़ंक्शन के साथ नियंत्रित होता है, इस प्रकार यदि टेक्स्ट सफेद है और नहीं होना चाहिए तो निम्नलिखित परिवर्तन में मदद करनी चाहिए:

glLoadIdentity(); 
glColor3f(0.5f, 0.5f, 0.5f);  //<-- this line controls the color (now text is gray) 
glTranslatef(0.0f, 0.0f, -5.0f); 
glRasterPos2i(x, y); 

इसके अलावा, glDisable (GL_TEXTURE_2D) और glEnable (GL_TEXTURE_2D) को कॉल करना अनावश्यक है। इसके बजाय आप केवल बनावट को अक्षम करने के लिए glbindTexture (GL_TEXTURE_2D, 0) को कॉल कर सकते हैं और फिर सक्रिय बनावट सेट करने के लिए उसी फ़ंक्शन का उपयोग कर सकते हैं। बस अपने प्रारंभिक समारोह में glEnable (GL_TEXTURE_2D) को कॉल करना सुनिश्चित करें।

3

कोई रंग किसी भी ओपन बिटमैप (जो क्या glutBitmapCharacter बनाई गई है साथ संग्रहीत किया जाता है। बिटमैप, मोनोक्रोम और दुकानों केवल आकार है।

जब बिटमैप तैयार की है (glBitmap जैसे या शायद glDrawLists) वर्तमान रेखापुंज रंग है इस्तेमाल किया। रेखापुंज रंग हमेशा सक्रिय रंग के समान नहीं है, http://www.opengl.org/wiki/Coloring_a_bitmap देखते हैं।

9

लग रहा है अपने स्ट्रिंग निकालने से पहले की तरह आप glDisable(GL_LIGHTING) को भूल गए हैं।

+1

यह टिप्पणी वास्तव में एक जीवन बचतकर्ता थी, यह पता लगाने में सक्षम नहीं था कि मेरा टेक्स्ट काला में क्यों दिख रहा था। क्या आप कृपया बता सकते हैं कि स्क्रीन पर लिखने से पहले हमें प्रकाश व्यवस्था क्यों बंद करनी है? – geekoraul

+1

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

+0

आप पात्रों को चित्रित करने से पहले सभी प्रकाश तर्कों को सही ढंग से निर्दिष्ट भी कर सकते थे ताकि वे प्रकाश स्रोत द्वारा प्रकाशित हो जाएं। हालांकि यह अधिक व्यापक होता। –