2017-11-22 3 views
0

sagen, dass ich eine solche Misch Gleichung und Koeffizienten, die Farben zum Beispiel aus dem Bereich gehenWas, wenn sie während der Farbenmischung geschieht, wenn Farben aus dem Bereich gehen

Source color: (0.8f, 0.8f, 0.8f, 1.0) 
Destination color: (0.8f, 0.8f, 0.8f, 1.0) 
glBlendFunc(GL_ONE, GL_ONE); 
glBlendEquation(GL_FUNC_ADD); 

Farben nach der Berechnung normalisiert werden sollte, oder sie werden sein geklemmt? Was durch den GL-Standard definiert ist, kann ich nicht finden.

+2

Ich denke, dass nichts während des Mischens passieren wird. Die Konvertierung in das Datenformat des Framebuffers würde anschließend erfolgen. Und dann passiert das Gleiche wie wenn Sie Outputs von Ihrem Fragment-Shader schreiben, die größer sind als die möglichen Daten (Clamping). Was genau passiert, hängt hauptsächlich vom Format des Farbpuffers ab. Für einen RGB32F-Puffer wird nicht viel passieren. – BDL

+0

@BDL, was bedeutet es, dass "nicht viel passieren wird"? Falls ich '(1.0f, 0.0f, 0.0f, 1.0f)' habe, habe ich rot. Welche Farbe habe ich im Fall von '(2.0f, 0.0f, 0.0f, 1.0f)'? – Narek

Antwort

1

Im Allgemeinen werden Farbvektoren im GL niemals automatisch "normalisiert". Sie werden bei den verschiedenen Fragmentverarbeitungsstufen festgeklemmt, wenn diese Operation für das aktuelle Format des Farbpuffers Sinn macht, und sie werden niemals unter Verwendung eines Fließkommaformats geklemmt.

OpenGL 4.6 Core Profile specification:

Abschnitt 17.3.6 Blending:

Wenn der Farbpuffer fester Punkt ist, die Komponenten der Quell- und Zielwerte und Mischung Faktoren jeweils eingespannt sind [ 0, 1] oder [-1, 1] jeweils für einen vorzeichenlosen normierten oder vorzeichenbehafteten normalisierten Farbpuffer vor der Auswertung der Mischungsgleichung. Wenn die Farbe Puffer Gleitkomma ist, tritt keine Klemmung auf. Die resultierenden vier Werte werden an die nächste Operation gesendet.

Also, wenn Blending aktiviert ist, wird die Eingang Werte geklemmt werden, wenn Sie einen nicht normalisierte Gleitkomma-Farbpuffer verwenden. Das Ergebnis der Mischung ist nicht geklemmt.

Die nächste Operation ist Abschnitt 17.3.7 sRGB Conversion:

[Anmerkung: cl ist der Eingangswert der Betrieb (die die sich ergebende Wert der Mischstufe ist), und ist cs der resultierende Wert der sRGB-Konvertierung, mit cs = cl, wenn die sRGB-Konvertierung deaktiviert ist

Die resultierenden Werte cs für R, G und B und das unmodifizierte A bilden einen neuen RGBA-Farbwert. Wenn der Farbpuffer Fixpunkt ist, wird jede Komponente auf den Bereich [0, 1] geklemmt und dann unter Verwendung von Gleichung 2.3 in einen Festkommawert umgewandelt. Die resultierenden vier Werte werden an die nachfolgende Dithering-Operation gesendet.

Verwandte Themen