glBlendFunc-Funktion

Die glBlendFunc-Funktion gibt die Pixelarithmetik an.

Syntax

void WINAPI glBlendFunc(
   GLenum sfactor,
   GLenum dfactor
);

Parameter

SFACTOR

Gibt an, wie die Faktoren rot, grün, blau und alpha für die Quellenmischung berechnet werden. Neun symbolische Konstanten werden 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 Rot-, Grün-, Blau- und Alpha-Zielmischungsfaktoren 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 glEndaufgerufen.

Hinweise

Im RGB-Modus können Pixel mithilfe einer Funktion gezeichnet werden, die die eingehenden RGBA-Werte (Quelle) mit den RGBA-Werten kombiniert, die sich bereits im Framepuffer (den Zielwerten) befinden. Das Mischen ist standardmäßig deaktiviert. Verwenden Sie glEnable und glDisable mit dem GL _ BLEND-Argument, um blending zu aktivieren und zu deaktivieren.

Wenn diese Option aktiviert ist, definiert glBlendFunc den Vorgang des Mischens. Der sfactor-Parameter gibt an, welche von 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 jeweils vier Skalierungsfaktoren für Rot, Grün, Blau und Alpha.

In der Tabelle und in nachfolgenden Gleichungen werden Quell- und Zielfarbkomponenten als (R? , G? , B? , A? ) und (Rd , Gd , Bd , Ad ). Es wird davon ausgegangen, dass sie ganzzahlige Werte zwischen 0 (null) und (k R, kG, kR, kA) aufweisen, wobei

kR = 2 mR - 1

kG = 2 mG - 1

kB = 2 mB - 1

kA = 2 mA - 1

und (mR , mG , mB , mA ) ist die Anzahl der Rot-, Grün-, Blau- und Alphabitebenen.

Quell- und Zielskalierenfaktoren 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 von [ 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 , Adk A , A d / kA , Ad / kA )
GL _ SRC _ ALPHA _ SATURATE (i,i,i, 1)

In der Tabelle

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

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

R (d) = min( kR , R? sR + Rd dR )

G (d) = min( kG , G? sG + Gd dG )

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

A (d) = min( kA , A? sA + Ad dA )

Trotz der offensichtlichen Genauigkeit der obigen Gleichungen wird die Arithmetik nicht genau angegeben, da das Mischen mit unpräzise ganzzahligen Farbwerten funktioniert. Es ist jedoch garantiert, dass ein Mischungsfaktor, der gleich 1 sein sollte, seine Multiplikand nicht ändert, und ein Mischungsfaktor gleich 0 (null) reduziert die Multiplikand auf 0 (null). Wenn z. B. Sfactor GL _ SRC _ ALPHA ist, dfactor GL _ ONE MINUS _ _ SRC ALPHA und _ A? gleich kAist, reduzieren sich die Gleichungen auf einfache Ersetzung:

Rd = R?

Gd = G?

B d = B?

Ad = A?

Beispiele

Transparenz wird am besten mit glBlendFunc(GL _ SRC _ ALPHA, GL _ ONE MINUS _ _ SRC _ ALPHA) mit Primitiven implementiert, die vom längsten zum nächsten sortiert sind. Beachten Sie, dass diese Transparenzberechnung nicht das Vorhandensein von Alphabitplanen im Framepuffer erfordert.

Sie können auch glBlendFunc(GL _ SRC ALPHA, GL ONE MINUS SRC ALPHA) verwenden, um _ _ _ _ Antialiasingpunkte und Linien in _ beliebiger Reihenfolge zu rendern.

Um polygonale Antialiasing zu optimieren, verwenden Sie glBlendFunc(GL _ SRC _ ALPHA _ SATURATE, GL ONE) mit Polygonen, die vom nächsten zum _ längsten sortiert sind. (Siehe GL _ POLYGON _ SMOOTH-Argument in glEnable für Informationen zum Antialiasing von Polygonen.) Ziel-Alphabitplanen, die vorhanden sein müssen, damit diese Blend-Funktion ordnungsgemäß funktioniert, speichern die akkumulierte Abdeckung.

Eingehendes Alpha (Quell alpha) ist eine Materialdurchlässigkeit im Bereich von 1,0 (KA ), die die vollständige Deckkraft darstellt, bis zu 0,0 (0), die vollständige Transparenz darstellt.

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

Blending 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

Siehe auch

glAlphaFunc

glBegin

glClear

glDisable

glDrawBuffer

glEnable

glGet

glIsEnabled

glLogicOp

glStencilFunc