Ambientes OpenGL Licht
-
Hi,
was ist der Unterschied zwischen der Angabe von ambienten Licht bei:
GLfloat ambient[] = {0.2, 0.2, 0.2, 0.1}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
und
GLfloat ambient[] = {0.2, 0.2, 0.2, 0.1}; glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
Warum kann man ambiente Angaben auf diese zwei verschiedenen Arten machen?
Und was ist der Unterschied?
-
Wenn du x Lichter mit Ambient-Anteil hast, würden die sich entsprechend der Material-Ambient anteile moduliert alle aufsummieren. Stattdessen kannst du die alle auf Schwarz setzen und im Lichtmodell einen globalen Ambient-Anteil festlegen. Oder du machst beides zugleich. Aber dann musst du darauf aufpassen, dass die Szene nicht zu hell wird, wenn du mehrere Lichter verwendest.
-
Wenn man sich hier auf Seite 36 die Formel ansieht:
http://wwwlehre.ba-stuttgart.de/~hees/gdv/skripte/07_OpenGL_Teil_4.pdf
dann sieht das so aus, als sei das ambiente Licht, welches durchglLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
gesetzt wird (in der Formel "GlobalAmbientLight" genannt) nicht dem Dämpfungsfaktor ausgesetzt, im Gegensatz zu dem Ambienten Licht welches durch
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
gesetzt wird (in der Formel einfach nur "AmbientLight" genannt).
Interpretiere ich das richtig?
-
Wenn die Formel da stimmt, hast du vollkommen Recht. Ich hatte das mit dem ambienten Teil der Lichtquellen anders in Erinnerung, aber scheinbar ist der mit den Abstandskoeffizienten gedämpft. Sorry für die Fehlinformation.
Viele Grüße,
Michael
-
Mit glLightModel wird die allgemeine, überall in der Szene gleichermaßen vorhandene, Grundbeleuchtung eingestellt und mit glLight die Eigenschaften einer einzelnen zusätzlichen Lichtquelle. Weil man die Eigenschaften einer Lichtquelle so einstellen kann, daß sie sich wie ein allgemeines Licht verhält, und weil das auch die Voreinstellung für Lichtquellen ist, produziert glLight in deinem Beispiel das selbe Ergebnis wie glLightModel.