2012-04-25 22 views
1

私はOpenGL(GLUT、GLUI)を使ってC/C++(メインファイルのみが.cppなのでOpenGLを使うことができます)プログラムを持っています。すでに何かが表示されていますが、x msごとに移動します。私はいくつかの円(既知の速度と座標)を描画し、私はすでにリフレッシュレートを知っている次の位置を計算する関数を作っています。C:すべてのミリ秒表示(OpenGL)

私はディスプレイコールバックをタイマーコールバックに入れようとしましたが、プログラムはただフリーズしました。

xmsごとにディスプレイコールバックを実行するにはどうすればよいですか?

+0

「私はOpenGLを使用できるようにメインのファイルがあるの.cpp」? – genpfault

答えて

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; 
} 
+0

ありがとう、それは完全に動作します。私はタイマーを呼び起こすとは思わなかった... – DennisVDB

関連する問題