C:每x毫秒显示一次(OpenGL)
Posted
技术标签:
【中文标题】C:每x毫秒显示一次(OpenGL)【英文标题】:C : display every x milliseconds (OpenGL) 【发布时间】:2012-04-25 18:10:03 【问题描述】:我有一个 C/C++(只有主文件是 .cpp,所以我可以使用 OpenGL)程序,我在其中使用 OpenGL(GLUT,GLUI)。它已经显示了一些东西,但我希望它每 x 毫秒移动一次。我渲染了一些圆圈(已知的速度和坐标),并且我已经制作了计算它的下一个位置的函数,知道刷新率。
我尝试将显示回调放入计时器回调中,但程序刚刚冻结。
如何才能每 x ms 运行一次显示回调?
【问题讨论】:
"主文件是 .cpp,所以我可以使用 OpenGL"...怎么样? 【参考方案1】:我尝试将显示回调放入计时器回调中,但程序刚刚冻结。
确保在你的定时器回调中re-arm the timer,否则它只会触发一次:
#include <GL/glut.h>
void display()
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-10, 10, -10, 10, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
static float angle = 0;
angle += 1.0f;
glRotatef(angle, 0, 0, 1);
glColor3ub(255,0,0);
glBegin(GL_TRIANGLES);
glVertex2f(0,0);
glVertex2f(10,0);
glVertex2f(10,10);
glEnd();
glutSwapBuffers();
void reshape(int w, int h)
glViewport(0, 0, w, h);
void timer(int extra)
glutPostRedisplay();
glutTimerFunc(30, timer, 0);
int main(int argc, char **argv)
glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);
glutCreateWindow("Timer");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutTimerFunc(0, timer, 0);
glutMainLoop();
return 0;
【讨论】:
以上是关于C:每x毫秒显示一次(OpenGL)的主要内容,如果未能解决你的问题,请参考以下文章
Java 屏幕捕获 OpenGL 和 DirectX 全屏应用程序
在 3D 中查找 X、Y 和 Z 轴的角度 - OpenGL/C++