Transformieren von Szenenknoten (GUI und Headless)
Knoten können per Scripting verschoben, skaliert, rotiert etc. werden. Dies ist durch die Verwendung von 4×4-Transformationsmatrizen vom Typ luxmath.Matrix möglich. Es gibt zwei Möglichkeiten der Transformation: relativ oder absolut. Eine relative Transformation bedeutet, die Transformation lokal anzuwenden, d. h. sie wird zuletzt in der Kette bestehender Transformationen multipliziert. Das heißt, wenn Sie relativ um (1,0,0) verschieben, wird der Knoten einfach entsprechend seiner Position um die x-Achse verschoben. Im Gegensatz dazu werden absolute Transformationen nicht auf die gleiche Weise verkettet, und eine absolute Verschiebung durch (1,0,0) positioniert den Knoten immer bei (1,0,0).
Bei Transformationen ist es wichtig, dass eine Identitätsmatrix (1s auf der Diagonale) als Basismatrix verwendet wird. Es wird auf folgende Weise erhalten:
>>> M = luxmath.Matrix().makeIdentity()
>>> print(M.dump())
| 1.00 0.00 0.00 0.00 |
| 0.00 1.00 0.00 0.00 |
| 0.00 0.00 1.00 0.00 |
| 0.00 0.00 0.00 1.00 |
Um einen Knoten um (5,0,1) zu verschieben:
>>> M = luxmath.Matrix().makeIdentity().translate(luxmath.Vector((5, 0, 3)))
>>> node.applyTransform(M)
>>> print(M.dump()) # Let's have a look at the matrix.
| 1.00 0.00 0.00 0.00 |
| 0.00 1.00 0.00 0.00 |
| 0.00 0.00 1.00 0.00 |
| 5.00 0.00 3.00 1.00 |
Wenn stattdessen ein absoluter Positionsabgleich vorgesehen ist, dann gehen Sie wie folgt vor:
>>> M = luxmath.Matrix().makeIdentity().translate(luxmath.Vector((5, 0, 3)))
>>> node.applyTransform(M, absolute = True)
Anmerkung
Nur auf Objektknoten können absolute Transformationen angewendet werden!
Weitere Informationen darüber, welche Transformationen möglich sind, finden Sie in der Dokumentation zu luxmath.Matrix.