nicht genau, was es tut, ist konzeptionell zwei Dinge:
Es schafft eine 4x4 homogene Übersetzungsmatrix T die die Wirkung der Kompensation jeden Punkt V durch den Vektor hat:
/1 0 0 Vx \
T = | 0 1 0 Vy |
| 0 0 1 Vz |
\ 0 0 1 1/
so dass für jeden Punkt p = (px , py, pz, 1) p ' = T * p wird p'ergeben= p + V:
/ 1 0 0 Vx \ /px \ /px * 1 + 1 * Vx \
| 0 1 0 Vy | * | py | = | py * 1 + 1 * Vy |
| 0 0 1 Vz | | pz | | pz * 1 + 1 * Vz |
\ 0 0 1 1/ \ 1/ \ 1 /
Es post-Multiplikationen T zu M und gibt das Ergebnis: M‘ = M * T
Dies hat zur Folge, dass die Anwendung M ' zu einem beliebigen Punkt zuerstgiltT, anfd dann gelten, was in M war vor:
p ' = M' * p = M * T * p = M * (T * p)
Es sei angemerkt, dass das allgemeine Matrixmultiplikationsschema vereinfacht werden kann, wenn man weiß, dass einer der Operanden eine Übersetzungsmatrix ist. Im Fall der Post-mulitplying
T, hat dies die gleiche Wirkung des ersten
V durch
M, transformiert und als Addieren des resultierenden Vektors zu der letzten Spalte des
M.
/m00 m01 m02 m03 \ /1 0 0 Vx \ /m00 m01 m02 (m03 + m00 * Vx + m01 * Vy + m02 * Vz) \
| m10 m11 m12 m13 | * | 0 1 0 Vy | = | m10 m11 m12 (m13 + m10 * Vx + m11 * Vy + m12 * Vz) |
| m20 m21 m22 m23 | | 0 0 1 Vz | | m20 m21 m22 (m23 + m20 * Vx + m21 * Vy + m22 * Vz) |
\ m30 m31 m32 m33/ \ 0 0 1 1/ \ m30 m31 m32 (m33 + m30 * Vx + m31 * Vy + m32 * Vz)/
Also nein, es ist nicht eine Identitätsmatrix zurückkehrt, wo die Übersetzung Teil von M * V ersetzt wird, gibt es M‘ wo M * V war hinzugefügt zum Übersetzungsteil.
'glm :: translate' erstellt eine Übersetzungsmatrix, die mit 'V' übersetzt wird. Dann multipliziert es "M" mit der Übersetzungsmatrix und dies ist das Ergebnis. – Rabbid76
@ Rabbid76 Was passiert, wenn Sie die Wahl haben wollen, in welcher Reihenfolge die Matrizen multipliziert werden? Wie der Unterschied zwischen lokaler Übersetzung oder globaler Übersetzung. Erlaubt es diese Funktion nur, sie auf eine bestimmte Art zu multiplizieren? – Zebrafish