2012-04-25 2 views
1

OpenGL (GLUT, GLUI) 프로그램을 사용하여 C/C++ (기본 파일 만 .cpp이므로 OpenGL을 사용할 수 있음) 프로그램이 있습니다. 그것은 이미 무언가를 표시하지만 나는 그것이 매 x ms마다 움직이기를 원합니다. 몇 가지 원 (렌더링 속도와 좌표)을 렌더링하고 새로 고침 빈도를 알고있는 다음 위치를 계산하는 함수를 이미 만들었습니다.C : 모든 x 밀리 초 표시 (OpenGL)

나는 디스플레이 콜백을 타이머 콜백에 넣으려고했지만 프로그램이 그냥 멈췄다.

xms마다 디스플레이 콜백을 실행하려면 어떻게해야합니까?

+0

"주요 파일이 그래서 OpenGL을 사용 할 수 있습니다 통화 당은"얼마나 정도? – 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