2014-09-03 92 views
4

我在使用OpenGLUT編譯並在Visual Studio 2012中運行的OpenGL程序中遇到了問題。程序編譯良好,當我按下運行800 x 600窗口時會打開並顯示我想要的圖像。但是,窗口會立即開始收縮,直到它在大約2秒內達到0 x 0,然後保持打開狀態。我不太確定問題所在,Google搜索沒有提供相關信息。以下是問題的一些截圖:OpenGL輸出窗口立即縮小爲0 x 0窗口

This is a screenshot immediately after the program started.

上面的截圖是立即採取程序啓動後。下面的屏幕截圖是在程序啓動後的第二秒鐘內完成的,沒有與我進行任何交互。

enter image description here

輸出窗口繼續縮小,直到它是0 X 0的大小。這是我的代碼,任何建議都會有幫助。

#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對於一個真正獨特的bug :-) – Cameron 2014-09-03 21:42:30

+0

是否有足夠的代碼來發布整個事情,因爲現在沒有足夠的信息。如果它的源代碼控制,請隨時鏈接 – Kevin 2014-09-03 21:48:50

+1

迷人...... display()是你註冊的唯一GLUT回調函數。沒有重塑回調,或類似的東西? – 2014-09-03 21:49:00

回答

0

可能是最好的解決方案 - 放棄GLUT。我建議您改用GLFW

GLFW:

  • 具有更多的功能。
  • 更簡單。
  • 有更好設計的API。
  • 現代,並積極開發beign。
  • 有非常好的文檔。
  • 只是工作。