2014-09-03 2 views
4

OpenGLUT을 사용하는 OpenGLUT에 문제가 있습니다.이 텍스트는 Visual Studio 2012에서 컴파일되고 실행됩니다. 프로그램이 잘 컴파일되고 실행을 누르면 800 x 600 창이 열리고 내가 원하는 이미지. 그러나 창은 약 2 초 후에 0 x 0에 도달 할 때까지 즉시 축소를 시작한 다음 계속 열려 있습니다. 나는 문제가 무엇인지, 구글 검색은 관련 정보를 찾지 못했다. 프로그램이 시작된 후OpenGL 출력 창이 0 x 0 창으로 즉시 축소됩니다.

This is a screenshot immediately after the program started.

위의 스크린 샷은 즉시 찍은 : 여기에 문제의 스크린 샷이다. 아래 스크린 샷은 프로그램이 시작된 지 약 1 초 만에 나에게서 어떤 상호 작용없이 시작되었습니다. 은 0 X 0 크기까지

enter image description here

출력 창은 계속해서 축소. 여기 내 코드와 모든 제안이 도움이 될 것입니다.

#ifdef __APPLE_CC__ 
#include <GLUT/glut.h> 
#else 
#include <OpenGlut.h> 
#endif 

// Clears the window and draws the tetrahedron. The tetrahedron is easily 
// specified with a triangle strip, though the specification really isn't very 
// easy to read. 
void display() { 
    glClear(GL_COLOR_BUFFER_BIT); 

    // Draw a white grid "floor" for the tetrahedron to sit on. 
    glColor3f(1.0, 1.0, 1.0); 
    glBegin(GL_LINES); 
    for (GLfloat i = -2.5; i <= 2.5; i += 0.25) { 
    glVertex3f(i, 0, 2.5); glVertex3f(i, 0, -2.5); 
    glVertex3f(2.5, 0, i); glVertex3f(-2.5, 0, i); 
    } 
    glEnd(); 

    // Draw the tetrahedron. It is a four sided figure, so when defining it 
    // with a triangle strip we have to repeat the last two vertices. 
    glBegin(GL_TRIANGLE_STRIP); 
    glColor3f(1, 1, 1); glVertex3f(0, 2, 0); 
    glColor3f(1, 0, 0); glVertex3f(-1, 0, 1); 
    glColor3f(0, 1, 0); glVertex3f(1, 0, 1); 
    glColor3f(0, 0, 1); glVertex3f(0, 0, -1.4); 
    glColor3f(1, 1, 1); glVertex3f(0, 2, 0); 
    glColor3f(1, 0, 0); glVertex3f(-1, 0, 1); 
    glEnd(); 

    glFlush(); 
} 

// Sets up global attributes like clear color and drawing color, enables and 
// initializes any needed modes (in this case we want backfaces culled), and 
// sets up the desired projection and modelview matrices. It is cleaner to 
// define these operations in a function separate from main(). 
void init() { 

    // Set the current clear color to sky blue and the current drawing color to 
    // white. 
    glClearColor(0.1, 0.39, 0.88, 1.0); 
    glColor3f(1.0, 1.0, 1.0); 

    // Tell the rendering engine not to draw backfaces. Without this code, 
    // all four faces of the tetrahedron would be drawn and it is possible 
    // that faces farther away could be drawn after nearer to the viewer. 
    // Since there is only one closed polyhedron in the whole scene, 
    // eliminating the drawing of backfaces gives us the realism we need. 
    // THIS DOES NOT WORK IN GENERAL. 
    glEnable(GL_CULL_FACE); 
    glCullFace(GL_BACK); 

    // Set the camera lens so that we have a perspective viewing volume whose 
    // horizontal bounds at the near clipping plane are -2..2 and vertical 
    // bounds are -1.5..1.5. The near clipping plane is 1 unit from the camera 
    // and the far clipping plane is 40 units away. 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glFrustum(-2, 2, -1.5, 1.5, 1, 40); 

    // Set up transforms so that the tetrahedron which is defined right at 
    // the origin will be rotated and moved into the view volume. First we 
    // rotate 70 degrees around y so we can see a lot of the left side. 
    // Then we rotate 50 degrees around x to "drop" the top of the pyramid 
    // down a bit. Then we move the object back 3 units "into the screen". 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    glTranslatef(0, 0, -3); 
    glRotatef(50, 1, 0, 0); 
    glRotatef(70, 0, 1, 0); 
} 

// Initializes GLUT, the display mode, and main window; registers callbacks; 
// does application initialization; enters the main event loop. 
int main(int argc, char** argv) { 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 
    glutInitWindowPosition(80, 80); 
    glutInitWindowSize(800, 600); 
    glutCreateWindow("A Simple Tetrahedron"); 
    glutDisplayFunc(display); 
    init(); 
    glutMainLoop(); 
} 
+1

+1 – Cameron

+0

에는 충분한 정보가 없기 때문에 모든 것을 게시 할 수있는 충분한 양의 코드가 있습니다. 그것의 소스 컨트롤에 있다면, – Kevin

+1

매혹적인 ...'display()'만이 등록한 GLUT 콜백입니까? 재 형성 콜백이 없습니까? –

답변

0

아마도 가장 좋은 해결책은 포기할 것입니다. 대신 GLFW을 사용하시기 바랍니다.

GLFW :

  • 더 많은 기능을 가지고 있습니다.
  • 더 간단합니다.
  • 더 잘 디자인 된 API가 있습니다.
  • 현대적이며 능동적으로 개발되었습니다.
  • 아주 좋은 문서가 있습니다.
  • 그냥 작동합니다.
관련 문제