opengl glrotatef不能正常旋转

时间:2014-10-04 20:37:02

标签: c++ opengl graphics rotation

假设我在点(50,60,20)有一个绘图,我想在表格的每一边旋转它。 在下图的基础上,我想将绿色圆圈旋转到右侧,后侧和左侧。我的实施是  glRotatef(plate_rotate, 50, 0, 0);因为这将位于表格的中间,顶点x = 50.但是这不起作用。

glRotatef(90, 50, 0, 0); would not work. 


Table dimension 
int xL = 25;
int xR = 75;

int yT = 60;
int yB = 55;

int zF = 25;
int zB = -25;



static float tableTop[8][3] =
{
    { xL, yT, zF },
    { xR, yT, zF },
    { xR, yT, zB },
    { xL, yT, zB },
    //bottom
    { xL, yB, zF },
    { xR, yB, zF },
    { xR, yB, zB },
    { xL, yB, zB },

};

enter image description here

1 个答案:

答案 0 :(得分:2)

您需要将对象转换为原点,而不是执行您正在执行的操作... glRotatef中的x,y,z坐标是方向向量而不是空间坐标。 glRotatef (90, 1, 0, 0)glRotatef (90, 50, 0, 0)之间没有区别,因为两个向量在规范化时都是相同的。

请考虑这一点(注意这些事情发生的顺序):

glTranslatef ( 50.0f, 0.0f, 0.0f);               // 3. Move back
glRotatef    (plate_rotate, 1.0f, 0.0f, 0.0f);   // 2. Rotate around X-axis
glTranslatef (-50.0f, 0.0f, 0.0f);               // 1. Move X=50 to origin