Lazarus - OpenGL 3.3 Tutorial - Matrix - Was ist eine Matrix: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
Zeile 7: Zeile 7:
 
Der zweite Grund, ich versteht das auch nicht Ganz, und somit will ich verhindern, das ich etwas falsches weiter gebe. :ops:<br>
 
Der zweite Grund, ich versteht das auch nicht Ganz, und somit will ich verhindern, das ich etwas falsches weiter gebe. :ops:<br>
 
<br>
 
<br>
Ich habe eine fertige Klasse für Matrixen, bei der ich die gängigen Funktionen beschreiben will.<br>
+
Ich habe eine fertige Bibliotheke für Matrixen, bei der ich die gängigen Funktionen beschreiben will.<br>
 
Es wird hier fast nur eine '''4x4-Matrix''' verwendet, die Standard mässig so auf gebaut ist:<br>
 
Es wird hier fast nur eine '''4x4-Matrix''' verwendet, die Standard mässig so auf gebaut ist:<br>
 
{| class="wikitable"
 
{| class="wikitable"
Zeile 99: Zeile 99:
 
|}
 
|}
 
<br><br>
 
<br><br>
Die Anwendung der '''Matrix-Klasse''' ist sehr einfach, so das man nicht mal wissen muss, wie eine Matrix aufgebaut ist.<br>
+
Die Anwendung der '''Matrix-Bibliothek''' ist sehr einfach, so das man nicht mal wissen muss, wie eine Matrix aufgebaut ist.<br>
 
<syntaxhighlight lang="pascal">var
 
<syntaxhighlight lang="pascal">var
 
   Matrix : TMatrix;
 
   Matrix : TMatrix;
  
 
begin
 
begin
   Matrix := TMatrix.Create;     // Matrix erzeugen und auf Indenty setzen.
+
   Matrix.Indenty;               // Matrix Indenty setzen.
  
 
   Matrix.xxxx(...);              // Modifikationen der Matrix.
 
   Matrix.xxxx(...);              // Modifikationen der Matrix.
   Matrix.Uniform(ID_im_Shader);  // Die Matrix dem Shader übergeben.
+
   Matrix.Uniform(ID_im_Shader);  // Die Matrix dem Shader übergeben.</syntaxhighlight>
 
+
Ausser im ersten Beispiel werde ich nur noch diese '''Bibliothek''' verwenden. Somit werden die Beispiele sehr übersichtlich.<br>
  Matrix.Free                    // Matrix frei geben.</syntaxhighlight>
 
Ausser im ersten Beispiel werde ich nur noch diese '''Klasse''' verwenden. Somit werden die Beispiele sehr übersichtlich.<br>
 
  
 
<br>Autor: [[Mathias]]
 
<br>Autor: [[Mathias]]
 
== Siehe auch ==
 
== Siehe auch ==
 
* Übersichtseite [[Lazarus - OpenGL 3.3 Tutorial]]
 
* Übersichtseite [[Lazarus - OpenGL 3.3 Tutorial]]

Version vom 23. März 2018, 21:28 Uhr

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