2D中的OpenGL旋转

时间:2010-12-06 09:36:12

标签: c++ opengl rotation 2d

我有一个简单的OpenGL应用程序,它显示一行。我将x1, y1, x2y2存储在全局变量中。

轮换功能使用feedback功能,讨论here和原始翻译方法,建议here。它的目的是围绕它的中心旋转一条线。

以下是代码:


void rotate( float theta )
{

    GLfloat* buff = new GLfloat[5];
    glFeedbackBuffer( 5, GL_2D, buff );
    glRenderMode( GL_FEEDBACK );

    int center_x = x1 + ( x2 - x1 )/2;
    int center_y = y1 + ( y2 - y1 )/2;

    glPushMatrix();
        glTranslatef( -center_x, -center_y, 0 );
        glRotatef( theta, 0, 0, 1 );
        glTranslatef( center_x, center_y, 0 );
        line();
    glPopMatrix();

    x1 = (int)buff[1];
    y1 = (int)buff[2];
    x2 = (int)buff[3];
    y2 = (int)buff[4];

    delete[] buff;
    glutPostRedisplay();
}

然而,这两个翻译似乎没有什么效果 - 该线仍然围绕窗口的左下角旋转。此外,如果线条不适合可见表面,则线条会被修剪(这不会在翻译出来的情况下发生 - 如果线条落在可见表面之外,线条就会拒绝移动。)

为什么这段代码不起作用?如何在2D中围绕它的中心(或任意点)旋转一条线?

1 个答案:

答案 0 :(得分:2)

在我看来,你正在向错误的方向进行翻译,并且原点位于左下角的视口之外。您希望将原点移动到要转换的点 - 因此如果原点位于左下角,则需要翻译+ center_x,+ center_y。旋转,平移(-center_x,-center_y),然后绘制。