Lazarus - OpenGL 3.3 Tutorial - Matrix - Was ist eine Matrix

Aus DGL Wiki
Wechseln zu: Navigation, Suche

200px

Matrix - Was ist eine Matrix

Einleitung

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

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

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,

Xx Yx Zx x0
Xy Yy Zy y0
Xz Yz Zz z0
0 0 0 1


Für die Verschiebungen (Translate):

1 0 0 tx
0 1 0 ty
0 0 1 tz
0 0 0 1



Für die Skalierung (Scale):

sx 0 0 tx
0 sy 0 ty
0 0 sz tz
0 0 0 1



Für die Rotation A-Achse (RotateA):

1 0 0 0
0 cos(d) -sin(d) 0
0 sin(d) cos(d) 0
0 0 0 1



Für die Rotation B-Achse (RotateB):

cos(d) 0 sin(d) 0
0 1 0 0
-sin(d) 0 cos(d) 0
0 0 0 1



Für die Rotation C-Achse (RotateC):

cos(d) -sin(d) 0 0
sin(d) cos(d) 0 0
0 0 1 0
0 0 0 1



Die Anwendung der Matrix-Bibliothek ist sehr einfach, so das man nicht mal wissen muss, wie eine Matrix aufgebaut ist.

var
  Matrix : TMatrix;

begin
  Matrix.Indenty;                // Matrix Indenty setzen.

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

Ausser im ersten Beispiel werde ich nur noch diese Bibliothek verwenden. Somit werden die Beispiele sehr übersichtlich.


Autor: Mathias

Siehe auch