2014-10-06 2 views
0

내 프로그램에서 glutMainLoop()을 사용하고 있지 않지만 간단한 while 루프에서 glutMainLoopEvent()를 사용하고 있습니다. 이것은 괜찮지 만 재 형성 콜백은 결코 호출되지 않습니다. main()에 내 reshape 이벤트를 등록합니다. 내 소스 코드는 다음과 같습니다.Freeglut Reshape 콜백

#include <iostream> 
#include "GL/freeglut.h" 


float angle = 0.0f; 


void ResizeEvent(int w, int h) 
{ 
    std::cout << "Resizing... << w << " " << h << std::Endl; 

    if(h == 0) 
     h = 1; 

    glViewport(0, 0, w, h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(45.0, (GLdouble)w/h, 0.1, 100.0); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
} 

void InitializeGL() 
{ 
    glClearColor(0.0, 0.0, 0.0, 1.0f); 
    glViewport(0, 0, 640, 480); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(45.0, 640.0/480.0, 0.1, 100.0); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
} 

void Update() 
{ 
    angle += 0.05f; 
} 

void Display() 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glLoadIdentity(); 

    glTranslatef(0.0f, 0.0f, -3.0f); 
    glRotatef(angle, 0.5f, 1.0f, 0.75f); 
    glBegin(GL_TRIANGLES); 
     glColor3f(1.0f, 0.0f, 0.0f); 
      glVertex3f(-1.0f, -1.0f, 0.0f); 
     glColor3f(0.0f, 1.0f, 0.0f); 
      glVertex3f(1.0f, -1.0f, 0.0f); 
     glColor3f(0.0f, 0.0f, 1.0f); 
      glVertex3f(0.0f, 1.0f, 0.0f); 
    glEnd(); 

    glutSwapBuffers(); 
} 

int main(int argc, char* argv[]) 
{ 
    glutInit(&argc, argv); 
    glutInitWindowSize(640, 480); 
    glutCreateWindow("Learning freeglut"); 

    InitializeGL(); 

    glutReshapeFunc(ResizeEvent); 

    while(true) 
    { 
     Update(); 

     Display(); 

     glutMainLoopEvent(); 
    } 

    return 0; 
} 

미리 감사드립니다.

편집 : 아무나?

+0

모양 변경 함수가 호출되는 않음 가능한 해결 방법)? – Ben

+0

예. 키보드 이벤트와 같은 다른 이벤트를 시도하고 glutMainLoop 및 glutMainLoopEvent와 함께 작동합니다. – KrounNouns

답변

0

glutReshapeFuncglutDisplayFunc으로 설정해야합니다.. 을 업데이트하기 위해 창을 필요로하지 않고 크기를 변경하는 동안에는 비어있는 함수 일 수도 있습니다.

당신이 위해 glutMainLoop를 (사용하는 경우

... 

    glutReshapeFunc(ResizeEvent); 

    glutDisplayFunc(Display); 

    while(true) 
    { 
     Update(); 

     Display(); 

     glutMainLoopEvent(); 
    } 

    ... 
관련 문제