旋转后OpenGL的翻译方向不对

时间:2016-10-26 15:47:19

标签: opengl rotation

我正在使用OpenGL中的固定管道模式编写一个简单的演示

首先我写一些会画一个矩形的代码,左上角点(x1,y1)和右下角点(x2,y2)

        // Drawing here
    glPushMatrix();
    // Perform rotation first
    glTranslatef(x_cent, y_cent, 0.0f);
    glRotatef(angle, 0.0f, 0.0f, 1.0f);
    glScalef(scale, scale, 1.0f);
    // Set origin back to the screen center with the rotation set above
    glTranslatef(-x_cent, -y_cent, 0.0f);

    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
    glBegin(GL_QUADS);
    {
        glVertex2f(x1, y2);
        glVertex2f(x2, y2);
        glVertex2f(x2, y1);
        glVertex2f(x1, y1);
    }
    glEnd();

    // End of drawing
    glPopMatrix();

用箭头键调整角度值后,逆时针旋转45度,现在矩形将逆时针旋转45度。然后我用箭头键翻译它,它向上,向下,向左和向右移动。一切正常。

所以我写了一些代码,它将绘制一个通用的多边形。它与上面的代码类似。我只是在每对点之间绘制线条

for (int i = 0; i < p_size; i++)
{
    float x1 = point[i].x, x2 = point[(i + 1) % p_size].x;
    float y1 = point[i].y, y2 = point[(i + 1) % p_size].y;

    x1 = ((x1 + 0.5f) / winWidth) * 2.0f - 1.0f;
    x2 = ((x2 + 0.5f) / winWidth) * 2.0f - 1.0f;
    y1 = ((-y1 + 0.5f) / winHeight) * 2.0f + 1.0f;
    y2 = ((-y2 + 0.5f) / winHeight) * 2.0f + 1.0f;

    // Set the curent coord origin to this poly's center
    float x_cent = (left + right) / 2.0, y_cent = (top + down) / 2.0;
    float ratio = winWidth / winHeight;

    if (ratio > 1)
    {
        x1 *= ratio;
        x2 *= ratio;
    }

    else //if (ratio < 1)
    {
        y1 /= ratio;
        y2 /= ratio;
    }
    // Drawing here
    glPushMatrix();
    // Perform rotation first
    glTranslatef(x_cent, y_cent, 0.0f);
    glRotatef(angle, 0.0f, 0.0f, 1.0f);
    glScalef(scale, scale, 1.0f);
    // Set origin back to the screen center with the rotation set above
    glTranslatef(-x_cent, -y_cent, 0.0f);

    glBegin(GL_LINES);
    {
        glVertex2f(x1, y1);
        glVertex2f(x2, y2);
    }
    glEnd();

    // End of drawing
    glPopMatrix();
}

我用箭头键旋转多边形,工作正常,也就是逆时针旋转45度。但是在旋转之后,当我用向上键翻译它时,它不会向上移动,而是向45度方向移动。

但是为什么旋转后矩形在4个方向上正常平移?这两部分代码几乎相同,为什么会发生......

0 个答案:

没有答案