Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
Hi, ich habe ein Problem meine Normal in den Viewspace zu tranformieren. Man agt ja, das die Transformation mit der transponierten der inversen ModelView-Matrix erreicht wird und, das diese Matrix durch die gl_NormalMatrix repräsentiert wird in glsl. Mein Problem ist jetzt, dass ich die ModelViewMatrix von Hand setze, da ich meine Camera berechnungen alle losgelöst von den Typischen gl-transformationen mache. Mein Programm spuckt mir jetzt aber ganz merkwürdige Normalen rauß. Um genau zu sein scheint es so, als wenn sich ie Normalen "gegen den Objectspace drehen". Ich habe nicht den hauch einer Ahnung, was ich falsch mache. Ich habe mal eine Anwendung dzugepackt, damit ihr euch das selbst anschauen könnt. Im Shader passiert übrigens nichts großartiges:
Mein Problem ist jetzt, dass ich die ModelViewMatrix von Hand setze, da ich meine Camera berechnungen alle losgelöst von den Typischen gl-transformationen mache.
Das ist kein Problem.
Zitat:
Hi, ich habe ein Problem meine Normal in den Viewspace zu tranformieren.
Ich vermute mal du willst gar nicht in den Viewspace transformieren, sondern in den Worldspace, oder? Die Normalen sollen also unabhängig von der Kameraposition sein, d.h. wenn du dich um das Objekt bewegst soll sich in deinem Beispiel die Farbe der Normale nicht ändern.
In dem Fall wäre dein Problem, dass die ModelViewMatrix eben die ModelViewMatrix ist und nicht nur die ModelMatrix.
Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
deine Vermutung war leider nicht richtig. Ich möchte, dass die Normalen immer auf den Betrachter ausgerichtet erscheinen, nicht dass sie die Richtung im Raum repräsentieren. So wie es auf vielen Seiten im Netz beschrieben wird einfach normalize(gl_NormalMatrix* glNormal) zu rechnen scheint nicht zu klappen.
Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
Das hab ich auch schon probiert. Die Lösung ist es leider nicht. Mir ist aufgefallen, das wenn ich frontal auf das gebilde schaue, ohne, dass ich die Camera drehe, dann sind die normalen in Ordnung. Betrachte ich etwas aus einem anderen Winkel, scheint es so, als wenn die Normalen entgegen meiner Rotation um das Model wandern. Es ist etwas schwer zu erklären. Hast du dir das Programm einmal angesehen, das ich mit angehängt habe?
In dem Programm hat man nen Mouselook und steuert mit w a s d und shift/strg sind für hoch/runter entlang der Worldspace-Y-achse. Oder meintest du, dass das Programm bei dir funktioniert. Wenn das der Fall ist, dann hätte ich gerne einmal einen screenshot davon, denn dann müsste ja irgendwas mit meine Rechner nicht stimmen, aber ich gehe eher von meiner mathematischen Inkompetenz aus.
Edit: Ich habe einen kleinen verdacht! Und zwar ist die gl_NormalMatrix eine 3x3Matrix, meine ModelViewMatrix ist allerdings eine 4x4Matrix. Alles halb so wild, aaaaaber in der letzten Zeile der ModelViewMatrix tauchen bei mir punktprodukte auf, wenn ich also jetzt das inverse daraus entwickle und dann transponiere, habe ich automatisch auch werte in der 4.spalte stehen, diese werden aber von er NormalMatrix verworfen, weil sie ja nur 3x3 ist und keine 4.Spalte besitzt. Kommt das in etwa hin, oder ist das blödsinn?
Edit: Ich habe einen kleinen verdacht! Und zwar ist die gl_NormalMatrix eine 3x3Matrix, meine ModelViewMatrix ist allerdings eine 4x4Matrix. Alles halb so wild, aaaaaber in der letzten Zeile der ModelViewMatrix tauchen bei mir punktprodukte auf, wenn ich also jetzt das inverse daraus entwickle und dann transponiere, habe ich automatisch auch werte in der 4.spalte stehen, diese werden aber von er NormalMatrix verworfen, weil sie ja nur 3x3 ist und keine 4.Spalte besitzt. Kommt das in etwa hin, oder ist das blödsinn?
Die NormalMatrix ist 3x3, weil sie keine Translation beinhaltet. Von daher ist das ok. Probleme gibt es nur wenn du eine Projektion in deine ModelViewMatrix einbaust. Projektion kommt in die Projection-Matrix.
Zitat:
Hast du dir das Programm einmal angesehen, das ich mit angehängt habe?
Nein, habe weder Delphi noch Windows Kannst ja mal nen paar Screenshots machen
Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
So hier mal 3 Screenshots. Auf dem ersten ist der Effekt mit normal = normalize(gl_Normal); aufgenommen. So wie diese Farben zu sehen sind, soll es immer aussehen und zwar von egal wo betrachtet. Das zweite und dritte Bild zeigen, wie sich die Normalen aber tatsächlich verhalten.
meine modelviewmatrix erstelle ich übrigens aus der Orientierung der Camera, im etwa so:
Dateikommentar: von er Seite gesehen stimmts auch nicht normalen3.jpg [ 33.78 KiB | 7183-mal betrachtet ] Dateikommentar: etwas von unten betrachtet passte keine der Farben mehr. normalen2.jpg [ 13.7 KiB | 7183-mal betrachtet ] Dateikommentar: so wie es immer aussehen sollte normalen1.jpg [ 24.98 KiB | 7183-mal betrachtet ]
Die Normalmatrix ist die transposed inverse obere/linke 3x3 teil der Modelviematrix, wenn nicht gestaucht/scaliert wird kann es sein, das der 3x3 teil so funktioniert.
Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
Okay ich habs! Vorweg entschuldigung fürs quälen mit dieser Frage. Das Problem lag nicht an der Matrix, sondern an den Normalen. Ich habe in dem Modelloader die Formel zur Errechnung der Normalen abgeändert um sie als Farbwerte darstellen zu können. Das Problem war anschließend, das ich diese Normalen, die jetzt falsch waren, zusätzlich mit der NormalMatrix multipliziert habe und anschließend wieder die Verschiebung durchgeführt habe um sie darstellen zu können. Darufhin kam ein totales Kaudawelsch zustande. Das makabere ist, dass ich besagte Codezeile auch noch kommentiert habe mit "An dieser Stelle verschiebe ich die Normalen um sie als Farben zu verwenden UNBEDINGT DRAN DENKEN!!!"... irgendwie peinlich, aber ich bin glücklich, dass es jetzt funktioniert.
Mitglieder in diesem Forum: 0 Mitglieder und 6 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.