- 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;
DGL https://delphigl.com/forum/ |
|
Matrix mit Vector multiplizieren (ARBvp1.0) https://delphigl.com/forum/viewtopic.php?f=20&t=3944 |
Seite 1 von 1 |
Autor: | Vertex [ Mo Mär 21, 2005 19:09 ] |
Betreff des Beitrags: | Matrix mit Vector multiplizieren (ARBvp1.0) |
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:
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 |
Autor: | LarsMiddendorf [ Mo Mär 21, 2005 19:15 ] |
Betreff des Beitrags: | |
Bei dem Vektor braucht man nur die obere 3x3 Matrix. Code:
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. Code:
|
Autor: | Vertex [ Di Mär 22, 2005 13:00 ] |
Betreff des Beitrags: | |
Hi! Ich danke dir! Ich verstehe jedoch noch nicht, warum das mit dem Punktprodukt geht. Also normalerweise wird ja ein Vektor v mit einer Matrix m so multipliziert: Code:
Und jetzt mal dein Code(ich habe mal DP4 genommen für w komponente): Code:
Die erste Zeile macht ja praktisch das hier: Code:
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 |
Autor: | LarsMiddendorf [ Fr Mär 25, 2005 22:31 ] |
Betreff des Beitrags: | |
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: Code:
Vielleicht meinst du das. |
Autor: | Vertex [ Sa Mär 26, 2005 18:33 ] |
Betreff des Beitrags: | |
Hi! Ahh der Hinweis hat mir gefehlt, das in OpenGL die Spaltenvektoren mit den Zeilenvektoren vertauscht sind. Vielen Dank! mfg olli |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |