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 -multiplication sorgen. eine einzelne Matrix kann eine Transformation in allen 3 Modi speichern, was sie nützlich in Transformations-intensiven Operationen wie Vertex-Renderung und 3D Ansichtseinrichtung.
VMatrix
und welche Beziehung hat es zu dieser Klasse? (siehe Originaltext)Funktionen
Generation
Matrixgeneration sollte am Besten bei den Source vorgefertigten Funktionen belassen 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 in eine verwendet. Man kann das beliebig oft machen.
Anwendung
Die mathematische Notation für eine Matrixtransform ist (vector * matrix). Source unterstützt diese Syntax nicht obwohl es trivial wäre, es hinzuzufügen, wenn man wollte und bietet statt dessen diese Funktionen an:
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()</code, die ein
matrix3x4_t
akzeptiert. Es scheitnt 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. Zu erledigen: Wofür ist das gut?
void MatrixInvert()
- Kehrt eine Matrix um, indem es es in die gegenüberliegenden Richtungen 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).
Siehe auch