2009-04-06 9 views
5

El siguiente fragmento dibuja un cuadrado gris.¿Cómo configuro la opacidad de un vértice en 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(); 

En mi aplicación, detrás de este único cuadrado existe un cubo de color.

¿Qué función debo usar para hacer el cuadrado (y solo este cuadrado) opaco?

+0

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

Respuesta

9

En la función init, utilizar estas dos líneas:

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

Y en su función de render, asegurar que glColor4f es utilizado en lugar de glColor3f, y establezca el 4º argumento al nivel de opacidad requerido.

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 (float r, float g, float b, flaot alpha);
(en su caso, tal vez clColor4b)
también asegúrese de que la fusión esté habilitada.
(hay que restablecer el color a afterwads no alfa, lo que podría implicar una glGet * para salvar el antiguo vertexcolor)

2

Uso glColor4 en lugar de glColor3. Por ejemplo:

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

Gracias. Hmm, parece que no funciona para mí, ¿qué podría estar haciendo mal? –

2

Es posible ajustar los colores por vértice

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(); 
Cuestiones relacionadas