ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c-连续在OpenGL中暂停

2019-10-12 20:07:52  阅读:234  来源: 互联网

标签:c opengl visual-c sleep


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有