2017-09-24 4 views
0

Ich habe gerade herausgefunden, dass OpenGL integrierte Beleuchtung, die mit glEnable(GL_LIGHTING); aktiviert werden kann. Warum verwenden Tutorials usw. eine benutzerdefinierte, die mit Shadern erstellt wurde? Dafür muss es einen Grund geben. Was macht die eingebaute Beleuchtung schlechter?OpenGL mit integrierten Beleuchtung oder benutzerdefinierte one mit Shadern

+0

"eingebaute Beleuchtung" verwendet Gouraud-Schattierung. Während die Gouraud-Schattierung das Licht im Vertex-Shader berechnet, berechnet die Phong-Schattierung das Licht im Fragment-Shader - siehe [GLSL-Fragmentprogramm-Ersatzfunktion] (https://stackoverflow.com/questions/8421778/glsl-fixed-function-). Fragment-Programm-Ersatz/45716107 # 45716107) – Rabbid76

Antwort

3

OpenGL hat integrierte Beleuchtung

Nein, tut es nicht. Alle diese Dinge waren removed from OpenGL in 3.1 and put into the compatibility profile. Welches ist nicht benötigt, um unterstützt zu werden.

Was macht die eingebaute Beleuchtung schlechter?

Alles. Es macht alles schlimmer.

Feste Funktionsbeleuchtung ist per-Vertex, während Shader-basierte Beleuchtung kann was auch immer Sie wollen: per-Vertex, pro-Fragment, was auch immer. Beleuchtung mit fester Funktion funktioniert nicht mit verzögertem Rendering, Vorpassagen mit Beleuchtung oder verschiedenen anderen Rendertechniken. Leuchten mit fester Funktion können keine HDR- oder Gammakorrekte Beleuchtung verarbeiten.

Es gibt nichts, was Fixed-Function-Beleuchtung kann, dass benutzerdefinierte Beleuchtung nicht kann. Zwar gibt es eine Menge Dinge, die benutzerdefinierte Beleuchtung tun kann, die feste Funktion nicht kann.

Es ist gut, dass moderne OpenGL-Tutorials diesen veralteten Müll nicht lehren.

+0

Wie wäre es mit glShadeModel (GL_SMOOTH). Ist es gut zu verwenden oder sollte ich einen benutzerdefinierten im Geometrieshader erstellen? – Maineri

Verwandte Themen