2013-05-16 4 views
6

Drehen habe ich ein Problem mit diesem openGL Code:ein Objekt um einen festen Punkt in opengl

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glPushMatrix(); // put current matrix on stack 

//glTranslatef(0.0f, 0.0f, 0.0f); 
//glTranslatef(-4*1.5, 0.0, 4*1.5); 

glRotatef(rotationAngle, 0.0f, 1.0f, 0.0f); // rotate the robot on its y-axis 
glTranslatef(xpos, ypos, zpos); 
DrawRobot(xpos, ypos, zpos); // draw the robot 
glPopMatrix(); 

Was sollte ich bei dem tun, um meine Roboter wiederum um den Punkt zu machen es zur Zeit um die Lage ist und nicht Ursprung? Ich denke, das Problem liegt in diesem Schnipsel.

Antwort

9

Einfach die Drehung nach der Übersetzung tun. Die Reihenfolge ist wichtig.

glTranslatef(xpos, ypos, zpos); 
glRotatef(rotationAngle, 0.0f, 1.0f, 0.0f); 
+0

Dude es funktioniert Danke, aber das Problem ist der Kreis um den Roboter rotiert; Ich möchte seinen Radius verringern BTW Ich rotiere Roboter bei 90 Grad Warten auf Ihre Antwort THANX so schnell wie möglich – user2388112

+0

@ user2388112: Ich bin mir nicht ganz sicher, was Sie meinen, aber ich denke, das sollte helfen: Sie können jeden beliebigen Punkt drehen zuerst zu diesem Punkt übersetzen, dann rotieren, dann zurück übersetzen (nehmen Sie einfach das Negativ jeder Koordinate). Wenn Sie nicht danach suchen, [bitte eine neue Frage stellen] (http://stackoverflow.com/questions/ask), da diese Kommentare kein guter Ort für längere Diskussionen sind. – hammar

3

versuchen rotierenden nach der Übersetzung:

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glPushMatrix(); // put current matrix on stack 

//glTranslatef(0.0f, 0.0f, 0.0f); 
//glTranslatef(-4*1.5, 0.0, 4*1.5); 

glTranslatef(xpos, ypos, zpos); 
glRotatef(rotationAngle, 0.0f, 1.0f, 0.0f); // rotate the robot on its y-axis 
DrawRobot(xpos, ypos, zpos); // draw the robot 
glPopMatrix(); 
+0

Dude es funktioniert Danke, aber das Problem ist der Kreis, um den sich der Roboter dreht; Ich möchte seinen Radius verringern BTW Ich rotiere Roboter um 90 Grad Nur auf Ihre Antwort warten THANX asap – user2388112

10

Beispiel für ein Objekt um seine Mitte entlang der z-Achse dreht:

glPushMatrix(); 

glTranslatef(250,250,0.0); // 3. Translate to the object's position. 

glRotatef(angle,0.0,0.0,1.0); // 2. Rotate the object. 

glTranslatef(-250,-250,0.0); // 1. Translate to the origin. 

// Draw the object 
glPopMatrix(); 
+2

Diese Frage ist alt und wurde bereits ausreichend beantwortet. Neue Antwort fügt nichts nützliches hinzu. Und die gleichen paar Zeilen Code wurden als Antwort auf andere alte Fragen eingereicht. –

+7

Diese Antwort fügt etwas Neues hinzu, nämlich dass nach der Drehung das Objekt in seine ursprüngliche Position zurückübersetzt werden muss. Das wurde in den anderen Antworten nicht erwähnt. –

0

verwenden

house(); 

glTranslatef(x, y, 0.0); // 3. Translate back to original 
glRotatef(theta, 0.0, 0.0, 1.0); // 2. Rotate the object around angle 
glTranslatef(-m, -n, 0.0); // 1. Move to origin 

house(); 

wo m und n sind die Punkt auf dem Objekt, um die Sie drehen möchten und x und y werden die Punkte, um die Sie wollen drehen.

Verwandte Themen