Computergrafik

GL Blending

GL Over-Operator | | Tiefenordnung

Blending: Vermischung von Fragmentfarbe mit Framebuffer

Per-Fragment Operation, aber als letzte Stufe der Pipeline!

  • erste Mischfarbe ist Farbe des aktuell rasterisierten Fragments
  • zweite Mischfarbe ist Farbe des korrespondierenden Pixels im Framebuffer
  • Interpolationsgewicht ist üblicherweise der Alpha Kanal des Fragments

Allgemeiner OpenGL Blending-Operator:

$RGB_{frame}' = Factor_{SRC}RGB_{fragment} \quad \times_{Blend} \quad Factor_{DST}RGB_{frame}$

Auswahl von $Factor_{SRC}$ (Fragment) und $Factor_{DST}$ (Framebuffer) aus:

GL_ONE
GL_ZERO
GL_SRC_ALPHA
GL_DST_ALPHA
GL_ONE_MINUS_SRC_ALPHA
GL_ONE_MINUS_DST_ALPHA

mit

glBlendFunc(FACTOR_SRC,FACTOR_DST);

Auswahl von Operator $\times_{Blend}$ aus:

GL_FUNC_ADD (standard)
GL_FUNC_SUB
GL_MIN_EXT
GL_MAX_EXT

mit

glBlendEquation(OPERATOR);

Over-Operator mit Blending:

$RGB_{frame}' = A_{fragment}RGB_{fragment} + (1-A_{fragment})RGB_{frame}$

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glBlendEquation(GL_FUNC_ADD); // Nicht notwendig, da Standardeinstellung

Maximum Operator mit Blending:

Berechnet das kanalweise Maximum von Fragment- und Framebuffer-Farbe.

$RGB_{frame}' = max(RGB_{fragment},RGB_{frame})$

glEnable(GL_BLEND);
glBlendFunc(GL_ONE,GL_ONE);
glBlendEquation(GL_MAX_EXT);

Zur Veranschaulichung hier ein vereinfachtes interaktives Beispiel in WebGL:
https://mrdoob.github.io/webgl-blendfunctions/blendfunc.html

Die Blend-Stufe ist konfigurier- aber nicht programmierbar!

GL Over-Operator | | Tiefenordnung

Options: