glLoadMatrix: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Bot: konvertiere/korrigiere <BR>)
K (Beispiel-Quelltext: Pascaltags benutzt)
Zeile 40: Zeile 40:
 
===Beispiel-Quelltext===
 
===Beispiel-Quelltext===
 
Als Ersatz für [[glPushMatrix]] / [[glPopMatrix]]:
 
Als Ersatz für [[glPushMatrix]] / [[glPopMatrix]]:
{| border="0"
+
<pascal>type
|
+
  TVektor = record  
'''type'''
+
            X,Y,Z,W : glFloat  
  TVektor = '''record'''
+
  end;
            X,Y,Z,W : glFloat  
+
  TMatrix = array[(mat_XAchse,mat_YAchse,mat_ZAchse,mat_Position)] of TVektor;
  '''end''';
 
  TMatrix = '''array'''[(mat_XAchse,mat_YAchse,mat_ZAchse,mat_Position)] '''of''' TVektor;<br />
 
'''var'''
 
  TempMatrix:TMatrix;
 
'''begin'''
 
  glClearColor(0,0,0,0);
 
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
 
  glMatrixMode(GL_MODELVIEW);
 
  glLoadIdentity;  <br />
 
  glTranslatef(-0.8,-0.5,0); <font color="#000080">''//Vorgebene Startposition''</font>
 
  glGetFloatv(GL_MODELVIEW_MATRIX,@TempMatrix);<font color="#000080"><i> //Matrix wird gespeichert<br />
 
  {Rotes Dreieck}</i></font>
 
  glColor3f(1,0,0);
 
  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<br />
 
  {Grünes Dreieck}</i></font>
 
  glColor3f(0,1,0);
 
  glbegin(GL_TRIANGLES);
 
    glvertex3f(1,0  ,-2);
 
    glvertex3f(0,1  ,-2);
 
    glvertex3f(0,0  ,-2);
 
  glend;
 
'''end;'''
 
|}
 
  
 +
var
 +
  TempMatrix:TMatrix;
 +
begin
 +
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); //Vorgebene Startposition
 +
glGetFloatv(GL_MODELVIEW_MATRIX,@TempMatrix); //Matrix wird gespeichert
  
 +
{Rotes Dreieck}
 +
glColor3f(1,0,0);
 +
glTranslatef(1,0,0);
 +
glBegin(GL_TRIANGLES);
 +
  glVertex3f(1,0  ,-2);
 +
  glVertex3f(0,1  ,-2);
 +
  glVertex3f(0,0  ,-2);
 +
glEnd;
 +
glLoadMatrixf(@TempMatrix); //Gespeicherte Matrix wird wieder geladen
 +
 +
{Grünes Dreieck}
 +
glColor3f(0,1,0);
 +
glBegin(GL_TRIANGLES);
 +
  glVertex3f(1,0  ,-2);
 +
  glVertex3f(0,1  ,-2);
 +
  glVertex3f(0,0  ,-2);
 +
glEnd;
 +
end;</pascal>
  
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==

Version vom 8. Juni 2006, 13:15 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 / glPopMatrix:

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

var
  TempMatrix:TMatrix;
begin
 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); //Vorgebene Startposition
 glGetFloatv(GL_MODELVIEW_MATRIX,@TempMatrix); //Matrix wird gespeichert

 {Rotes Dreieck}
 glColor3f(1,0,0);
 glTranslatef(1,0,0);
 glBegin(GL_TRIANGLES);
   glVertex3f(1,0  ,-2);
   glVertex3f(0,1  ,-2);
   glVertex3f(0,0  ,-2);
 glEnd;
 glLoadMatrixf(@TempMatrix); //Gespeicherte Matrix wird wieder geladen

 {Grünes Dreieck}
 glColor3f(0,1,0);
 glBegin(GL_TRIANGLES);
   glVertex3f(1,0  ,-2);
   glVertex3f(0,1  ,-2);
   glVertex3f(0,0  ,-2);
 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