使用鼠标在openGL中移动绘图

时间:2013-11-09 22:58:34

标签: opengl 2d mouse glut glu

我试图在按住鼠标左键的同时在openGL中移动图像。 我不是试图拖动一个物体,只是移动整个画面。它是一个分形图的二维绘图,我被告知我可以使用gluortho2d但我找不到任何信息或类似的尝试如何做到这一点。 我假设像

void mouse_callback_func(int button, int state, int x, int y)
{
    if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
    gluOrtho2D(x-250.0, x+250.0, y-250.0,y+250.);
glutPostRedisplay();
}  

对于500x500的窗口,但它不起作用。我离开的那一刻,窗口变成空白。 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

gluOrtho2D修改当前矩阵。它旨在与glMatrixMode(GL_PROJECTION)一起使用,例如:

glMatrixMode(GL_PROJECTION); //start editing the projection matrix
glLoadIdentity(); //remove current projection
gluOrtho2D(...); //create new one
glMatrixMode(GL_MODELVIEW); //back to editing the modelview matrix

设置相机概念可能更简单......

float cameraX, cameraY;
int lastMouseX, lastMouseY;

void mouse_callback_func(int button, int state, int x, int y)
{
    int dx = x - lastMouseX;
    int dy = y - lastMouseY;
    const float speed = 0.1f;
    if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
    {
        cameraX += dx * speed; //or -=, depending on which direction feels more natural to you
        cameraY -= dy * speed; //-= as mouse origin is top left, so +y is moving down
        glutPostRedisplay();
    }
    lastMouseX = x;
    lastMouseX = y;
}

void display()
{
    glLoadIdentity(); //remove transforms from previous display() call
    glTranslatef(-cameraX, -cameraY, 0.0f); //move objects negative = move camera positive
    ...