Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 08, 2025 16:31

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Ambient Light
BeitragVerfasst: Di Apr 19, 2011 09:35 
Offline
DGL Member

Registriert: Sa Apr 09, 2011 20:48
Beiträge: 43
Programmiersprache: Delphi
Ich habe folgendes AmbientLight erstellt:
Code:
  1.  
  2. const
  3.   amb : array[0..3] of glFloat = (0.2, 0.2, 0.2, 1.0);
  4. begin
  5.     glEnable(GL_LIGHTING);
  6.     glEnable(GL_LIGHT0);
  7.     glLightfv(GL_LIGHT0, GL_AMBIENT, @amb);
  8. end;
  9.  


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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ambient Light
BeitragVerfasst: Di Apr 19, 2011 11:40 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Das Licht, das du da erstellt hast, ist nicht nur ein ambientes, sondern hat auch einen diffusen Anteil. Siehe glLight:
Zitat:
Der Vorgabewert für GL_DIFFUSE ist (1.0, 1.0, 1.0, 1.0) für GL_LIGHT0, für alle anderen Lichter (0.0, 0.0, 0.0, 1.0).


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 21:20, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ambient Light
BeitragVerfasst: Di Apr 19, 2011 14:22 
Offline
DGL Member

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ambient Light
BeitragVerfasst: Di Apr 19, 2011 16:07 
Offline
DGL Member

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:
  1. const
  2.   amb : array[0..3] of glFloat = (0.2, 0.2, 0.2, 1.0);
  3.   rest : array[0..3] of glFloat = (0.0, 0.0, 0.0, 1.0);
  4. begin
  5.     glEnable(GL_LIGHTING);
  6.     glEnable(GL_LIGHT0);
  7.     glLightfv(GL_LIGHT0, GL_AMBIENT, @amb);
  8.     glLightfv(GL_LIGHT0, GL_DIFFUSE, @rest);
  9.     glLightfv(GL_LIGHT0, GL_SPECULAR, @rest);
  10. end;


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 21:20, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ambient Light
BeitragVerfasst: Di Apr 19, 2011 16:17 
Offline
DGL Member

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. :shock:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ambient Light
BeitragVerfasst: Di Apr 19, 2011 16:30 
Offline
DGL Member

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:
  1. 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.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ambient Light
BeitragVerfasst: Di Apr 19, 2011 16:52 
Offline
DGL Member
Benutzeravatar

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:
  1. 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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ambient Light
BeitragVerfasst: Sa Apr 23, 2011 18:16 
Offline
DGL Member

Registriert: Sa Nov 24, 2007 11:59
Beiträge: 116
Programmiersprache: FreePascal
Zumindest unter FreePascal muss man @amb[0] schreiben, sonst passiert Mist.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.014s | 18 Queries | GZIP : On ]