2009-10-24 5 views
24

Hier ist mein Code:Wie Alpha Transparenz in OpenGL verwenden?

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

Das Problem ist, dass diese zwei Punkte identisch erscheinen (auch wenn ich die Alpha auf 0 gesetzt). Gibt es etwas, das ich übersehen habe, um Alpha-Transparenz zu aktivieren?

Antwort

18

Nur eine Vermutung, aber könnte es sein, dass Sie keine Hintergrundfarbe haben? Also, wenn Sie den zweiten Scheitelpunkt, der Alpha 0.1 hat, rendern, gibt es keinen Hintergrund, um die richtige Farbe zu berechnen? Nur ein Tipp, seit Jahren habe ich OpenGL benutzt.

+5

Ja, das war es. Ich hätte hinzufügen sollen: 'glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_BLEND); glClearColor (0,0,0,0,0,0,0,0); ' aber erst nach glutCreateWindow() –

54

Haben Sie glEnable'd Alpha Blending? Und haben Sie Ihre Blend-Parameter eingerichtet? Sie können nicht einfach das Alpha einstellen, das Sie brauchen, um verschiedene andere Parameter in OpenGL einzustellen.

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

OpenGL erfordert, dass fast alles aktiviert ist. Ein guter Ort, um zu suchen. (Das Deaktivieren und Aktivieren verschiedener Operationen zu verschiedenen Zeiten kann zu den interessantesten Effekten führen.) –

+0

Danke, ich habe sie hinzugefügt, aber ich habe vergessen, die Hintergrundfarbe einzustellen –

+6

Dies ist wirklich hilfreich für einen Anfänger, Danke ~ – neevek