2010-04-16 12 views
8

Je me demandais si quelqu'un peut me aider à traquer mon problème avec le code suivant où la couleur du texte n'est pas réglé correctement (son juste rendu quelle que soit la couleur est en arrière-plan)Définition de la couleur 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); 
} 

J'ai vérifié tous les choses habituelles (je pense), désactivation de texturing, réglage de la couleur avant rasterPos, etc Ive handicapés shaders mais j'ai encore des problèmes

+0

S'il vous plaît publier une photo de ce que vous observez. – Bahbar

+0

Lorsque vous dire que c'est "Rendre n'importe quelle couleur est en arrière-plan", voulez-vous dire le jeu de couleurs avec 'glClearColor', ou quelque chose de différent? – bcat

Répondre

0

La couleur est généralement contrôlée par la fonction glColor3f, donc si le texte est blanc et ne devrait pas être puis la modification suivante devrait aider:

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

En outre, appeler glDisable (GL_TEXTURE_2D) et glEnable (GL_TEXTURE_2D) est inutile. Au lieu de cela, vous pouvez simplement appeler glBindTexture (GL_TEXTURE_2D, 0) pour désactiver les textures, puis utiliser la même fonction pour définir la texture active. Assurez-vous d'appeler glEnable (GL_TEXTURE_2D) dans votre fonction d'initialisation.

3

Aucune couleur est stockée avec un bitmap OpenGL (qui est ce que glutBitmapCharacter créé. Le bitmap est monochrome et stocke seulement la forme.

Lorsque le bitmap est dessiné (par exemple glBitmap ou peut-être glDrawLists), la couleur de trame en cours est utilisé. la couleur de trame n'est pas toujours la même que la couleur active, voir http://www.opengl.org/wiki/Coloring_a_bitmap.

9

on dirait que vous avez oublié de glDisable(GL_LIGHTING) avant de tirer votre chaîne.

+1

ce commentaire était vraiment un épargnant de vie, n'a pas pu comprendre pourquoi mon texte a continué à apparaître en noir. Pouvez-vous expliquer pourquoi nous devons éteindre l'éclairage avant d'écrire à l'écran? – geekoraul

+1

L'éclairage dans OpenGL spécifie uniquement comment les couleurs à un point spécifique de la scène sont calculées. Si vous n'utilisez pas l'éclairage, tout ce que OpenGL doit calculer la couleur d'un point est votre commande GLColor (et peut-être une interpolation d'ombrage, mais la couleur vient de glColor). si vous tournez glLighting sur, il y a plusieurs circonstances qui influencent la couleur d'un point: la position et la couleur de la source lumineuse, le matériau du point, la couleur du matériau du point, et la texture. alors éteignez-le pour dire à openGL de dessiner la prochaine chose avec votre glColor, rien de plus. –

+0

Vous auriez également pu spécifier correctement tous les arguments d'éclairage avant de dessiner les caractères afin qu'ils aient été éclairés par une source lumineuse. cela aurait été beaucoup plus vaste cependant. –