- normalize(gl_NormalMatrix * (-gl_Normal));
DGL https://delphigl.com/forum/ |
|
Normalen in Viewspace transformieren https://delphigl.com/forum/viewtopic.php?f=20&t=8481 |
Seite 1 von 1 |
Autor: | Sellmann [ So Jun 21, 2009 11:24 ] | ||
Betreff des Beitrags: | Normalen in Viewspace transformieren | ||
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: vertex shader Code:
fragment shader Code:
|
Autor: | Coolcat [ So Jun 21, 2009 11:49 ] |
Betreff des Beitrags: | |
Zitat: 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. (ich habe mir dein Programm nicht angeguckt) |
Autor: | Sellmann [ So Jun 21, 2009 12:27 ] |
Betreff des Beitrags: | |
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. |
Autor: | Coolcat [ So Jun 21, 2009 12:42 ] |
Betreff des Beitrags: | |
hm, bei mir funktioniert das so. Sind den die Normalen richtig? Sind die Normalen vielleicht einfach nur falsch rum? Also mal Code:
versucht? |
Autor: | Sellmann [ So Jun 21, 2009 13:08 ] |
Betreff des Beitrags: | |
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? |
Autor: | Coolcat [ So Jun 21, 2009 14:31 ] |
Betreff des Beitrags: | |
Zitat: 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 ![]() ![]() |
Autor: | Sellmann [ So Jun 21, 2009 15:48 ] | ||||
Betreff des Beitrags: | |||||
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: Code:
|
Autor: | oc2k1 [ So Jun 21, 2009 18:06 ] |
Betreff des Beitrags: | |
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. |
Autor: | Sellmann [ Mo Jun 22, 2009 18:45 ] |
Betreff des Beitrags: | |
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. |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |