当前位置:  开发笔记 > 后端 > 正文

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

如何解决《如何在OpenGL中进行平滑移动?》经验,为你挑选了1个好方法。

所以这个关于我的其他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> Luca..:

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

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

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

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有