无法在openGL的中心周围旋转我的图像

时间:2014-11-22 13:39:11

标签: c++ opengl

我正在尝试围绕它的中心旋转图像。这是代码:

glPushMatrix();
    glTranslatef(-x, -y, 0);
    glRotatef(10, 0, 0, 1);
    glTranslatef(x, y, 0);
    glBindTexture(GL_TEXTURE_2D, img);
    glBegin(GL_QUADS);
    glTexCoord2i(0, 0);
    glVertex2i(x, y);
    glTexCoord2i(1, 0);
    glVertex2i(x+width, y);
    glTexCoord2i(1, 1);
    glVertex2i(x+width, y+height);
    glTexCoord2i(0, 1);
    glVertex2i(x, y + height);
    glEnd();
    glPopMatrix();

我到处读到将我的图像转换为旋转中心然后旋转并将其翻译回来。 但是,当我尝试一步一步地进行时,我发现当我翻译然后旋转时,它会随着图像一起移动旋转中心,因此它会在距离图像相同距离的屏幕外旋转,作为初始点从翻译前的初始图像旋转。 任何人都可以告诉我为什么会发生这种情况或如何解决它?

1 个答案:

答案 0 :(得分:1)

Matrix-Operations和glTranslatef / glRotatef以相反的顺序应用。所以当你的旋转中心是c =(x,y)时,你必须首先沿-c平移,然后旋转然后沿c平移。

在您的情况下,您必须将两个翻译行交换为以下内容:

glTranslatef(x, y, 0); //Translate back
glRotatef(10, 0, 0, 1); //Rotate
glTranslatef(-x, -y, 0); //Translate first along -c