2010-04-16 15 views
8

prostu zastanawiasz się, czy ktoś może mi pomóc wyśledzić mój problem z następującego kodu, gdzie kolor tekstu nie jest ustawiony prawidłowo (jest tylko rendering niezależnie od koloru jest w tle)Ustawianie koloru glutBitmapCharacter?

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); 
} 

Sprawdziłem wszystko zwykłe rzeczy (jak sądzę), wyłączanie teksturowania, ustawianie koloru przed rastrowaniem itp. Ive wyłączone shadery, ale nadal mam problemy

+0

proszę umieścić obraz tego, co można zaobserwować. – Bahbar

+0

Kiedy powiedz, że tak "renderowanie dowolnego koloru w tle", czy masz na myśli zestaw kolorów za pomocą 'glClearColor' lub coś innego? – bcat

Odpowiedz

0

Kolor jest zwykle kontrolowany za pomocą funkcji glColor3f, więc jeśli tekst jest biały i nie powinien być następnie pomóc powinna następująca zmiana:

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); 

Również wywoływanie glDisable (GL_TEXTURE_2D) i glEnable (GL_TEXTURE_2D) jest niepotrzebne. Zamiast tego możesz po prostu wywołać glBindTexture (GL_TEXTURE_2D, 0), aby wyłączyć tekstury, a następnie użyć tej samej funkcji do ustawienia aktywnej tekstury. Po prostu upewnij się, że wywołasz funkcję glEnable (GL_TEXTURE_2D) w funkcji inicjalizacji.

3

Brak koloru jest przechowywana w jakiejkolwiek bitmapy OpenGL (czego glutBitmapCharacter utworzony. Bitmapa jest monochromatyczny i przechowuje tylko kształt.

Gdy bitmapa jest zasysane (np glBitmap lub może glDrawLists), obecny kolor raster jest stosowane. kolor raster nie zawsze jest taki sam jak kolor aktywnego patrz http://www.opengl.org/wiki/Coloring_a_bitmap.

9

Wygląda jakbyś zapomniał glDisable(GL_LIGHTING) przed wyciągnięciem swój ciąg.

+1

ten komentarz naprawdę był ratunkiem życia, nie był w stanie dowiedzieć się, dlaczego mój tekst ciągle pojawia się na czarno. Czy możesz wyjaśnić, dlaczego musimy wyłączyć oświetlenie przed zapisaniem na ekranie? – geekoraul

+1

Oświetlenie w OpenGL określa tylko, w jaki sposób są obliczane kolory w określonym punkcie sceny. Jeśli nie korzystasz z oświetlenia, cały ten OpenGL musi obliczyć kolor punktu to polecenie GLColor (i może jakaś interpolacja cieniowania, ale kolor pochodzi z glColor). Jeśli zaświecisz, to jest kilka okoliczności, które wpływają na kolor punktu: położenie i kolor źródła światła, materiał punktu, materialny kolor punktu i tekstura. więc wyłącz to, by powiedzieć openGL, aby narysować następną rzecz z twoim kolorem, nic więcej. –

+0

Można również poprawnie określić wszystkie argumenty świetlne przed rysowaniem znaków, aby były one oświetlone przez źródło światła. byłby jednak znacznie obszerniejszy. –

Powiązane problemy