2013-05-16 37 views
6

Tôi có một vấn đề với mã OpenGL này:quay một đối tượng xung quanh một điểm cố định trong 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(); 

Những gì tôi nên làm gì để làm cho lượt robot của tôi xung quanh điểm mà tại đó nó hiện đang nằm và không xung quanh gốc? Tôi nghĩ rằng vấn đề nằm trong đoạn mã này.

Trả lời

9

Chỉ cần xoay vòng sau khi dịch. Thứ tự quan trọng.

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

Dude nó làm việc Cảm ơn nhưng vấn đề là vòng tròn xung quanh robot đang quay; Tôi muốn giảm bán kính của nó BTW tôi đang xoay robot ở 90 độ chỉ Đang chờ trả lời ur THANX asap – user2388112

+0

@ user2388112: Tôi không hoàn toàn chắc chắn những gì bạn có ý nghĩa, nhưng tôi nghĩ rằng điều này sẽ giúp: Bạn có thể xoay quanh bất kỳ điểm nào bạn muốn đầu tiên dịch sang điểm đó, sau đó xoay, sau đó dịch ngược lại (chỉ lấy âm của mỗi tọa độ). Nếu đó không phải là những gì bạn đang tìm kiếm, vui lòng [hỏi một câu hỏi mới về nó] (http://stackoverflow.com/questions/ask) vì những nhận xét này không phải là một nơi tốt để thảo luận mở rộng. – hammar

3

thử xoay sau khi dịch:

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 nó làm việc Cảm ơn nhưng vấn đề là vòng tròn xung quanh mà robot đang quay; tôi muốn giảm bán kính của nó BTW tôi đang xoay robot ở 90 độ chỉ Đang chờ trả lời ur THANX càng sớm càng tốt – user2388112

10

Ví dụ về xoay một đối tượng quanh tâm của nó dọc theo trục z:

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

Câu hỏi này là cũ, và đã được trả lời đầy đủ. Câu trả lời mới không thêm bất cứ điều gì hữu ích. Và cùng một vài dòng mã đã được gửi làm câu trả lời cho các câu hỏi cũ khác. –

+7

Câu trả lời này thêm một cái gì đó mới, cụ thể là sau khi quay, đối tượng cần phải được dịch lại vị trí ban đầu của nó. Điều đó không được đề cập trong các câu trả lời khác. –

0

Sử dụng này

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

nơi m và nđiểm trên đối tượng xung quanh mà bạn muốn xoayx và y là những điểm xung quanh mà bạn muốn xoay.

Các vấn đề liên quan