Textur und Farbe zusammen in GLSL?

8

Ich kann nicht herausfinden, wie man mit OpenGL ES 2.0 ähnliche Ergebnisse zu OpenGL ES 1.1 bekommt. Ich möchte eigentlich einen Sampler2D verwenden (um meine Textur mit Alpha Channel zum Framebuffer zu mischen) und auch eine Farbe einstellen. Die Textur sollte in der Farbe - wie in OpenGL ES 1.1 - gemalt werden Mein FragmentShader sieht so aus:

%Vor%

Aber der Teil "+ colorVarying" zerstört meinen Alphakanal mit Schwarz (weil ich auch colorVarying addiere, wenn der AlphaValue 0 ist) und einen seltsamen Gradienteneffekt erzeugt ... Wie ist die Textur & amp; Farbkanal in der festen Funktion Pipeline kombiniert? Mein Ersatz für glColor4f ist:

%Vor%

Und ich verwende glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); wenn das irgendwie relevant ist ...

Für die Farbe 1.0, 0.0, 1.0, 1.0 hier ist was ich jetzt bekomme:

Und ich möchte bekommen:

Einige Ideen, um dies zu erreichen? Jede Hilfe wäre willkommen.

    
Constantin 14.02.2011, 23:00
quelle

2 Antworten

15

Um Ihre Eckpunktfarbe mit Ihrer Textur so zu kombinieren, wie es OpenGL ES 1.1 standardmäßig tut, sollten Sie Ihren Fragment-Shader verwenden:

%Vor%

Beachten Sie, dass GL_MODULATE die Textur um die Farbe multipliziert, anstatt sie hinzuzufügen.

Sie sehen einen Farbverlauf in Ihrem Bild, da die Weitergabe von 0 an Vertex-Array-Spezifikationsfunktionen in OpenGL ES (sowohl 1.1 als auch 2.0) nicht zu einem Schritt 0 führt, sondern OpenGL ES berechnet den Schritt für Sie nehmen dicht gepackte Elemente des von Ihnen angegebenen Formats / Typs an. Als Ergebnis lesen Sie tatsächlich nach dem Ende Ihres Arrays in zufälliger Erinnerung. Wenn Sie für alle Scheitelpunkte den gleichen Wert wünschen, sollten Sie den aktuellen Attributwert festlegen und das zugehörige Array deaktivieren:

%Vor%     
Pivot 15.02.2011, 06:19
quelle
0

Pivots Antwort funktioniert großartig für mich. Ich wollte nur hinzufügen, wie es mit einer neueren Version von GLSL (3.3 +) aussehen würde:

%Vor%

Dies ist nur der Fragment-Shader.

    
Roovy 31.12.2017 11:13
quelle