GL Blending
← GL Over-Operator | ● | Tiefenordnung →
Blending: Vermischung von Fragmentfarbe mit Framebuffer → Per-Fragment Operation
- 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
Auswahl von Operator $\times_{Blend}$ aus:
GL_FUNC_ADD (standard)
GL_FUNC_SUB
GL_MIN_EXT
GL_MAX_EXT
mit
Over-Operator mit Blending:
$RGB_{frame}' = A_{fragment}RGB_{fragment} + (1-A_{fragment})RGB_{frame}$
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})$
glBlendFunc(GL_ONE,GL_ONE);
glBlendEquation(GL_MAX_EXT);
Zur Veranschaulichung befindet sich hier ein vereinfachtes interaktives Beispiel in WebGL (mit eingeschränktem Funktionsumfang im Vergleich zu OpenGL für Desktops): https://mrdoob.github.io/webgl-blendfunctions/blendfunc.html
← GL Over-Operator | ● | Tiefenordnung →