Wie kann ich die Opazität eines Scheitels in OpenGL eingestellt?
-
05-09-2019 - |
Frage
Der folgende Ausschnitt zeichnet ein graues Quadrat.
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();
In meiner Anwendung, hinter diesem einzigen Platz existiert einen farbigen Würfel.
Welche Funktion soll ich Platz machen (und nur diesen Platz) undurchsichtig?
Lösung
In der init-Funktion, verwenden Sie diese beiden Zeilen:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Und in der Render-Funktion sicher, dass glColor4f
statt glColor3f
verwendet wird, und stellen Sie das vierte Argument auf die Ebene der Opazität erforderlich.
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();
Andere Tipps
glColor4f (float r, g float, float b, flaot alpha);
(In Ihrem Fall vielleicht clColor4b)
auch dafür sorgen wird, dass Blending aktiviert.
(Sie haben die Farbe nicht-alpha afterwads zurückgesetzt werden, die eine glGet * beinhalten könnte die alte VERTEX speichern)
Verwenden glColor4
statt glColor3
. Zum Beispiel:
glBlendFunc(GL_SRC_ALPHA,GL_ONE);
glColor4f(1.0f,1.0f,1.0f,0.5f);
Sie können Farben pro Vertex gesetzt
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();