2009-04-06 6 views
5

L'extrait suivant dessine un carré gris.Comment définir l'opacité d'un sommet dans OpenGL?

glColor3b(50, 50, 50); 

glBegin(GL_QUADS); 
glVertex3f(-1.0, +1.0, 0.0); // top left 
glVertex3f(-1.0, -1.0, 0.0); // bottom left 
glVertex3f(+1.0, -1.0, 0.0); // bottom right 
glVertex3f(+1.0, +1.0, 0.0); // top right 
glEnd(); 

Dans mon application, derrière ce carré unique existe un cube coloré.

Quelle fonction dois-je utiliser pour rendre carré (et seulement ce carré) opaque?

+0

http://stackoverflow.com/questions/1617370/opengl-alpha-transparency –

Répondre

9

Dans la fonction init, utilisez ces deux lignes:

glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

Et dans votre rendu fonction, assurez-vous que glColor4f est utilisé au lieu de glColor3f, et définissez le 4ème argument au niveau d'opacité requis.

glColor4f(1.0, 1.0, 1.0, 0.5); 

glBegin(GL_QUADS); 
glVertex3f(-1.0, +1.0, 0.0); // top left 
glVertex3f(-1.0, -1.0, 0.0); // bottom left 
glVertex3f(+1.0, -1.0, 0.0); // bottom right 
glVertex3f(+1.0, +1.0, 0.0); // top right 
glEnd(); 
2

glColor4f (flotteur, flotteur, flotteur b, flaot alpha);
(dans votre cas peut-être clColor4b)
assurez-vous également, que la fusion est activée.
(vous devez réinitialiser la couleur à Afterwads non-alpha, ce qui pourrait impliquer un glGet * pour sauver l'ancien vertexcolor)

2

Utilisation glColor4 au lieu de glColor3. Par exemple:

glBlendFunc(GL_SRC_ALPHA,GL_ONE); 
glColor4f(1.0f,1.0f,1.0f,0.5f); 
+0

connexes Merci. Hmm, ne semble pas travailler pour moi, que pourrais-je faire mal? –

2

Vous pouvez définir les couleurs par sommet

glBegin(GL_QUADS); 
glColor4f(1.0, 0.0, 0.0, 0.5); // red, 50% alpha 
glVertex3f(-1.0, +1.0, 0.0); // top left 
// Make sure to set the color back since the color state persists 
glVertex3f(-1.0, -1.0, 0.0); // bottom left 
glVertex3f(+1.0, -1.0, 0.0); // bottom right 
glVertex3f(+1.0, +1.0, 0.0); // top right 
glEnd();