2017-09-05 8 views
1

glSecondaryColor ermöglicht die Angabe einer 2. Farbe. Wofür ist diese zweite Farbe nützlich?Wofür sind OpenGL-Sekundärfarben nützlich?

Ich habe die kronos reference geprüft und es hilft nicht viel:

Die Sekundärfarbe interpoliert und zu jedem Fragment während der Rasterung angewendet, wenn GL_COLOR_SUM aktiviert ist. Wenn die Beleuchtung aktiviert ist und GL_SEPARATE_SPECULAR_COLOR angegeben ist, wird dem Wert der Sekundärfarbe der Wert zugewiesen, der aus dem Glanzbegriff der Beleuchtungsberechnung berechnet wurde. Sowohl die primäre als auch die sekundäre aktuelle Farbe wird unter diesen Bedingungen unabhängig vom Zustand GL_COLOR_SUM auf jedes Fragment angewendet. Wenn GL_SEPARATE_SPECULAR_COLOR angegeben ist, ist der von der Abfrage der aktuellen sekundären Farbe zurückgegebene Wert nicht definiert.

Diese sekundäre Farbe Ding könnte sogar aussehen wie Reste von älteren GL-Versionen ... liege ich falsch?

Antwort

7

In dem Beleuchtungsmodell mit fester Funktion wird die Primärfarbe und/oder Texturfarbe auf die diffuse Beleuchtung und der spiegelnden Beleuchtung angewendet. Daher war es unmöglich, eine glänzende schwarze Oberfläche zu haben, da die schwarze Primärfarbe/Texturfarbe mit der Spiegelbeleuchtung multipliziert würde, wodurch sie effektiv Null wird.

Die Angabe einer Sekundärfarbe und die Aktivierung von GL_SEPARATE_SPECULAR_COLOR würde bedeuten, dass der Wert für die Spiegelungsbeleuchtung mit der Sekundärfarbe anstelle der Primärfarbe multipliziert würde. Sie könnten also eine schwarze Primär-/Texturfarbe mit einer Sekundärfarbe von 1,0 haben. Das würde Ihnen ein hell glänzendes Highlight auch in dunklen Bereichen der Oberfläche ermöglichen.

Natürlich ist dies alles Müll mit fester Funktion, der in GL 3.1 verworfen wurde. Mit Shadern können Sie jedes Beleuchtungsmodell verwenden, das Sie programmieren können.