其他分享
首页 > 其他分享> > c-连续在OpenGL中暂停

c-连续在OpenGL中暂停

作者:互联网

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 ms.
>我们要移动一个机器人,并在机器人向前移动时连续停顿.
>我们面临使程序在3个步骤之间进入休眠状态的问题.上面的代码片段有什么问题?

解决方法:

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

您正在滥用glutPostRedisplay(如this answer中所述).问题是,glutPostRedisplay将当前窗口标记为需要重新显示,但是只有再次进入glutMainLoop时才会执行.那只发生一次,因此似乎只有一次睡眠有效.

实际上,所有三个睡眠均起作用,但是300 ms之后您只能获得一次重绘.

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

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

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

sleep for 100 ms

sleep(100);

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

extern unsigned int sleep (unsigned int __seconds);

你想要的可能是这样的

usleep(100000); //sleeps for 100000 microseconds == 100 ms

标签:c,opengl,visual-c,sleep
来源: https://codeday.me/bug/20191012/1902668.html