De/Matrix3x4 t: Difference between revisions

From Valve Developer Community
< De
Jump to navigation Jump to search
(Created page with '{{otherlang2 |en=Matrix3x4_t }} {{toc-right}} '''<code>matrix3x4_t</code>''' ist eine C++ Klasse, die eine Matrix repräsentiert: ein mathema…')
 
m (obsolete language category)
 
(7 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{otherlang2
{{lang|title=matrix3x4_t|Matrix3x4_t}}
|en=Matrix3x4_t
}}
{{toc-right}}
{{toc-right}}


'''<code>matrix3x4_t</code>''' ist eine C++ Klasse,  die eine [[Wikipedia:Matrix (mathematics)|Matrix]] repräsentiert: ein mathematisches Konstrukt, welches Vektoren erlaubt [[Wikipedia:Transformation (geometry)|transformiert]] zu werden.
'''<code>matrix3x4_t</code>''' ist eine C++ Klasse,  die eine {{L|Wikipedia:Matrix (mathematics)|Matrix}} repräsentiert: ein mathematisches Konstrukt, welches Vektoren erlaubt {{L|Wikipedia:Transformation (geometry)|transformiert}} zu werden.


Matrizen werden hauptsächlich zum [[Wikipedia:Rotation matrix|rotieren]] von Vektoren benutzt, weil für Verschiebung und Skalierung [[Vector#Addition|Vektorenaddition]] und [[Vector#Multiplication|-multiplication]] sorgen. eine einzelne Matrix kann eine Transformation in allen 3 Modi speichern, was sie nützlich in Transformations-intensiven Operationen wie [[vertex:de|Vertex]]-Renderung und 3D Ansichtseinrichtung.
Matrizen werden hauptsächlich zum {{L|Wikipedia:Rotation matrix|rotieren}} von Vektoren benutzt, weil für Verschiebung und Skalierung {{L|Vector#Addition|Vektorenaddition}} und {{L|Vector#Multiplication|-multiplikation}} benötigt werden. Eine einzelne Matrix kann eine Transformation in allen 4 Modi beschreiben, was sie nützlich für transformationsintensive Operationen wie {{L|vertex|Vertexrasterisierung}} macht.


{{todo:de|Was ist <code>[[VMatrix:de|VMatrix]]</code> und welche Beziehung hat es zu dieser Klasse? (siehe [[Matrix3x4_t|Originaltext]])}}
{{todo:de|Was ist eine <code>{{L|VMatrix}}</code> und welche Beziehung hat sie zu dieser Klasse? (siehe {{L|Matrix3x4_t|Originaltext}})}}


== Funktionen ==
== Funktionen ==
Line 14: Line 12:
=== Generation ===
=== Generation ===


Matrixgeneration sollte am Besten bei den Source vorgefertigten Funktionen belassen werden:
Die Generierung einer Matrix sollte am Besten mit den von Source vordefinierten Funktionen durchgeführt werden:


<source lang=cpp>
<source lang=cpp>
Line 23: Line 21:
</source>
</source>


<code>MatrixMultiply()</code> wird zum kombinieren zweier Matrizen in eine verwendet. Man kann das beliebig oft machen.
<code>MatrixMultiply()</code> wird zum Kombinieren zweier Matrizen verwendet. Man kann das beliebig oft machen.


=== Anwendung ===
=== Anwendung ===


{{tip:de|Solange eine existierende Matrix nicht wiederverwendet wird, ist man daran, einen Vektor mit <code>[[VectorRotate():de|VectorRotate()]]</code> zu rotieren, welches Winkel direkt akzeptiert.}}
{{tip|Solange eine existierende Matrix nicht wiederverwendet wird, kann man auch einen Vektor mit <code>{{L|VectorRotate()}}</code> rotieren, da man sich hierdurch die Erstellung einer Matrix erspart.}}


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:
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:


<source lang=cpp>
<source lang=cpp>
Line 36: Line 34:
</source>
</source>


Es gibt eine Überladung von <code>[[VectorRotate():de|VectorRotate()]]</code, die ein <code>matrix3x4_t</code> akzeptiert. Es scheitnt sich genauso zu verhalten wie <code>VectorTransform()</code>.
Es gibt eine Überladung von <code>{{L|VectorRotate()}}</code>, die eine <code>matrix3x4_t</code> akzeptiert. Sie scheint sich genauso zu verhalten wie <code>VectorTransform()</code>.


=== Anderes / Nützliches ===
=== Anderes / Nützliches ===
Line 43: Line 41:
; <code>void MatrixPosition()</code>
; <code>void MatrixPosition()</code>
; <code>void MatrixVectors()</code>
; <code>void MatrixVectors()</code>
: Extrahiert Winkel und Vektoren aus einer Matrix. <code>MatrixAngles()</code> hat viele Überladungen. Es gibt keinen Weg, die Skalierung zu extrahieren.
: Extrahiert Winkel und Vektoren aus einer Matrix. <code>MatrixAngles()</code> hat viele Überladungen. Es gibt keinen Weg die Skalierung zu extrahieren.
; <code>void MatrixTranspose()</code>
; <code>void MatrixTranspose()</code>
: [[Wikipedia:Transpose|Transponiert]] eine Matrix. {{todo:de|Wofür ist das gut?}}
: {{L|Wikipedia:Transpose|Transponiert}} eine Matrix, spiegelt sie entlang der Diagonalen.
; <code>void MatrixInvert()</code>
; <code>void MatrixInvert()</code>
: Kehrt eine Matrix um, indem es es in die gegenüberliegenden Richtungen transformiert. Man kann auch <code>VectorITransform()</code> verwenden, um die Matrix anzuwenden.
: Kehrt eine Matrix um, wodurch sie in die gegenüberliegende Richtung transformiert. Man kann auch <code>VectorITransform()</code> verwenden, um die Matrix anzuwenden.
; <code>[[bool]] MatricesAreEqual()</code>
; <code>{{L|bool}} MatricesAreEqual()</code>
: An Stelle von (matrix1 == matrix2).
: An Stelle von (matrix1 == matrix2).
; <code>void MatrixCopy()</code>
; <code>void MatrixCopy()</code>
Line 55: Line 53:
== Siehe auch ==
== Siehe auch ==


* <code>[[Vector:de]]</code>
* <code>{{L|Vector}}</code>
* <code>[[QAngle:de]]</code>
* <code>{{L|QAngle}}</code>
* <code>[[Quaternion:de]]</code>
* <code>{{L|Quaternion}}</code>
* <code>[[RadianEuler:de]]</code>
* <code>{{L|RadianEuler}}</code>
 
{{ACategory|Variables}}
{{DISPLAYTITLE:matrix3x4_t}}
{{ACategory|Structures}}
[[Category:Variables:de]]
{{ACategory|Glossary}}
[[Category:Structures:de]]
[[Category:Glossary:de]]
[[Category:German]]
[[Category:German]]

Latest revision as of 03:16, 22 August 2024

English (en)Deutsch (de)Русский (ru)Translate (Translate)

matrix3x4_t ist eine C++ Klasse, die eine Matrix(en) repräsentiert: ein mathematisches Konstrukt, welches Vektoren erlaubt transformiert(en) zu werden.

Matrizen werden hauptsächlich zum rotieren(en) von Vektoren benutzt, weil für Verschiebung und Skalierung Vektorenaddition(en) und -multiplikation(en) benötigt werden. Eine einzelne Matrix kann eine Transformation in allen 4 Modi beschreiben, was sie nützlich für transformationsintensive Operationen wie Vertexrasterisierung(en) macht.

Zu erledigen: Was ist eine VMatrix(en) und welche Beziehung hat sie zu dieser Klasse? (siehe Originaltext(en))

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

Tip.pngTipp:Solange eine existierende Matrix nicht wiederverwendet wird, kann man auch einen Vektor mit VectorRotate()(en) 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()(en), 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(en) 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(en) MatricesAreEqual()
An Stelle von (matrix1 == matrix2).
void MatrixCopy()
Bestätigen:Anstelle von (matrix1 = matrix2).

Siehe auch