2009-04-06 12 views
5

Il seguente snippet disegna un quadrato grigio.Come si imposta l'opacità di un vertice in 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(); 

Nella mia applicazione, dietro questo quadrato singolo esiste un cubo colorato.

Quale funzione devo utilizzare per rendere opaco (e solo questo quadrato) opaco?

+0

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

risposta

9

Nella funzione init, utilizzare queste due linee:

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

e nella vostra funzione di rendere, in modo che glColor4f è utilizzato invece di glColor3f e impostare il 4o argomento sul livello di opacità richiesto.

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);
(nel tuo caso forse clColor4b)
assicurati anche che la fusione sia abilitata.
(è necessario ripristinare il colore per afterwads non alfa, che potrebbe comportare un glGet * per salvare la vecchia vertexcolor)

2

Uso glColor4 invece di glColor3. Per esempio:

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

Grazie. Hmm, non sembra funzionare per me, cosa potrei fare di sbagliato? –

2

È possibile impostare i colori per vertice

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(); 
Problemi correlati