matrix3x4_t
matrix3x4_t
ist eine C++ Klasse, die eine Matrix repräsentiert: ein mathematisches Konstrukt, welches Vektoren erlaubt transformiert zu werden.
Matrizen werden hauptsächlich zum rotieren von Vektoren benutzt, weil für Verschiebung und Skalierung Vektorenaddition und -multiplikation benötigt werden. Eine einzelne Matrix kann eine Transformation in allen 4 Modi beschreiben, was sie nützlich für transformationsintensive Operationen wie Vertexrasterisierung macht.
VMatrix
und welche Beziehung hat sie zu dieser Klasse? (siehe Originaltext )Funktionen
Generation
Die Generierung einer Matrix sollte am Besten mit den von Source vordefinierten Funktionen durchgeführt werden:
void AngleMatrix( QAngle angle, matrix_3x4_t& out ); // Rotation; kann auch Quaternionen oder Bogenmaße verwenden.
void PositionMatrix( Vector position, matrix3x4_t& out ); // Verschiebung
void AngleMatrix( QAngle angle, Vector position, matrix3x4_t& out ); // Rotation + Verschiebung
void SetScaleMatrix( float scale, matrix3x4_t& out ); // Skalierung
MatrixMultiply()
wird zum Kombinieren zweier Matrizen verwendet. Man kann das beliebig oft machen.
Anwendung
VectorRotate()
rotieren, da man sich hierdurch die Erstellung einer Matrix erspart.Die mathematische Notation für eine Matrixtransformation ist (vector * matrix). Source unterstützt diese Syntax nicht obwohl es trivial wäre dies hinzuzufügen. Stattdessen werden folgende Funktionen angeboten:
void VectorTransform( Vector in1, matrix3x4_t in2, Vector& out );
void VectorITransform( Vector in1, matrix3x4_t in2, Vector& out ); // 'Gegenteil' des oberen
Es gibt eine Überladung von VectorRotate()
, die eine matrix3x4_t
akzeptiert. Sie scheint sich genauso zu verhalten wie VectorTransform()
.
Anderes / Nützliches
void MatrixAngles()
void MatrixPosition()
void MatrixVectors()
- Extrahiert Winkel und Vektoren aus einer Matrix.
MatrixAngles()
hat viele Überladungen. Es gibt keinen Weg die Skalierung zu extrahieren. void MatrixTranspose()
- Transponiert eine Matrix, spiegelt sie entlang der Diagonalen.
void MatrixInvert()
- Kehrt eine Matrix um, wodurch sie in die gegenüberliegende Richtung transformiert. Man kann auch
VectorITransform()
verwenden, um die Matrix anzuwenden. bool MatricesAreEqual()
- An Stelle von (matrix1 == matrix2).
void MatrixCopy()
- Bestätigen:Anstelle von (matrix1 = matrix2).