Registriert: Sa Apr 09, 2011 20:48 Beiträge: 43
Programmiersprache: Delphi
Ich habe folgendes AmbientLight erstellt:
Code:
const
amb : array[0..3] of glFloat = (0.2, 0.2, 0.2, 1.0);
begin
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_AMBIENT, @amb);
end;
Wenn ich dieses Licht aktiviere, dann ändert sich die Lichtstärke, je nach dem wie ich um die y-achse rotiere. An einem Punkt ist es 100% da und 180 Grad gegenüber ist es dunkel.
Woran kann das liegen? Ich habe den Eindruck das ich irgendwas falsch verstanden habe.
Registriert: Sa Apr 09, 2011 20:48 Beiträge: 43
Programmiersprache: Delphi
Ja, ich habe mittlerweile alle drei Lichtarten definiert und aktiviert. Ist noch nicht wie ich es mir vorgestellt habe. Aber ich werde das mal in einem Testprojekt genauer unter die Lupe nehmen.
Registriert: Di Okt 13, 2009 17:25 Beiträge: 365
Programmiersprache: C++
Wenn du diffuses Licht verwendest, liegt es in der Natur des Lichtes, dass sich die Helligkeit ändert, wenn du das beleuchtete Objekt drehst. Ist dir klar, welche Rolle Normalenvektoren bei der Beleuchtung spielen?
Wenn du nur Ambientes Licht willst, das unabhängig von der Drehung ist, empfehle ich Folgendes:
Code:
const
amb :array[0..3]of glFloat =(0.2,0.2,0.2,1.0);
rest :array[0..3]of glFloat =(0.0,0.0,0.0,1.0);
begin
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_AMBIENT,@amb);
glLightfv(GL_LIGHT0, GL_DIFFUSE,@rest);
glLightfv(GL_LIGHT0, GL_SPECULAR,@rest);
end;
Zuletzt geändert von mrtrain am Mi Aug 31, 2011 21:20, insgesamt 1-mal geändert.
Registriert: Sa Apr 09, 2011 20:48 Beiträge: 43
Programmiersprache: Delphi
mrtrain hat geschrieben:
Ist dir klar, welche Rolle Normalenvektoren bei der Beleuchtung spielen?
Ich hab das so verstanden, das Normalvektoren von OpenGL herangezogen werden um die Ein- oder Ausfallwinkel für Licht zu berechnen.
Ich denke da ich meine eigenen Quads nicht mit Normalvektoren ausgestattet habe ist daher die komische Verhaltensweise entstanden.
Das mit dem Ambientlicht hab ich jetzt halbwegs verinnerlicht. Da ich mittlerweile auch Spheres einsetze und diese automatisch mit Normalen ausgestattet werden, konnte ich den Unterschied mittlerweile sehen.
Registriert: Di Okt 13, 2009 17:25 Beiträge: 365
Programmiersprache: C++
BionicWave hat geschrieben:
Ich hab das so verstanden, das Normalvektoren von OpenGL herangezogen werden um die Ein- oder Ausfallwinkel für Licht zu berechnen.
Jo das stimmt und zwar wird das Punktprodukt aus Lichtrichtungs- und Normalenvektor deiner Vertices berechnet, was dem Kosinus des Winkels zwischen ihnen entspricht.
Übrigens, ich kenn mich jetzt in Pascal nicht so aus. Bist du sicher, dass diese Zeile
Code:
glLightfv(GL_LIGHT0, GL_AMBIENT,@amb);
korrekt ist? Oder wird amb selbst schon als Zeiger behandelt, so dass man das @ weglassen muss? (So ist es in C++.) Das wäre nämlich eine mögliche Erklärung dafür, dass du im anderen Thread so seltsame Werte bekommst.
Zuletzt geändert von mrtrain am Mi Aug 31, 2011 21:21, insgesamt 1-mal geändert.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
mrtrain hat geschrieben:
Übrigens, ich kenn mich jetzt in Pascal nicht so aus. Bist du sicher, dass diese Zeile
Code:
glLightfv(GL_LIGHT0, GL_AMBIENT,@amb);
korrekt ist? Oder wird amb selbst schon als Zeiger behandelt, so dass man das @ weglassen muss? (So ist es in C++.) Das wäre nämlich eine mögliche Erklärung dafür, dass du im anderen Thread so seltsame Werte bekommst.
Bei const sollte das gehen, aber sicherheitshalber würde ich mal @amb[0] probieren.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Mitglieder in diesem Forum: Google [Bot] und 16 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.