2009-10-24 14 views
24

Aquí está mi código:¿Cómo usar la transparencia alfa en OpenGL?

void display(void); 

int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
    glEnable(GL_BLEND); 
    glutInitWindowSize(600,600); 
    glutInitWindowPosition(200,50); 
    glutCreateWindow("glut test"); 
    glutDisplayFunc(display); 
    glutMainLoop(); 
    return 0; 
} 

void display() 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 
    glPointSize(8); 
    glBegin(GL_POINTS); 
    glColor4f(.23,.78,.32,1.0); 
    glVertex2f(0,0); 
    glColor4f(.23,.78,.32,0.1); 
    glVertex2f(0.1,0); 
    glEnd(); 
    glFlush(); 
} 

El problema es que estos dos puntos parecen ser idénticas (incluso cuando me puse el alfa a 0). ¿Hay algo que me perdí para habilitar la transparencia alfa?

Respuesta

18

Solo supongo, pero ¿podría ser que no tenga un color de fondo? Entonces, cuando renderiza el segundo vértice que tiene alfa 0.1, ¿no hay fondo para calcular el color correcto? Solo una conjetura, han pasado años desde que usé OpenGL.

+5

Sí, esto fue todo. Debería haber agregado: 'glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_BLEND); glClearColor (0.0,0.0,0.0,0.0); ' pero solo después de glutCreateWindow() –

54

has glEnable'd alpha blending? ¿Y has configurado tus parámetros de mezcla? No puede simplemente configurar el alfa que necesita para configurar varios otros parámetros en OpenGL.

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

OpenGL requiere que todo esté habilitado. Un buen lugar para comenzar a buscar. (Desactivar y habilitar diferentes operaciones en diferentes momentos puede conducir a los efectos más interesantes). –

+0

Gracias, los agregué, pero olvidé establecer el color de fondo –

+6

Esto es realmente útil para un principiante, gracias ~ – neevek

Cuestiones relacionadas