2009-04-06 10 views
5

Poniższy fragment rysuje szary kwadrat.Jak ustawić krycie wierzchołka w 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(); 

W mojej aplikacji za tym pojedynczym kwadratem znajduje się kolorowa kostka.

Jaką funkcję powinienem zastosować, aby kwadrat (i tylko ten kwadrat) był nieprzezroczysty?

+0

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

Odpowiedz

9

W funkcji init, należy te dwie linie:

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

iw swojej funkcji renderowania, upewnić się, że glColor4f jest użyte zamiast glColor3f i ustawić czwarty argument na wymagany poziom krycia.

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);
(w twoim przypadku może clColor4b)
upewnij się również, że mieszanie jest włączone.
(trzeba zresetować kolor non-alfa afterwads, co może wiązać się z glGet * uratować starą vertexcolor)

2

Korzystając glColor4 zamiast glColor3. Na przykład:

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

Dzięki. Hmm, wygląda na to, że nie działa dla mnie, co mogłem robić źle? –

2

Można ustawić kolory na wierzchołku

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