Processing math: 100%
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:

RGBframe=FactorSRCRGBfragment×BlendFactorDSTRGBframe

Auswahl von FactorSRC (Fragment) und FactorDST (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 ×Blend aus:

GL_FUNC_ADD (standard)
GL_FUNC_SUB
GL_MIN_EXT
GL_MAX_EXT

mit

glBlendEquation(OPERATOR);

Over-Operator mit Blending:

RGBframe=AfragmentRGBfragment+(1Afragment)RGBframe

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.

RGBframe=max(RGBfragment,RGBframe)

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: