Registriert: Mi Aug 28, 2002 17:03 Beiträge: 37 Wohnort: ABG
Hi!
Ich möchte die Vertexnormale vertex.nomal mit der aktuellen Modelview-Matrix state.matrix.modelview multiplizieren.
Wie geht das?
In dem VertexProgram-Tutorial von delphigl.com gibt es z. B. soetwas hier:
Code:
DP4 temp.x, ModelViewProj[0], vertex.position;
DP4 temp.y, ModelViewProj[1], vertex.position;
DP4 temp.z, ModelViewProj[2], vertex.position;
DP4 temp.w, ModelViewProj[3], vertex.position;
Ich bezweifle jedoch, das hier ModelViewProj mit dem vertex.position vektor multipliziert wird, sondern irgendwas anderes (halt jeder Zeilenvektor der Matrix mit dem vertex.position Vektor das Punktprodukt errechnen)
Wo wir gerade dabei sind, wie könnte ich den resultierenden Vektor normalisieren? Normalerweise müsste ich ja alle Komponenten des Vektors durch seine Länge teilen. Jedoch habe ich aus dem befehlssatz kein DIV und keine Funktion für die Länge gefunden.
mfg olli
_________________ Programmieren beginnt im Kopf und endet im Compiler
Man kann nur Kehrwert bzw. den Kehrwert der Wurzel bilden. So normalisier man z.B. den Vektor v. DIV gibt es ab PS3.0. Da muß man dann OPTION NV_fragment_program2; verwenden, aber das geht nur auf der gf6. Mit den erweiterten Optionen gibt es außerdem auch direkt einen Befehl zum Normalisieren, aber es nützt ja nichts wenn es nicht überall läuft.
Es bildet also das Punktprodukt von Vektor v zum ZEILEN-Vektor der Matrix m.
Aber die normale Berechnung sieht ja vor, das Punktprodukt von Vektor v und SPALTEN-Vektor der Matrix m.
mfg olli
_________________ Programmieren beginnt im Kopf und endet im Compiler
Ne das stimmt schon so. Man berechnet jeweils das Skalarprodukt einer Zeile von der Matrix mit dem Vektor. Wenn man die Spalten nimmt, kann man dadurch die Transformation wieder rückgängig machen, falls die Matrix orthonormal ist. Bei glsl muß man aufpassen, weil es da beide Varianten Matrix * Vector und Vector * Matrix gibt.
Zu Matrizen gibt es auch ein Tutorial:
http://www.delphigl.com/script/do_show. ... 1&action=2 Unter OpenGL wird die Matrix, im Gegensatz zur D3D, spaltenweise gespeichert:
Mitglieder in diesem Forum: 0 Mitglieder und 7 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.