2012-03-24 1 views
3

Ich versuche, einen Würfel um die Achse zu drehen, und was ich tue ist:OpenGL glRotate und glTranslate bestellen

glTranslatef(0.0f, 0.0f, -60.0f); 
    glRotatef(angle, 0.0f, 1.0f, 0.0f); 

Ich erwarte es auf -60 und drehen sich um die y-Achse zu bewegen, im Kreis, aber stattdessen dreht es sich selbst um -60 Koordinate. Wenn ich es so schreibe:

glRotatef(angle, 0.0f, 1.0f, 0.0f); 
    glTranslatef(0.0f, 0.0f, -60.0f); 

Ich bekomme, was ich brauche, aber ich verstehe nicht warum? Warum machen sie das Gegenteil? Kann mir bitte jemand erklären.

+1

Matrix multiply ist nicht kommutativ ... –

Antwort

4

Wenn Sie eine Transformation anwenden, wird sie lokal angewendet. Stellen Sie sich das als Koordinatensystem vor, das Sie bewegen. Sie beginnen mit dem Koordinatensystem, das Ihre Ansicht darstellt, und anschließend transformieren Sie dieses Koordinatensystem relativ zu sich selbst. Im ersten Fall übersetzen Sie also das Koordinatensystem -60 entlang der Z-Achse des Koordinatensystems, und dann drehen Sie das Koordinatensystem um die neue Y-Achse am neuen Ursprung. Alles, was Sie zeichnen, wird dann in diesem neuen Koordinatensystem gezeichnet.

Dies bietet eine einfachere Möglichkeit, über Transformationen nachzudenken, wenn Sie einmal daran gewöhnt sind. Sie müssen nicht zwei getrennte Koordinatensysteme berücksichtigen: eines für das Koordinatensystem, auf das die Transformationen angewendet werden, und eines für das Koordinatensystem, in das die Geometrie gezeichnet wird.