2013-05-16 11 views
6

mam problem z tym kodem openGL:Obracanie obiektów wokół stałego punktu w 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(); 

Co należy zrobić, aby moja robota obrót wokół punktu, w którym znajduje się obecnie, a nie wokół pochodzenie? Myślę, że problem leży w tym fragmencie.

Odpowiedz

9

Po prostu wykonaj obrót po tłumaczeniu. Kolejność ma znaczenie.

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

Dude to działało. Dzięki, ale problemem jest okrąg wokół którego obraca się robot; Chcę zmniejszyć jego promień BTW Jestem obracającym się robotem tylko o 90 stopni Oczekując na odpowiedź ur. THANX asap – user2388112

+0

@ user2388112: Nie jestem do końca pewien co masz na myśli, ale myślę, że powinno to pomóc: Możesz obracać się w dowolnym punkcie przez najpierw tłumacz do tego punktu, następnie obracaj, potem tłumacz z powrotem (po prostu weź ujemne z każdej współrzędnej). Jeśli to nie jest to, czego szukasz, proszę [zadaj nowe pytanie] (http://stackoverflow.com/questions/ask), ponieważ te komentarze nie są dobrym miejscem na dłuższą dyskusję. – hammar

3

obróć po translacji:

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 to działało. Dzięki, ale problemem jest okrąg, wokół którego obraca się robot; Chcę zmniejszyć jego promień BTW Obracam robota tylko o 90 stopni Oczekuję ur odpowiedzi THANX asap – user2388112

10

Przykład obracania obiektu wokół jego środka wzdłuż osi:

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

To pytanie jest stare i zostało już wystarczająco odebrane. Nowa odpowiedź nie dodaje niczego użytecznego. Te same linie kodu zostały przesłane jako odpowiedź na inne stare pytania. –

+7

Ta odpowiedź dodaje coś nowego, a mianowicie, że po obrocie obiekt musi zostać przetłumaczony z powrotem na pierwotną pozycję. Tego nie wymieniono w innych odpowiedziach. –

0

pomocą tej

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(); 

gdzie m i n są punktem na obiekt, wokół którego chcesz obrócić i xiypunkty, wokół którego chcesz obrócić.