Matrix: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (=Links=)
K (=Links=)
Zeile 80: Zeile 80:
 
===Links===
 
===Links===
 
*[http://www.delphigl.com/script/do_show.php?name=math1&action=2 Mathe Nachhilfe Tutorial von DelphiGL.com]
 
*[http://www.delphigl.com/script/do_show.php?name=math1&action=2 Mathe Nachhilfe Tutorial von DelphiGL.com]
*[http://www-user.tu-chemnitz.de/~pester/Lehre/CompGeo.pdf Recht umfangreiches, gut verständliches Script zum Thema "Computer Geometrie"]
+
*[http://www-user.tu-chemnitz.de/~pester/Lehre/CompGeo.pdf Recht umfangreiches, gut verständliches Script zum Thema "Computer Geometrie" (PDF)]

Version vom 20. Juli 2004, 13:15 Uhr

Matrix(Plural Matrizen)

Begriffs-Erklärung

Eine Matrix ist eigentlich nichts anderes als das was man in der Programmierung als zwei demensionales Array(Feld) versteht. Allerdings wird diese tabellenartige Schreibweise gerne für schöne Rechnungen genutzt


Die drei OpenGL Matrizen

In OpenGL gibt es drei Matrizen welche alle mit Hilfe von glTranslate, glScale, glRotate bearbeitet werden können. Welche Matrix von diesen Funktionen beeinfusst werden soll, kann mit glMatixMode festgelegt werden.

Das sind die 3 Matrizen:

GL_PERSPECTIVE

Sollte nur für die festlegung der Perspective genutzt werden.

GL_MODELVIEW

Legt Position und Größe des zu zeichnenden Primitiven fest

GL_TEXTURE

Beinhaltet Informationen wie Texturen dargestellt werden.


Aufbau einer OpenGL-Matrix

Möchte man mit OpenGL an einer bestimmten Stelle etwas zeichnen, so kann man mit Hilfe von glTranslate und glRotate die Modelview-Matrix so manipulieren, dass etwa der mit glVertex übergebene Eckpunkt (0/0/0) im Weltkoordinaten System nicht mehr in der Mitte liegt. Alle Punkte erscheinen scheinbar in einen zweiten Koordinaten System welches etwas verdreht,vegrößert oder verrutsch liegen kann.

Dieses zweite Koordinaten-System wird durch eine Matrix (einem zwei demensionenlen Array mit vier Spalten und Zeilen) festgehalten.

Damit besser verstanden werden kann wie dies funktioniert, wird die Funktionsweise erstmal anhand eines zwei demensionalen Koordinaten System demonstiert.

Möchte man in einem einfachen 2D Koordiaten-System den Punkt (X/Y) antragen, so hängt man X mal den Vektor der X-Achse aneinander, und Y mal den Vektor der Y-Achse.

KoordinatenSystemA.png

Um die Lage und Größe eines Koordianten System zu beschreiben werden also einmal die Vektoren benötiget die 1 Längen Einheit meiner Achsen beschreiben, sowie ein Vektor der ihre Position in Anhängigkeit zum übergeordneten Koordianten System beschreibt.

KoordinatenSystemB.png


Da die Vektoren in OpenGL nicht wie vielleicht vermutet aus 3, sondern aus 4 Teilen bestehen benötigt, haben Vektoren neben X,Y und Z Werten noch einen W-Wert welcher aber weniger zu interessieren hat.

Alle 4 Vektoren sind in jeweils einer Spalte der Matrix enthalten:

X-Achse Y-Achse Z-Achse Position
X X X X
Y Y Y Y
Z Z Z Z
W W W W

Eine Matrix könnte man also als folgendes Format mit glGetFloatv auslesen:

TVektor = record X,Y,Z,W:glFloat end;
TMatrix = array[(mat_XAchse,mat_YAchse,mat_ZAchse,mat_Position)]of TVektor;
PMatrix = ^TMatrix;


Weitere Informationen

Die Inhalt der einzelen Matrizen kann man abfragen, indem man glGet mit einem dieser drei Parameter aufruft.

  • GL_MODELVIEW_MATRIX
  • GL_PROJECTION_MATRIX
  • GL_TEXTURE_MATRIX

Möchte man eine Matrix auf einen bestimmten wert seltzen so benutzt man glLoadMatrix.

Die aktuelle Matrix erhält man durch den aufruf von glGet mit dem Argument:

  • GL_MATRIX_MODE


Links