OpenGL 中连续暂停

2024-05-06

void keyPress(unsigned char key,int x,int y){
    int i;
    switch(key){
    case 'f':
        i = 3;
        while(i--){
            x_pos += 3;
            sleep(100);
            glutPostRedisplay();
        }
    }
}
  • 上面是在 Windows 7 中使用 GLUT 库用 C++ 编写的代码片段。

  • 该函数采用字符键和鼠标坐标 x,y,并在按下 f 字符时分 3 个连续步骤沿 x 方向执行平移。在每个步骤之间,程序应休眠 100 毫秒。

  • 我们想要移动一个机器人,并在他向前移动一步时连续暂停。

  • 我们面临着让程序在这 3 个步骤之间休眠的问题。上面的代码片段有什么问题?


免责声明:jozxyqk 的答案对我来说似乎更好。这个答案以一种肮脏的方式解决了这个问题。


你滥用了glutPostRedisplay,如中所述这个答案 https://stackoverflow.com/a/8479379/1907026。问题是,glutPostRedisplay将当前窗口标记为需要重新显示,但只有在进入后才会完成glutMainLoop再次。这种情况只发生一次,因此似乎只有一次睡眠有效。

事实上,所有三个睡眠都有效,但 300 毫秒后只能重绘一次。

为了解决这个问题,你必须找到另一种重绘场景的方法。

while(i--){
    x_pos += 3;
    sleep(100);
    yourDrawFunction();
}

假设您正在 UNIX 系统上工作。

休眠 100 毫秒

sleep(100);

这里的问题是,你正在睡眠 100 秒,因为你可能正在使用睡眠功能<unistd.h>标头,定义sleep() as:

extern unsigned int sleep (unsigned int __seconds);

你想要的可能是这样的

usleep(100000); //sleeps for 100000 microseconds == 100 ms
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL 中连续暂停 的相关文章

随机推荐