Archiv verlassen und diese Seite im Standarddesign anzeigen : Vektorrechnung in 3D
Hallo
die Schule ist lange her und ich erinnere mich an einige Sachen einfach nicht mehr.
Ich habe einen Vektor der auf eine Fläche aufschlägt und eine Normale, die die Ebene definiert. Wie bekomme ich jetzt den Reflexionsvektor von der Ebene hin (für spekulare Reflexion).
Wie kann ich einen Vektor von tangent-, in model-, in worldspace und jeweils zurück umrechnen?
danke holger
Reflexion:
out = in - 2*dot(normal,in)
Neomi
2005-05-23, 17:13:27
out = in - 2*dot(normal,in)
Nicht ganz, wahrscheinlich nur zu schnell getippt.
out = in - 2*dot(normal,in)*normal
Nicht ganz, wahrscheinlich nur zu schnell getippt.
out = in - 2*dot(normal,in)*normal
Ups, das meinte ich natürlich :)
Neomi
2005-05-23, 22:08:50
Wie kann ich einen Vektor von tangent-, in model-, in worldspace und jeweils zurück umrechnen?
Wie gut kennst du dich mit Matrizen aus?
Um Vektoren umzuwandeln, reichen 3x3-Matrizen. Für Rechnungen im dreidimensionalen Raum sind 4x4-Matrizen üblich, die vierte Spalte (oder Zeile, je nach Ausrichtung) ist dabei meist nur für die Projektion (-> Screenspace) nötig.
Optimal für die Transformation von Vektoren sind normierte und orthogonalisierte 3x3-Matrizen. Das sind Matrizen, deren X-, Y- und Z-Achsen jeweils orthogonal zueinander stehen und die Länge 1 haben. Ist der 3x3-Anteil im Localspace eines Objektes eine solche Matrix, die höchstens skaliert wurde (alle Achsen orthogonal zueinander und mit gleicher Länge), kann man die normierte Fassung davon heranziehen. Wurde in verschiedene Richtungen unterschiedlich skaliert oder sind die Achsen nicht orthogonal zueinander, muß man die Matrix erst umrechnen, außerdem ändert sich dann bei der Transformation eines Vektors auch dessen Länge.
Von einem Bezugssystem A (3x3-Matrix) zu einem Bezugssystem B (ebenso) wandelt man mit einer Matrix M, die diese Eigenschaft hat:
A * M = B
<=> Ai * (A * M) = Ai * B
<=> (Ai * A) * M = Ai * B
<=> M = Ai * B
Dabei ist Ai die invertierte Matrix von A. Eine invertierte Matrix ist die Matrix, die multipliziert (wichtig: A*B ist nicht gleich B*A) mit der nicht invertierten Matrix die Einheitsmatrix ergibt. Bei orthogonalisierten und normierten 3x3-Matrizen ist die invertierte Matrix identisch zur transponierten Matrix. Dabei werden einfach Spalten und Zeilen getauscht.
Das war zwar jetzt sehr knapp und oberflächlich, aber vielleicht hilft es dir ja schon. Wenn nicht, dann frag einfach nochmal genauer nach. Wichtig wäre dann aber noch, über welches Wissen du schon verfügst.
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.