Lazarus - OpenGL 3.3 Tutorial - Matrix - Was ist eine Matrix: Unterschied zwischen den Versionen
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 | + | 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- | + | 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 | + | 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> | |
− | |||
− | Ausser im ersten Beispiel werde ich nur noch diese ''' | ||
<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
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
- Übersichtseite Lazarus - OpenGL 3.3 Tutorial