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?

War es hilfreich?

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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top