glLoadMatrix: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Beispiel-Quelltext)
K (Beispiel-Quelltext)
 
(18 dazwischenliegende Versionen von 11 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
= glLoadMatrix =
 
= glLoadMatrix =
  
<br>
 
== glLoadMatrix ==
 
----
 
'''glLoadMatrix''' - ersetzt die aktuelle Matrix durch eine Beliebige Matrix.
 
  
<br>
+
 
 +
== Name ==
 +
'''glLoadMatrix''' - ersetzt die aktuelle Matrix durch eine beliebige Matrix.
 +
 
 +
 
 +
 
 +
 
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
----
+
'''procedure''' glLoadMatrixd('''const''' ''m'': PGLdouble);
'''procedure''' glLoadMatrixd('''const''' ''m'': PGLdouble); <br>
+
'''procedure''' glLoadMatrixf('''const''' ''m'': PGLfloat);
'''procedure''' glLoadMatrixf('''const''' ''m'': PGLfloat);
+
 
 +
 
  
<br>
 
 
== Parameter ==
 
== Parameter ==
----
+
{| border="1" rules="all"
<table border=1 rules=all>
+
! ''m''
<tr>
+
| Ein Zeiger auf eine 4x4-Matrix, welche die aktuelle Matrix ersetzen soll.
<td>''m''</td>
+
|}
<td>Zeiger auf eine 4x4 Matrix welche die aktuelle Matrix ersetzen soll.</td>
+
 
</tr>
+
 
</table>
 
  
<br>
 
 
== Beschreibung ==  
 
== Beschreibung ==  
----
+
'''glLoadMatrix''' ersetzt die aktuelle Matrix durch die 4x4-Matrix, auf die ''m'' zeigt. Abhängig vom aktuellen Matrix-Modus ([[glMatrixMode]]) wird dadurch die Projektions-Matrix, die Modelview-Matrix oder die Texture-Matrix ersetzt (siehe dazu [[Matrix#Die_drei_OpenGL_Matrizen|"Die drei OpenGL-Matrizen"]]).
'''glLoadMatrix''' ersetzt die aktuelle Matrix durch die, über ''m'' definierte.<br>
+
 
Die aktuelle Matrix ist entweder die Projektionsmatrix, die Modelviewmatrix oder die Texturematrix (je nach aktuellem Matrixmodus ([[glMatrixMode]]) ). <br>
+
Der Parameter ''m'' zeigt auf eine 4x4-Matrix, welche spaltenweise Fließkommazahlen mit einfacher oder doppelter Genauigkeit (Single oder Double) enthält.
Der Parameter ''m'' zeigt auf eine 4x4 Matrix welche spaltenweise Fließkommazahlen mit einfacher oder doppelter Genauigkeit enthält (single oder double). <br>
+
 
Eine solche Matrix würde so gespeichert werden:
+
Die Matrix muß also in der folgenden Reihenfolge gespeichert sein:
===Beispiel-Quelltext===
+
 
{| border="1"
+
 
|+Als Ersatzt für [[glPushMatrix]] / [[glPopMatrix]]:
+
+-          -+
|
+
| 0  4  8  12 |
  <b>type</b>
+
| 1 5  9  13 |
  TVektor = <b>record</b> X,Y,Z,W:glFloat <b>end</b>;
+
| 2  6  10 14 |
  TMatrix = <b>array</b>[(mat_XAchse,mat_YAchse,mat_ZAchse,mat_Position)] <b>of</b> TVertex;
+
| 3  7  11 15 |
 +
  +-          -+
 +
 
 +
 
  
<b>var</b>
+
== Beispiel-Quelltext ==
  TempMatrix:TMatrix;
+
Als Ersatz für [[glPushMatrix]] und [[glPopMatrix]]:
<b>begin</b>
 
  glClearColor(0,0,0,0);
 
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
 
  glMatrixMode(GL_MODELVIEW);
 
  glLoadIdentity; 
 
  
   glTranslatef(-0.8,-0.5,0); <font color="#000080"><i>//Vorgebene Startposition</i></font>
+
<source lang="pascal">type
  glGetFloatv(GL_MODELVIEW_MATRIX,@TempMatrix);<font color="#000080"><i>//Matrix wird gespeichert
+
   TMatrix = array[0..3, 0..3] of glFloat;
 +
var
 +
  TempMatrix: TMatrix;
 +
begin
 +
glClearColor(0.0, 0.0, 0.0, 0.0);
 +
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
 +
glMatrixMode(GL_MODELVIEW);
 +
glLoadIdentity; 
  
  {Rotes Dreieck}</i></font>
+
glTranslatef(-0.8, -0.5, 0.0);                 // Vorgebene Startposition
  glColor3f(1,0,0);
+
  glGetFloatv(GL_MODELVIEW_MATRIX, @TempMatrix); // Matrix wird gespeichert
  gltranslatef(1,0,0);
 
  glbegin(GL_TRIANGLES);
 
    glvertex3f(1,0  ,-2);
 
    glvertex3f(0,1 ,-2);
 
    glvertex3f(0,0  ,-2);
 
  glend;
 
  glLoadMatrixf(@TempMatrix);<font color="#000080"><i>//Gespeicherte Matrix wird wieder geladen
 
  
  {Gründes Dreieck}</i></font>
+
// Rotes Dreieck
  glColor3f(0,1,0);
+
glColor3f(1.0, 0.0, 0.0);
  glbegin(GL_TRIANGLES);
+
glTranslatef(1.0, 0.0, 0.0);
    glvertex3f(1,0 ,-2);
+
glBegin(GL_TRIANGLES);
    glvertex3f(0,1 ,-2);
+
  glVertex3f(1.0, 0.0, -2.0);
    glvertex3f(0,0 ,-2);
+
  glVertex3f(0.0, 1.0, -2.0);
  glend;
+
  glVertex3f(0.0, 0.0, -2.0);
  <b>end;</b>
+
glEnd;
|}
+
  glLoadMatrixf(@TempMatrix); // Gespeicherte Matrix wird wieder geladen
  
<br>
+
// Grünes Dreieck
 +
glColor3f(0.0, 1.0, 0.0);
 +
glBegin(GL_TRIANGLES);
 +
  glVertex3f(1.0, 0.0, -2.0);
 +
  glVertex3f(0.0, 1.0, -2.0);
 +
  glVertex3f(0.0, 0.0, -2.0);
 +
glEnd;
 +
end;</source>
  
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
----
+
'''GL_INVALID_OPERATION''' wird generiert, wenn ''glLoadMatrix'' innerhalb eines [[glBegin]]-[[glEnd]]-Blocks aufgerufen wird.
GL_INVALID_OPERATION wird generiert wenn glLoadMatrix innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird.
+
 
<br>
+
 
 +
 
 
==  Zugehörige Wertrückgaben ==
 
==  Zugehörige Wertrückgaben ==
----
+
[[glGet]] mit Token [[glGet#GL_MATRIX_MODE|GL_MATRIX_MODE]]
[[glGet]] mit Token GL_MATRIX_MODE<br>
+
 
[[glGet]] mit Token GL_MODELVIEW_MATRIX<br>
+
[[glGet]] mit Token [[glGet#GL_MODELVIEW_MATRIX|GL_MODELVIEW_MATRIX]]
[[glGet]] mit Token GL_PROJECTION_MATRIX<br>
+
 
[[glGet]] mit Token GL_TEXTURE_MATRIX<br>
+
[[glGet]] mit Token [[glGet#GL_PROJECTION_MATRIX|GL_PROJECTION_MATRIX]]
 +
 
 +
[[glGet]] mit Token [[glGet#GL_TEXTURE_MATRIX|GL_TEXTURE_MATRIX]]
 +
 
 +
 
  
<br>
 
 
== Siehe auch ==
 
== Siehe auch ==
----
 
 
[[glLoadIdentity]], [[glMatrixMode]], [[glMultMatrix]], [[glPushMatrix]]
 
[[glLoadIdentity]], [[glMatrixMode]], [[glMultMatrix]], [[glPushMatrix]]
 +
 +
[[Kategorie:GL|LoadMatrix]]
 +
[[Kategorie:GL1.0|LoadMatrix]]

Aktuelle Version vom 22. Juni 2018, 17:36 Uhr

glLoadMatrix

Name

glLoadMatrix - ersetzt die aktuelle Matrix durch eine beliebige Matrix.



Delphi-Spezifikation

procedure glLoadMatrixd(const m: PGLdouble);
procedure glLoadMatrixf(const m: PGLfloat);


Parameter

m Ein Zeiger auf eine 4x4-Matrix, welche die aktuelle Matrix ersetzen soll.


Beschreibung

glLoadMatrix ersetzt die aktuelle Matrix durch die 4x4-Matrix, auf die m zeigt. Abhängig vom aktuellen Matrix-Modus (glMatrixMode) wird dadurch die Projektions-Matrix, die Modelview-Matrix oder die Texture-Matrix ersetzt (siehe dazu "Die drei OpenGL-Matrizen").

Der Parameter m zeigt auf eine 4x4-Matrix, welche spaltenweise Fließkommazahlen mit einfacher oder doppelter Genauigkeit (Single oder Double) enthält.

Die Matrix muß also in der folgenden Reihenfolge gespeichert sein:


+-           -+
| 0  4  8  12 |
| 1  5  9  13 |
| 2  6  10 14 |
| 3  7  11 15 |
+-           -+


Beispiel-Quelltext

Als Ersatz für glPushMatrix und glPopMatrix:

type
  TMatrix = array[0..3, 0..3] of glFloat;
var
  TempMatrix: TMatrix;
begin
 glClearColor(0.0, 0.0, 0.0, 0.0);
 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity;  

 glTranslatef(-0.8, -0.5, 0.0);                 // Vorgebene Startposition
 glGetFloatv(GL_MODELVIEW_MATRIX, @TempMatrix); // Matrix wird gespeichert

 // Rotes Dreieck
 glColor3f(1.0, 0.0, 0.0);
 glTranslatef(1.0, 0.0, 0.0);
 glBegin(GL_TRIANGLES);
   glVertex3f(1.0, 0.0, -2.0);
   glVertex3f(0.0, 1.0, -2.0);
   glVertex3f(0.0, 0.0, -2.0);
 glEnd;
 glLoadMatrixf(@TempMatrix); // Gespeicherte Matrix wird wieder geladen

 // Grünes Dreieck
 glColor3f(0.0, 1.0, 0.0);
 glBegin(GL_TRIANGLES);
   glVertex3f(1.0, 0.0, -2.0);
   glVertex3f(0.0, 1.0, -2.0);
   glVertex3f(0.0, 0.0, -2.0);
 glEnd;
end;

Fehlermeldungen

GL_INVALID_OPERATION wird generiert, wenn glLoadMatrix innerhalb eines glBegin-glEnd-Blocks aufgerufen wird.


Zugehörige Wertrückgaben

glGet mit Token GL_MATRIX_MODE

glGet mit Token GL_MODELVIEW_MATRIX

glGet mit Token GL_PROJECTION_MATRIX

glGet mit Token GL_TEXTURE_MATRIX


Siehe auch

glLoadIdentity, glMatrixMode, glMultMatrix, glPushMatrix