ich hab ein problem mit bei der berechnung ob dir Normal eines Faces in richtung licht zeigt oder nicht...
berechnen tue ich das ganze hiermit:
Code:
if PointProduct(FaceNormal, SubtractVector(LightPosition, FacePosition)) > 0 then
Zeight richtung licht!
Funktioniert soweit auch wunderbar, das problem ist nur.. wenn ich das Face jetzt Rotiere, dann müßte ich die FaceNormal ja mitrotieren... OpenGL intern macht das ja, nur.. wie???
Ich hab versucht einfach die ModelMatrix mit der FaceNormal zu multiplizieren, aber hat nicht so ganz hingehauen....
Mit der Formel hier wende ich die Matrix auf die Normal und die Position an... (Bei der FacePosition funktioniert es)
Nicht ganz. Man muß die Matrix zuerst invertieren und dann transponieren(Zeilen&Spalten vertauschen) und dann mit dem oberen 3x3 Abschnitt multiplizieren.
Registriert: So Sep 26, 2004 05:57 Beiträge: 190 Wohnort: Linz
Ich geb dir recht das OGL das so macht, jedoch ist das invertieren und transponieren nicht notwendig, wenn der Rotationsteil der Matrix orthogonal ist. In diesem Fall gilt nämlich:
Invertiert( M ) = Transponiert( M )
bzw. auch
Transponiert( Invertiert( M ) ) = M
Erst wenn du die Matrix scalierst, oder andere komischen Sachen damit aufführst hat das Auswirkungen. Da jedoch diese Auswirkungen wie beispielsweise RESCALE_NORMAL auch erst zum tragen kommen wenn OGL die Modelview Matrix besitzt dürfte es selbst da wenig helfen es in dieser Art zu machen. Wobei soo gut kenn ich mich in diesem Bereich dann auch wieder nicht aus, also wenn du wirklich komische Sachen vor hast, dann solltest du vielleicht doch LarsMiddendorf's Methode auch mal versuchen :-).
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
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.