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