使用glTranslatef和glRotatef移动和旋转?

时间:2010-10-11 05:07:41

标签: opengl

我正在编写一个绘制2D三角形的应用程序,并根据其位置围绕其z轴旋转它。当用鼠标拖动三角形时,它的中间(t1.tx,t1.ty)会不断变化。问题在于,当我将三角形拖动到另一个位置时,它不是停留在旋转的位置,而是围绕其中心点以圆形路径旋转。

我做错了什么?我希望它在它的位置旋转。

void drawTriangle() {
    glBegin(GL_POLYGON);

    glColor3f((float)200/255, (float)200/255, (float)200/255);
    glVertex2f(t1.tx, t1.ty + .2); // top point of triangle
    glVertex2f(t1.tx - .2, t1.ty - .2); // left point
    glVertex2f(t1.tx + .2, t1.ty - .2); // right point

    glEnd();
}

void display() {
    glClear(GL_COLOR_BUFFER_BIT);
    glLoadIdentity();

    glPushMatrix();
        glTranslatef(t1.tx, t1.ty, 0); // move matrix to triangle's current center point
        glRotatef(theta, 0, 0, 1.0); // rotate on z-axis
        drawTriangle();
    glPopMatrix();

    glutPostRedisplay();
    glutSwapBuffers();
}

2 个答案:

答案 0 :(得分:1)

自从我做了这些事以来,它已经成为一个整体,但根据你所说的,我的第一个猜测是交换glTranslatef和glRotatef的顺序。您想在模型空间中旋转,然后转换为世界空间。

答案 1 :(得分:1)

我修好了。问题是我正在翻译矩阵,然后绘制到已翻译的矩阵上。我所做的是在矩阵的中心绘制我的三角形,因此它在矩阵平移时仍然在其当前位置移动和旋转。谢谢你的帮助。