<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://wiki.delphigl.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pheawiki</id>
		<title>DGL Wiki - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.delphigl.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pheawiki"/>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php/Spezial:Beitr%C3%A4ge/Pheawiki"/>
		<updated>2026-04-21T00:08:04Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.27.4</generator>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Matrix&amp;diff=9435</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Matrix&amp;diff=9435"/>
				<updated>2005-09-07T11:39:17Z</updated>
		
		<summary type="html">&lt;p&gt;Pheawiki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Matrix(Plural Matrizen)==&lt;br /&gt;
&lt;br /&gt;
===Begriffs-Erklärung===&lt;br /&gt;
&lt;br /&gt;
Eine Matrix ist eigentlich nichts anderes als das was man in der Programmierung als zwei dimensionales Array(Feld) versteht. Allerdings wird diese tabellenartige Schreibweise gerne für schöne Rechnungen genutzt. Mathematisch beschreiben Matrizen lineare Abbildungen (siehe [http://de.wikipedia.org/wiki/Lineare_Abbildung Wikipedia])&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Die drei OpenGL Matrizen===&lt;br /&gt;
&lt;br /&gt;
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 [[glMatrixMode]] festgelegt werden.&lt;br /&gt;
&lt;br /&gt;
Das sind die 3 Matrizen:&lt;br /&gt;
&lt;br /&gt;
====GL_PERSPECTIVE====&lt;br /&gt;
&lt;br /&gt;
Sollte nur für die Festlegung der Perspektive genutzt werden.&lt;br /&gt;
&lt;br /&gt;
====GL_MODELVIEW==== &lt;br /&gt;
&lt;br /&gt;
Legt Position und Größe des zu zeichnenden Primitiven fest&lt;br /&gt;
&lt;br /&gt;
====GL_TEXTURE====&lt;br /&gt;
&lt;br /&gt;
Beinhaltet Informationen wie Texturen dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aufbau einer OpenGL-Matrix===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Dieses zweite Koordinaten-System wird durch eine Matrix (einem zwei dimensionenlen Array mit vier Spalten und Zeilen) festgehalten.&lt;br /&gt;
&lt;br /&gt;
Damit besser verstanden werden kann wie dies funktioniert, wird die Funktionsweise erstmal anhand eines zwei dimensionalen Koordinaten System demonstiert.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Bild:KoordinatenSystemA.png]]&lt;br /&gt;
&lt;br /&gt;
Um die Lage und Größe eines Koordinatensystems zu beschreiben werden also einmal die Vektoren benötiget die 1 '''L'''ängen '''E'''inheit meiner Achsen beschreiben, sowie ein Vektor der ihre Position in Anhängigkeit zum übergeordneten Koordinatensystems beschreibt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:KoordinatenSystemB.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Alle 4 Vektoren sind in jeweils einer Spalte der Matrix enthalten:&lt;br /&gt;
{|&lt;br /&gt;
! X-Achse !! Y-Achse !! Z-Achse !! Position&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| X || X || X || X || |&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Y || Y || Y || Y || |&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Z || Z || Z || Z || |&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| W || W || W || W || |&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Folgendes Format könnte man also nutzen, um eine Matrix mit [[glGetFloatv]] auszulesen oder mit [[glLoadMatrix]] zu setzen.&lt;br /&gt;
&lt;br /&gt;
 TVektor = &amp;lt;b&amp;gt;record&amp;lt;/b&amp;gt; X,Y,Z,W:glFloat &amp;lt;b&amp;gt;end&amp;lt;/b&amp;gt;;&lt;br /&gt;
 TMatrix = &amp;lt;b&amp;gt;array&amp;lt;/b&amp;gt;[(mat_XAchse,mat_YAchse,mat_ZAchse,mat_Position)]&amp;lt;b&amp;gt;of&amp;lt;/b&amp;gt; TVektor;&lt;br /&gt;
 PMatrix = ^TMatrix;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Berechnungen===&lt;br /&gt;
&lt;br /&gt;
====Anwenden einer Matrix auf einen Vektor/Punkt====&lt;br /&gt;
&lt;br /&gt;
Möchte man zum Beispiel wissen wie ein Punkt im übergeordneten Koordinaten-System aussieht, so kann man das ganz einfach ausrechnen (wie dies zu Berechnen ist kann der obrigen Zeichung entnommen werden (w wird nicht beachtet)):&lt;br /&gt;
&lt;br /&gt;
 ErgebnisVektor=X*XAchsenVektor + Y*YAchsenVektor + Z*ZAchsenVektor + PositionsVektor&lt;br /&gt;
&lt;br /&gt;
Ausführlich sähe dies dann so aus:&lt;br /&gt;
&lt;br /&gt;
 Ergebnis.X=X*XAchse.X + X*YAchse.X + X*ZAchse.X + Position.X;&lt;br /&gt;
 Ergebnis.Y=Y*XAchse.Y + Y*YAchse.Y + Y*ZAchse.Y + Position.Y;&lt;br /&gt;
 Ergebnis.Z=Z*XAchse.Z + Y*YAchse.Z + Y*ZAchse.Z + Position.Z;&lt;br /&gt;
&lt;br /&gt;
====Matrizen multiplizieren====&lt;br /&gt;
&lt;br /&gt;
Das Multiplizieren, also das Hintereinanderausführen von zwei Matrizen ist einfach, wenn man weis, wie man Vektoren auf Matrizen anwendet und dass (in OpenGL) Matrizen aus in die Spalten geschriebenen Vektoren bestehen. Man braucht nämlich nur auf alle Spalten einer Matrix die andere Matrix anwenden und erhält so eine neue Matrix. Wichtig bei der Matrizenmultiplikation ist auch die &amp;quot;Reihenfolge&amp;quot;, also welche Matrix auf die Spalten der jeweils Anderen angewendet wird (erst drehen dann verschieben oder erst verschieben und dann drehen macht einen Unterschied). &lt;br /&gt;
&lt;br /&gt;
===Die Identitätsmatrix===&lt;br /&gt;
Ist eine Matrix mit folgenden Werten:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|rowspan=4 valign=&amp;quot;middle&amp;quot; |&amp;lt;font style=&amp;quot;font-size:30pt&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&lt;br /&gt;
| 1 || 0 || 0 || 0&lt;br /&gt;
|rowspan=4 valign=&amp;quot;middle&amp;quot; |&amp;lt;font style=&amp;quot;font-size:30pt&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;   &lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 1 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 0 || 1&lt;br /&gt;
|-   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wendet man auf einen Vektor eine solche Matrix an, so bleibt der Vektor gleich.&lt;br /&gt;
&lt;br /&gt;
Um die aktuelle Matrix zur einer Identitätsmatrix zu machen, ruft man [[glLoadIdentity]] auf.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Zum leichteren Verständnis===&lt;br /&gt;
''Dieser Abschnitt ist nicht für fortgeschrittene 3D Entwickler gedacht, sollte aber Anfängern die immer noch nicht wissen, was Matrizen eigentlich in OpenGL machen einen leichteren Einblick verschaffen.''&lt;br /&gt;
&lt;br /&gt;
Um sich Matrizen in OpenGL leichter vorzustellen, kann man folgendes Bild benutzen:&lt;br /&gt;
&lt;br /&gt;
* Die 3D-Welt ist in einer Art Glaskasten abgelegt in dem es keine Physik gibt (Dinge können in der Luft schweben u.ä.).&lt;br /&gt;
* Matrizen sind Maschinen/Greifarme.&lt;br /&gt;
* Matrizen sind die einzige Möglichkeit in den Glaskasten hinein zu greifen.&lt;br /&gt;
&lt;br /&gt;
Wie wir weiter oben bereits gelernt haben sind Matrizen ja eigentlich Tabellen mit Zahlen. Diese Zahlen sind die Stellschrauben an unseren &amp;quot;Greifarmen&amp;quot;. Mit diesen Stellschrauben können wir die Greifarme im Glaskasten positionieren. Durch den OpenGL-Befehl [[glMatrixMode]] können wir auswählen welchen der beiden Arme wir gerade steuern. &lt;br /&gt;
&lt;br /&gt;
'''ModelView - Der Objektmanipulator'''&lt;br /&gt;
: Wird diese Matrix auf ein Objekt angewendet, ändert sich je nach Einstellung der Matrix dessen Position, Ausrichtung, Größe usw. (Man kann sogar den kompletten Glaskasten damit verschieben.)  (Beispiel: Wirft man einen Würfel in eine Drehungsmatrix, kommt am Ende ein gedrehter Würfel raus.)&lt;br /&gt;
&lt;br /&gt;
'''PerspectivMatrix - Der Kameraarm'''&lt;br /&gt;
: Diese Maschine ist nur für die Ausgabe zuständig. Man kann über die Stellschrauben einstellen, welche Art der Projektion (Parallel-, Perspektivisch-,...), und von welcher Position/Rotation man die Welt sehen will.&lt;br /&gt;
&lt;br /&gt;
Wer nun auf den Geschmack gekommen ist und mittels [[glLoadMatrix]] mal selber die Stellschrauben einer der beiden Matrizen ändern möchte, der sollte sich das sehr gute '''Mathe Script''' zum Thema '''Computer Geometrie''' einmal ansehen (siehe Links). Das eben vermittelte Bild mag zwar helfen. Die Theorie muss aber verstanden werden um damit arbeiten zu können.&lt;br /&gt;
&lt;br /&gt;
===Zugehörige Wertrückgaben===&lt;br /&gt;
&lt;br /&gt;
Inhalt einer Matrix:&lt;br /&gt;
*[[glGet#GL_MODELVIEW_MATRIX|glGet]] mit GL_MODELVIEW_MATRIX&lt;br /&gt;
*[[glGet#GL_PROJECTION_MATRIX|glGet]] mit GL_PROJECTION_MATRIX&lt;br /&gt;
*[[glGet#GL_TEXTURE_MATRIX|glGet]] mit GL_TEXTURE_MATRIX&lt;br /&gt;
&lt;br /&gt;
Aktive Matrix:&lt;br /&gt;
*[[glGet#GL_MATRIX_MODE|glGet]] mit GL_MATRIX_MODE&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Siehe auch===&lt;br /&gt;
[[glMatrixMode]], [[glGet]], [[glLoadIdentity]], [[glLoadMatrix]], [[glTranslate]], [[glRotate]], [[glScale]]&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
*[http://www.delphigl.com/script/do_show.php?name=math1&amp;amp;action=2 Mathe Nachhilfe Tutorial von DelphiGL.com]&lt;br /&gt;
*[http://www-user.tu-chemnitz.de/~pester/Lehre/CompGeo.pdf Recht umfangreiches, gut verständliches Script zum Thema &amp;quot;Computer Geometrie&amp;quot; (PDF)]&lt;/div&gt;</summary>
		<author><name>Pheawiki</name></author>	</entry>

	</feed>