04 - Matrix

00 - Was ist eine Matrix

Der mathematische Teil von Matrix wird hier nicht behandelt, in diesem Tutorial geht es nur um die Anwendung davon.

Wen jemmand den mathematischen Teil interessiert, gibt es schon fertige Tutorials dazu.
Der zweite Grund, ich versteht das auch nicht Ganz, und somit will ich verhindern, das ich etwas falsches weiter gebe. :ops:

Ich habe eine fertige Klasse für Matrixen, bei der ich die gängigen Funktionen beschreiben will.
Es wird hier fast nur eine 4x4-Matrix verwendet, die Standard mässig so auf gebaut ist:
//matrix+
| 1 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 0 | 0 | 1 |
//matrix-
Die Abbildung zeigt eine Einheitsmatrix, die meisten OpenGL-Funktionen nehmen diese als Basis. Mit der 4x4-Matrix sind alle Bewegungen, Scalierungen, inklusive Perspektive möglich.
Hier eine kleine Einführung, die zeigt, welche Werte in der Matrix für die verschiedene Bewegungung verändert werden.

Die Matrix bildet die drei Achsen und eine Verschiebung ab. Die grossen Buschstaben zeigen die Achse, die kleinen die Position der Achsen.
Die hinterste Spalte gibt die Verschiebung an. Die unterste Zeile wird nur verändert bei perspektiven und bei Multiplikationen,
//matrix+
| Xx | Yx | Zx | x0 |
| Xy | Yy | Zy | y0 |
| Xz | Yz | Zz | z0 |
| 0 | 0 | 0 | 1 |
//matrix-

Für die Verschiebungen (Translate):
//matrix+
| 1 | 0 | 0 | tx |
| 0 | 1 | 0 | ty |
| 0 | 0 | 1 | tz |
| 0 | 0 | 0 | 1 |
//matrix-


Für die Skalierung (Scale):
//matrix+
| sx | 0 | 0 | tx |
| 0 | sy | 0 | ty |
| 0 | 0 | sz | tz |
| 0 | 0 | 0 | 1 |
//matrix-


Für die Rotation A-Achse (RotateA):
//matrix+
| 1 | 0 | 0 | 0 |
| 0 | cos(d) |-sin(d) | 0 |
| 0 | sin(d) | cos(d) | 0 |
| 0 | 0 | 0 | 1 |
//matrix-


Für die Rotation B-Achse (RotateB):
//matrix+
| cos(d) | 0 | sin(d) | 0 |
| 0 | 1 | 0 | 0 |
| -sin(d) | 0 | cos(d) | 0 |
| 0 | 0 | 0 | 1 |
//matrix-


Für die Rotation C-Achse (RotateC):
//matrix+
| cos(d) |-sin(d) | 0 | 0 |
| sin(d) | cos(d) | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 0 | 0 | 1 |
//matrix-


Die Anwendung der Matrix-Klasse ist sehr einfach, so das man nicht mal wissen muss, wie eine Matrix aufgebaut ist.
var
  Matrix : TMatrix;

begin
  Matrix := TMatrix.Create;      // Matrix erzeugen und auf Indenty setzen.

  Matrix.xxxx(...);              // Modifikationen der Matrix.
  Matrix.Uniform(ID_im_Shader);  // Die Matrix dem Shader übergeben.

  Matrix.Free                    // Matrix frei geben.
Ausser im ersten Beispiel werde ich nur noch diese Klasse verwenden. Somit werden die Beispiele sehr übersichtlich.



zurück