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 全屏应用程序

MFC:如何从不同的线程绘制opengl?

OpenGL 2D纹理无法正确显示c ++

在 3D 中查找 X、Y 和 Z 轴的角度 - OpenGL/C++

在 Mac OS X 中编译使用 OpenGL 的 C 程序

C ++ OpenGL从点到点反弹对象