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

Aktuelle Zeit: Fr Jul 18, 2025 22:03

Foren-Übersicht » DGL » Feedback
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Mai 03, 2008 17:38 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Hey,

als ich grade einen Shader für diffuse Lichter benötige, hab ich mich vom Tutorial glsl2 inspirieren lassen, indem es über Punktprodukt zwischen Oberflächennormale und Vektor zum Licht realisiert ist.
Allerdings gab es da schon immer etwas, was mich sehr verwirrte, denn selbst, wenn das Licht hinter dem Objekt ist, wird das Dreieck ausgeleuchtet; zumal die Mathematik ja sagt, dass nachgeprüftermaßen 1*1*cos(a) für 180° > a > 90° nicht größer als 0 sein kann... ;) und eben fiel mir der simple Fehler auf:

Wenn im Tutorial der Vektor vom Vertex zum Licht berechnet wird:
Code:
  1.  vec3 Light = vec3(normalize(vec3(gl_LightSource[0].position) - Position));

Ist Position bereits so definiert:
Code:
  1. vec3 Position = vec3(gl_ModelViewMatrix * gl_Vertex);


Und in der Tat, wenn ich auf die Lichtquellenposition auch die ModelViewMatrix anwende, habe ich nur noch eine korrekte Beleuchtung, dh. wenn der Winkel <= 90° ist.
Von daher: War das beabsichtigt, und wenn ja warum, oder sollte ich tatsächlich als Erster diesen Fehler nach Jahren entdeckt haben? :shock:

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 11, 2008 13:17 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Ja das ist genau der Fehler den ich auch ständig habe und ich weiß nicht, woran es liegt ;)
Mein Cel-Shader macht es scheinbar richtig.

Ich bin mir eigentlich ziemlich sicher, dass der Code hier stimmen muss: http://www.ozone3d.net/tutorials/glsl_l ... _phong.php
Der entspricht nämlich ziemlich genau dem OpenGL Licht.

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2008 14:55 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Die modelview matrix definiert doch das lokale Koordinatensystem deines Objekts. Die Position der Lichtquelle sollte dagegen in globalen Koordinaten erfolgen.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2008 16:14 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Hast du die Lichtquelle vor oder nach der Kamerabewegung positioniert?

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2008 18:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Ein ziemlich gute Frage. Ich hab das damals nur mal kurz innen ShaderDesigner eingetippt.

Mein letzter Versuch, das offizielle FP-OpenGL-Licht gemäß den Specs (http://www.opengl.org/registry/doc/glsp ... 061201.pdf, S. 60ff, PDF-S. 74ff) zu coden, endete in einem ineffizienten, total unterschiedlichen, aber eigentlich ganz ansehnlichen Ergebnis.

Interessanterweise scheint das FP-OpenGL-Licht aber auch nicht halt davor zu machen, auch entgegengesetzte Normalen auszuleuchten. Laut den Specs dürfte das aber doch gar nicht sein...

Werde mal schauen, ob sich noch was rausfinden lässt.

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 14, 2008 09:55 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Doch das FP Licht beleuchtet entgegengesetzte Normalen nicht.
Aber man muss auch aufpassen bzgl Backfaceculling.

Die Lichtposition wird beim aufruf von glLight() mit der aktuellen Modelviewmatrix multipliziert. Andersrum kann es schon komische Effekte hervorrufen.
Könnte man auch im Shader machen. Aber das halte ich für überflüssig. Der Shader kann in der Zeit besseres tun.

Ich habe mittlerweile einen leicht erweiterten FP-Shader gebastelt, der die verschiedenen Lichttypen, sowie Texturen (ColorMap, NormalMap, GlowMap, AmbientOcclusionMap) miteinander kombiniert. Wenn ich ihn abschalte sieht es fast identisch aus, nur dass Normalmapping und so Zeug fehlt.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 14, 2008 12:39 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Bwaaah, da nehm ich mal hurtig alles zurück, was ich hier seltsames verzapft habe und entschuldige mich dafür. :oops: :roll:

Zitat:
oder sollte ich tatsächlich als Erster diesen Fehler nach Jahren entdeckt haben? Shocked

Genau das hat mich schon stutzig gemacht. In der Tat liefert bloß dieser dumme ShaderDesigner seine Lichter untransformiert in globalen Koordinaten. :|
Wenn man nicht alles selbst macht...
gut, apropos selbstmachen, dafür hab ich jetzt nen unoptimierten PPL-Shader xD...

und ansonsten... Danke für die Aufklärung

MfG


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]