PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : OpenGL Lights


Einfachkrank
2004-02-24, 14:02:04
Hi,

wer will mir in seinen eigenen Worten noch mal die verschiedenen Licharten in OpenGL auf deutsch erklären? Wenn ich ein Licht setze, dann kann ich folgenden Standardwerte zuweisen:
GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR und GL_POSITION. Die anderen sind für mich erst mal nebensächlich.
Ich weiß, dass GL_AMBIENT das Umgebungslicht darstellt, das allgegenwärtig ist, oder? Aber warum kann ich das dann bei jedem der 8 Lichter einstellen? Und was bedeuten die anderen Parameter im Detail? Und welche genauen Auswirkungen hat es bei GL_POSITION, wenn ich den vierten Parameter einmal als 0.0f und einmal als 1.0f übergebe?

MFG Einfachkrank

Xmas
2004-02-24, 15:39:18
GL_AMBIENT ist für ambient Lighting (wie du sagtest, allgegenwärtig, ohne Richtung)

GL_DIFFUSE ist für diffuse Lighting die Lichtfarbe/Intensität. Das ist bei matten Oberflächen wichtig. Hier ist die Helligkeit eines Punktes auf einer Oberfläche nur vom Winkel von der Oberfläche zur Lichtquelle abhängig, nicht aber vom Betrachtungswinkel.

GL_SPECULAR ist für specular Lighting die Lichtfarbe/Intensität. Bei glänzenden Oberflächen bekommt man so Glanzpunkte, nämlich dort wo der Reflexionswinkel dem Einfallwinkel entspricht. Bei specular Lighting ist deswegen auch die Position des Betrachters wichtig.

Dass GL_AMBIENT pro Licht eingestellt wird, macht schlicht die Verwaltung der Lichter einfacher. So kann man z.B. zwei Lichtquellen, Sonne und Mond, definieren und je nach Tageszeit immer eine abschalten.

Wenn w bei GL_POSITION gleich 0 ist, wird die Lichtquelle als "Directional Light" angesehen, sie hat dann keine Position, nur eine Richtung. Dementsprechend gibt es auch keine Entfernung zur Lichtquelle, womit die Attenuation flachfällt.

Einfachkrank
2004-02-25, 09:36:37
Ok, da wäre noch ein seltsames Phänomen. Wenn ich mein Licht als Richtung angebe, werden dann trotzdem alle Seite meines Würfels beleuchtet. Und die Lichtitensität fällt wenn ich mich dem Würfel nähere...

Meine Parameter müssten so aussehen:
GL_AMBIENT (0.1f, 0.1f, 0.1f, 1.0f)
GL_DIFFUSE (0.3f, 0.3f, 0.8f, 1.0f)
GL_POSITION (0.0f, 0.0f, -1.0f, 0.0f)

Mein Würfel steht bei 0.0f, 0.0f, -2.0f und jede Seite wird dann immer gleich hell angeleuchtet und sie werden dunkler wenn ich mich ihnen nähere...

zeckensack
2004-02-25, 10:25:34
Höchstwahrscheinlich sind deine Normalen falsch.
Btw, dass das ganze bei Annäherung dunkler wird, deutet idR darauf hin, dass "falsch" gezoomt wird.
Wie bewegst du die "Kamera"? Richtig wäre glTranslate (auf die Modelview-Matrix) und nicht glScale.

Richtiges Vorärts-Zoomen sollte man über Verringerung des fov machen (in gluPerspective bzw glFrustum) und wiederum nicht mit glScale.

Gast
2004-02-25, 16:58:05
Original geschrieben von zeckensack
Richtiges Vorärts-Zoomen sollte man über Verringerung des fov machen (in gluPerspective bzw glFrustum) und wiederum nicht mit glScale.

Wieso das denn? *neugierigsei*

MfG

Einfachkrank
2004-02-25, 19:52:43
öhm :? zoomen? also ich verschiebe meine Kamera immer mit gluLookAt(), und je nach dem kommt auch gluPerspective() dazu(aber eigentlich nur, wenn ich den viewport bei multi monitoring veränder...). glScale() verwende ich überhaupt nicht. Mit nem Spot Light passiert dasselbe. Is sieht immer so aus, als wäre ich das Licht selbst und wenn ich dem Objekt näher trete, leuchtet es vorbei. Bei nem einfachen Würfel dürfte eigentlich nicht so viel falsch sein.

Xmas
2004-02-25, 22:57:16
Hast du GL_LIGHT_MODEL_LOCAL_VIEWER auf 1 gestellt?

Einfachkrank
2004-02-26, 10:15:42
Also den Parameter kenne ich auch noch nich. Ist der Standardmäßig nicht auf 1 gesetzt? Wenn nicht, wie bekomme ich das hin, mit glEnable()? Oder sollte der auf 0 bleiben?

Xmas
2004-02-27, 00:50:22
Mit glLightModel[i|f].

Einfachkrank
2004-02-28, 21:28:01
Ok, ändert sich leider nichts... Selbes Problem. Ach, wenn ich die Lichtquelle als Richtung angebe, dann ist garnichts zu sehen, also sieht wie aus als wärs nachts. Diese Lichter machen mich noch verrückt!