glLoadMatrix: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (=Beispiel-Quelltext=)
K (→‎Beispiel-Quelltext)
 
(17 dazwischenliegende Versionen von 10 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ünes 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, 18: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