glRotate: Unterschied zwischen den Versionen
Flash (Diskussion | Beiträge) (Version Hochgeladen) |
K (Fixing typo) |
||
(18 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
= glRotate = | = glRotate = | ||
− | + | ||
+ | |||
== Name == | == Name == | ||
− | |||
'''glRotate''' - Multipliziert die aktuelle Matrix mit einer Rotationsmatrix. | '''glRotate''' - Multipliziert die aktuelle Matrix mit einer Rotationsmatrix. | ||
− | + | ||
+ | |||
== Delphi-Spezifikation == | == Delphi-Spezifikation == | ||
− | + | procedure '''glRotated'''(''angle'': TGLdouble; ''x'': TGLdouble; ''y'': TGLdouble; ''z'': TGLdouble); | |
− | procedure glRotated(angle: TGLdouble; x: TGLdouble; y: TGLdouble; z: TGLdouble); | + | procedure '''glRotatef'''(''angle'': TGLfloat; ''x'': TGLfloat; ''y'': TGLfloat; ''z'': TGLfloat); |
− | procedure glRotatef(angle: TGLfloat; x: TGLfloat; y: TGLfloat; z: TGLfloat); | + | |
+ | |||
− | |||
== Parameter == | == Parameter == | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | {| border="1" rules="all" | |
+ | ! ''angle'' | ||
+ | | Bestimmt den Winkel (in Grad) mit dem gedreht werden soll. | ||
+ | |- | ||
+ | ! ''x'', ''y'', ''z'' | ||
+ | | Spezifizieren die Koordinaten eines Vectors um den gedreht werden soll. | ||
+ | |} | ||
+ | |||
== Beschreibung == | == Beschreibung == | ||
− | + | [[Bild:Tutorial Matrix2 Rotate.png|344px|thumb|right|Rotation des Koordinatensystems durch den Aufruf von '''glRotatef(45,0,1,0);'''(''Auf Bild klicken zum vergrößern'')<br>Weitere Erklärungen im [[Tutorial Matrix2]].]] | |
Die '''glRotate''' Funktion multipliziert die aktuellen [[Matrix]] mit einer Rotationsmatrix. Durch diese Rotationsmatrix werden alle Punkte um ''angle'' Grad entgegen dem Uhrzeigersinn um eine Rotationsachse gedreht. <br> | Die '''glRotate''' Funktion multipliziert die aktuellen [[Matrix]] mit einer Rotationsmatrix. Durch diese Rotationsmatrix werden alle Punkte um ''angle'' Grad entgegen dem Uhrzeigersinn um eine Rotationsachse gedreht. <br> | ||
Die Parameter ''x'', ''y'', ''z'' geben den Endpunkt eines Vektors an, der im Koordinatenursprung beginnt (Ortsvektor). Um diesen Vektor werden die Punkte gedreht. (Er dient somit als Rotationsachse). <br> | Die Parameter ''x'', ''y'', ''z'' geben den Endpunkt eines Vektors an, der im Koordinatenursprung beginnt (Ortsvektor). Um diesen Vektor werden die Punkte gedreht. (Er dient somit als Rotationsachse). <br> | ||
Die aktuell gesetzte Matrix (siehe [[glMatrixMode]]) wird mit der Rotationsmatrix multipliziert. Die Ausgangsmatrix wird mit dem Ergebnis dieser Multiplikation ersetzt. <br> | Die aktuell gesetzte Matrix (siehe [[glMatrixMode]]) wird mit der Rotationsmatrix multipliziert. Die Ausgangsmatrix wird mit dem Ergebnis dieser Multiplikation ersetzt. <br> | ||
− | |||
− | glRotate: '''M''' := '''M'''*'''R'''; | + | Wenn '''M''' die aktuelle Matrix und '''R''' die Rotationsmatrix ist, dann bewirkt glRotate: '''M''' := '''M'''*'''R'''; |
+ | |||
+ | Die von OpenGL generierte Rotationsmatrix '''R''' ist folgendermaßen aufgebaut: | ||
+ | |||
+ | x²(1-c)+c xy(1-c)-zs xz(1-c)+ys 0 | ||
+ | |||
+ | yx(1-c)+zs y²(1-c)+c yz(1-c)-xs 0 | ||
+ | |||
+ | xz(1-c)-ys yz(1-c)+xs z²(1-c)+c 0 | ||
+ | |||
+ | 0 0 0 1 | ||
+ | |||
+ | Wobei gilt: | ||
+ | c = cos(''angle'') | ||
+ | s = sin(''angle'') | ||
+ | length(x,y,z) = 1 (Falls nicht, [[Normale#Normalisieren|normalisiert]] OpenGL den Vector vorher.) | ||
− | |||
== Hinweise == | == Hinweise == | ||
− | |||
Wenn der aktuelle Matrixmodus ([[glMatrixMode]]) '''GL_MODELVIEW''' oder '''GL_PROJECTION''' ist, werden alle Objekte die nach einem Aufruf von '''glRotate''' gezeichnet werden, gedreht gezeichnet. <br> | Wenn der aktuelle Matrixmodus ([[glMatrixMode]]) '''GL_MODELVIEW''' oder '''GL_PROJECTION''' ist, werden alle Objekte die nach einem Aufruf von '''glRotate''' gezeichnet werden, gedreht gezeichnet. <br> | ||
Benutzen Sie [[glPushMatrix]] bzw. [[glPopMatrix]] um die aktuelle Matrix zu sichern und wiederherzustellen. | Benutzen Sie [[glPushMatrix]] bzw. [[glPopMatrix]] um die aktuelle Matrix zu sichern und wiederherzustellen. | ||
+ | == Bespiele == | ||
+ | Weitere Beispiele zur Auswirkung von '''glRotate''' findet man im [[Tutorial_Matrix2#Auswirkungen_von_Matrixmanipulationen_-_oder_.22Wie_positioniere_ich_meine_Objekte_richtig.3F.22|Tutorial Matrix2]]. | ||
<br> | <br> | ||
+ | |||
+ | |||
+ | |||
== Fehlermeldungen == | == Fehlermeldungen == | ||
− | + | '''GL_Invalid_Operation''' wird generiert, wenn '''glRotate''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird. | |
− | GL_Invalid_Operation wird generiert wenn glRotate innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird. | + | |
+ | |||
− | + | ||
− | == | + | == Zugehörige Wertrückgaben == |
− | + | [[glGet]] mit Token '''GL_COLOR_MATRIX''' <br> | |
[[glGet]] mit Token '''GL_RENDER_MODE''' <br> | [[glGet]] mit Token '''GL_RENDER_MODE''' <br> | ||
[[glGet]] mit Token '''GL_MATRIX_MODE''' <br> | [[glGet]] mit Token '''GL_MATRIX_MODE''' <br> | ||
Zeile 57: | Zeile 72: | ||
[[glGet]] mit Token '''GL_TEXTURE_MATRIX''' <br> | [[glGet]] mit Token '''GL_TEXTURE_MATRIX''' <br> | ||
− | + | == Links == | |
+ | http://www.opengl.org/sdk/docs/man/xhtml/glRotate.xml | ||
+ | |||
== Siehe auch == | == Siehe auch == | ||
− | |||
[[glMatrixMode]], [[glMultMatrix]], [[glPushMatrix]], [[glScale]], [[glTranslate]] | [[glMatrixMode]], [[glMultMatrix]], [[glPushMatrix]], [[glScale]], [[glTranslate]] | ||
+ | |||
+ | [[Kategorie:GL|Rotate]] | ||
+ | [[Kategorie:GL1.0]] |
Aktuelle Version vom 24. November 2014, 21:32 Uhr
Inhaltsverzeichnis
glRotate
Name
glRotate - Multipliziert die aktuelle Matrix mit einer Rotationsmatrix.
Delphi-Spezifikation
procedure glRotated(angle: TGLdouble; x: TGLdouble; y: TGLdouble; z: TGLdouble); procedure glRotatef(angle: TGLfloat; x: TGLfloat; y: TGLfloat; z: TGLfloat);
Parameter
angle | Bestimmt den Winkel (in Grad) mit dem gedreht werden soll. |
---|---|
x, y, z | Spezifizieren die Koordinaten eines Vectors um den gedreht werden soll. |
Beschreibung
Die glRotate Funktion multipliziert die aktuellen Matrix mit einer Rotationsmatrix. Durch diese Rotationsmatrix werden alle Punkte um angle Grad entgegen dem Uhrzeigersinn um eine Rotationsachse gedreht.
Die Parameter x, y, z geben den Endpunkt eines Vektors an, der im Koordinatenursprung beginnt (Ortsvektor). Um diesen Vektor werden die Punkte gedreht. (Er dient somit als Rotationsachse).
Die aktuell gesetzte Matrix (siehe glMatrixMode) wird mit der Rotationsmatrix multipliziert. Die Ausgangsmatrix wird mit dem Ergebnis dieser Multiplikation ersetzt.
Wenn M die aktuelle Matrix und R die Rotationsmatrix ist, dann bewirkt glRotate: M := M*R;
Die von OpenGL generierte Rotationsmatrix R ist folgendermaßen aufgebaut:
x²(1-c)+c xy(1-c)-zs xz(1-c)+ys 0 yx(1-c)+zs y²(1-c)+c yz(1-c)-xs 0 xz(1-c)-ys yz(1-c)+xs z²(1-c)+c 0 0 0 0 1
Wobei gilt:
c = cos(angle) s = sin(angle) length(x,y,z) = 1 (Falls nicht, normalisiert OpenGL den Vector vorher.)
Hinweise
Wenn der aktuelle Matrixmodus (glMatrixMode) GL_MODELVIEW oder GL_PROJECTION ist, werden alle Objekte die nach einem Aufruf von glRotate gezeichnet werden, gedreht gezeichnet.
Benutzen Sie glPushMatrix bzw. glPopMatrix um die aktuelle Matrix zu sichern und wiederherzustellen.
Bespiele
Weitere Beispiele zur Auswirkung von glRotate findet man im Tutorial Matrix2.
Fehlermeldungen
GL_Invalid_Operation wird generiert, wenn glRotate innerhalb eines glBegin-glEnd Blocks aufgerufen wird.
Zugehörige Wertrückgaben
glGet mit Token GL_COLOR_MATRIX
glGet mit Token GL_RENDER_MODE
glGet mit Token GL_MATRIX_MODE
glGet mit Token GL_MODELVIEW_MATRIX
glGet mit Token GL_PROJECTION_MATRIX
glGet mit Token GL_TEXTURE_MATRIX
Links
http://www.opengl.org/sdk/docs/man/xhtml/glRotate.xml
Siehe auch
glMatrixMode, glMultMatrix, glPushMatrix, glScale, glTranslate