Freigeben über


glBlendFunc-Funktion

Die glBlendFunc-Funktion gibt die Pixelarithmetik an.

Syntax

void WINAPI glBlendFunc(
   GLenum sfactor,
   GLenum dfactor
);

Parameter

sfactor

Gibt an, wie die Quellenmischungsfaktoren rot, grün, blau und alpha berechnet werden. Es werden neun symbolische Konstanten akzeptiert: GL_ZERO, GL_ONE, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA und GL_SRC_ALPHA_SATURATE.

dfactor

Gibt an, wie die Zielmischungsfaktoren rot, grün, blau und alpha berechnet werden. Acht symbolische Konstanten werden akzeptiert: GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA und GL_ONE_MINUS_DST_ALPHA.

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Fehlercodes

Die folgenden Fehlercodes können von der glGetError-Funktion abgerufen werden.

Name Bedeutung
GL_INVALID_ENUM
Sfactor oder dfactor war kein akzeptierter Wert.
GL_INVALID_OPERATION
Die Funktion wurde zwischen einem Aufruf von glBegin und dem entsprechenden Aufruf von glEnd aufgerufen.

Bemerkungen

Im RGB-Modus können Pixel mit einer Funktion gezeichnet werden, die die eingehenden RGBA-Werte (Quelle) mit den RGBA-Werten mischt, die sich bereits im Framebuffer (die Zielwerte) befinden. Standardmäßig ist das Mischen deaktiviert. Verwenden Sie glEnable und glDisable mit dem Argument GL_BLEND, um die Überblendung zu aktivieren und zu deaktivieren.

Wenn diese Option aktiviert ist, definiert glBlendFunc den Vorgang der Vermischung. Der sfactor-Parameter gibt an, welche der neun Methoden zum Skalieren der Quellfarbkomponenten verwendet wird. Der dfactor-Parameter gibt an, welche von acht Methoden zum Skalieren der Zielfarbkomponenten verwendet wird. Die elf möglichen Methoden werden in der folgenden Tabelle beschrieben. Jede Methode definiert vier Skalierungsfaktoren für Rot, Grün, Blau und Alpha.

In der Tabelle und in nachfolgenden Formeln werden Quell- und Zielfarbkomponenten als (R? , G? , B? , A? ) und (Rd , Gd , Bd , Ad ) bezeichnet. Sie werden als ganzzahlige Werte zwischen null und (kR , kG , kR , kA ) verstanden, wobei

kR = 2mR - 1

kG = 2mG - 1

kB = 2mB - 1

kA = 2mA - 1

und (mR , mG , mB , mA ) ist die Anzahl der roten, grünen, blauen und alphan Bitplanen.

Quell- und Zielskalierungsfaktoren werden als (sR , sG , sB , sA ) und (dR , dG , dB , dA ) bezeichnet. Die in der Tabelle beschriebenen Skalierungsfaktoren (fR , fG , fB , fA ) stellen entweder Quell- oder Zielfaktoren dar. Alle Skalierungsfaktoren haben einen Bereich [0,1].

Parameter (fR , fG , fB , fA )
GL_ZERO (0,0,0,0)
GL_ONE (1,1,1,1)
GL_SRC_COLOR (R? / kR , G? / kG , B? / kB , A? / kA )
GL_ONE_MINUS_SRC_COLOR (1,1,1,1) - (R? / kR , G? / kG , B? / kB , A? / kA )
GL_DST_COLOR (Rd) / kR , Gd / kG , Bd / kB , Ad / kA )
GL_ONE_MINUS_DST_COLOR (1,1,1,1) - (Rd / kR , Gd / kG , Bd / kB , Ad / kA )
GL_SRC_ALPHA (A? / kA , A? / kA , A? / kA , A? / kA )
GL_ONE_MINUS_SRC_ALPHA (1,1,1,1) - (A? / kA , A? / kA , A? / kA , A? / kA )
GL_DST_ALPHA (Ad) / kA , Ad / kA , Ad / kA , Ad / kA )
GL_ONE_MINUS_DST_ALPHA (1,1,1,1) - (Ad / kA , Ad / kA , Ad / kA , Ad / kA )
GL_SRC_ALPHA_SATURATE (i,i,i, 1)

In der Tabelle

i = min (A? , kA - Ad ) / kA A

Um die gemischten RGBA-Werte eines Pixels beim Zeichnen im RGBA-Modus zu bestimmen, verwendet das System die folgenden Formeln:

R (d) = min( kR , R? sR + RddR )

G (d) = min( kG , G? sG + DDG )

B (d) = min( kB, B? sB + Bd dB B )

A (d) = min( kA , A? sA + AddA )

Trotz der scheinbaren Genauigkeit der obigen Formeln ist die Mischungsarithmetik nicht genau angegeben, da das Mischen mit ungenauen ganzzahligen Farbwerten arbeitet. Ein Mischfaktor, der gleich 1 sein sollte, ändert seinen Multiplikationsfaktor jedoch garantiert nicht, und ein Mischfaktor gleich 0 reduziert seinen Multiplikationsfaktor auf Null. Wenn also beispielsweise Sfactor GL_SRC_ALPHA ist, ist dfactor GL_ONE_MINUS_SRC_ALPHA und A? ist gleich kA, die Formeln reduzieren sich auf einfache Ersetzung:

Rd = R?

Gd = G?

Bd = B?

Ad = A?

Beispiele

Transparenz wird am besten mit glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) implementiert, wobei Grundtypen vom weitesten zum nächsten sortiert werden. Beachten Sie, dass für diese Transparenzberechnung nicht das Vorhandensein von Alphabitplanen im Framebuffer erforderlich ist.

Sie können glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) auch verwenden, um Antialiasedpunkte und -linien in beliebiger Reihenfolge zu rendern.

Um die Polygon-Antialiasing zu optimieren, verwenden Sie glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ONE) mit Polygonen, die vom nächsten zum entferntesten sortiert sind. (Informationen zur Polygon-Antialiasierung finden Sie im argument GL_POLYGON_SMOOTH in glEnable .) Ziel-Alpha-Bitplanes, die vorhanden sein müssen, damit diese Blendfunktion ordnungsgemäß funktioniert, speichern die akkumulierte Abdeckung.

Eingehendes Alpha (Quelle) ist eine Materialopacity, die von 1,0 (KA ) reicht, die vollständige Deckkraft darstellt, bis 0,0 (0), was vollständige Transparenz darstellt.

Wenn Sie mehr als einen Farbpuffer für das Zeichnen aktivieren, wird jeder aktivierte Puffer separat gemischt, und der Inhalt des Puffers wird für die Zielfarbe verwendet. (Siehe glDrawBuffer.)

Das Mischen wirkt sich nur auf das RGBA-Rendering aus. Sie wird von Farbindexrenderern ignoriert.

Die folgenden Funktionen rufen Informationen im Zusammenhang mit glBlendFunc ab:

glGet mit Argument GL_BLEND_SRC

glGet mit argument GL_BLEND_DST

glIsEnabled mit Argument GL_BLEND

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows 2000 Server [nur Desktop-Apps]
Header
Gl.h
Bibliothek
Opengl32.lib
DLL
Opengl32.dll

Weitere Informationen

glAlphaFunc

glBegin

glClear

glDisable

glDrawBuffer

glEnable

glGet

glIsEnabled

glLogicOp

glStencilFunc