如何在OpenGL中进行平滑移动?

时间:2010-05-10 23:11:02

标签: opengl transformation

所以关于我的其他OpenGL问题的这个主题(不是我的OpenGL ES问题,而是OpenGL桌面版)。如果你有人按一个键移动一个方格,你如何使方形运动自然而不那么跳跃,但同样的速度我现在拥有它?这是我的glutKeyboardFunc()函数的代码:

void handleKeypress(unsigned char key, int x, int y) 
{
        if (key == 'w')
        {
            for (int i = 0; i < 12; i++)
            {
                if (i == 1 || i == 7 || i == 10 || i == 4)
                {
                    square[i] = square[i] + 1;
                }
            }
            glutPostRedisplay();
        }
        if (key == 'd')
        {
            for (int i = 0; i < 12; i++)
            {
                if (i == 0 || i % 3 == 0)
                {
                    square[i] = square[i] + 1;
                }
            }
            glutPostRedisplay();
        }
    if (key == 's')
    {
        for (int i = 0; i < 12; i++)
        {
            if (i == 1 || i == 7 || i == 10 || i == 4)
            {
                square[i] = square[i] - 1;
            }
        }
        glutPostRedisplay();
    }
        if (key == 'a')
        {
            for (int i = 0; i < 12; i++)
            {
                if (i == 0 || i % 3 == 0)
                {
                    square[i] = square[i] - 1;
                }
            }
            glutPostRedisplay();
        }
}

我很抱歉,如果这没有多大意义,如果它没有意义,我会尝试以更好的方式对其进行改写。

1 个答案:

答案 0 :(得分:5)

如果我理解正确,问题是你在键盘事件上修改对象位置,并在事件处理后请求显示。

要获得平滑动画,您应该在键盘事件处理时存储对象的最终位置,然后在渲染过程中插入中间对象位置。 插值函数的推导给出了动画的速度。

如果在分离的线程中执行事件处理,则效果会更好,因此事件处理不会阻止(至少对于少数同步操作)渲染操作。