2012-04-08 17 views
0

Wenn wir mit Hilfe des Vertex-Shaders und des Fragment-Shaders Nebel generieren möchten, besteht eine der üblichen Methoden darin, den Abstand eines Eckpunkts im Vertex-Shader zu berechnen und die fog-gemischte Farbe im Fragment-Shader anzuwenden.Wer berechnete gl_FragColor für Punkte innerhalb eines Dreiecks?

Meine Frage ist, da wir nur die Entfernung der Dreieckscheitel berechnet haben, wie OpenGL entscheidet die Farben der Punkte innerhalb des Dreiecks? Wenn es automatisch berechnet wird, gibt es eine Möglichkeit, die Berechnung zu steuern?

Antwort

2

In OpenGL ES 2 werden die Werte aller Attribute, die vom Vertex-Shader an den Fragment-Shader übergeben werden, linear interpoliert, perspektivisch korrekt, über der Oberfläche des Dreiecks, das schattiert ist.

In einigen anderen Versionen von OpenGL können Sie dieses Verhalten ändern.

So zum Beispiel für Nebel, solange Ihre Nebelformel eine lineare Funktion über den Weltraum ist, können Sie den interpolierten Nebelwert aus dem Vertex-Shader in gl_FragColor im Fragment-Shader mischen und es sollte korrekt aussehen.

Wenn Ihr Nebel jedoch nicht linear ist, müssen Sie den Nebelwert für jedes Fragment einzeln im Fragment-Shader berechnen, um korrekte Ergebnisse zu erhalten.

Verwandte Themen