2014-05-14 39 views
0

我在Qt中做了一個GUIon,我使用QGLWidgt來顯示一個對象的運動。 對於調試puposes,我硬編碼矩陣嘗試顯示茶壺,但沒有任何顯示在屏幕上。我嘗試了很多東西,我只是不知道什麼是錯的。QGLWidget不顯示對象,如圖所示

編輯 我想通了,它顯示了茶壺,但是比例是遙遠..如果我改變位置是遠離它在哪裏。當我將位置從-2.700,2.000,0.000改爲-0.0270,0.0200,0.000時,我可以看到它。我想現在我的問題是如何設置屏幕的大小來顯示正在顯示的內容?

下面給出paintGL,resideGL和intializeGL。

void GLWidget::initializeGL() 

{ 
     glClearColor(1.0,1.0,1.0,1.0); 
      GLUquadricObj *qobj = gluNewQuadric(); 
     gluQuadricDrawStyle(qobj,GLU_FILL); 
     gluQuadricNormals(qobj,GLU_SMOOTH); 
     glClearDepth(1.0f); 

     glEnable(GL_DEPTH_TEST); 
     glShadeModel(GL_SMOOTH); 
     double eqn[] = {0.01f,0.0f,0.01f,-1.0f}; 
     // enable clip plane  
     ::glClipPlane(GL_CLIP_PLANE0,eqn); 

     setupLight(); 
    } 

void GLWidget::paintGL() { 

     double MOpenGLStack[16] = {0.4314, 0.875, 0.2181, 0.000, 
            0.0567, -0.267, 0.961, 0.000, 
            0.900, -0.402, -0.165, 0.000, 
            -2.700, 2.000, 0.000, 1.000}; 

     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
     glMatrixMode(GL_MODELVIEW); 
     glLoadIdentity(); 
      glTranslatef(0.0, 0.0, -5.0); 
      glRotatef(xRot/16.0, 1.0, 0.0, 0.0); 
      glRotatef(yRot/16.0, 0.0, 1.0, 0.0); 
      glRotatef(zRot/16.0, 0.0, 0.0, 1.0); 
      glTranslated(xTrans/16.0, yTrans/ 16.0, 0.0f); 
     ::glPushMatrix(); 
     ::glMultMatrixd(MOpenGLStack); 
      glutSolidTeapot(0.15); 
     ::glPopMatrix(); 
    } 


void GLWidget::resizeGL(int w, int h){ 

    int side = qMin(w, h); 
    glViewport((w - side)/2, (h - side)/2, side, side); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(30.0f, (double)w/(double)h, 0.1f, 1000.0f); 
    glOrtho(-0.5, +0.5, -0.5, +0.5, 4.0, 15.0); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    glTranslatef(0.0f, 0.0f, -10.0f); 
} 

回答

1

這裏有一個問題:

gluPerspective(30.0f, (double)w/(double)h, 0.1f, 1000.0f); 
glOrtho(-0.5, +0.5, -0.5, +0.5, 4.0, 15.0); 

第一行第二行重寫 - 你不能在同一時間兩個視角和正投影視圖。如果您不想在平行視圖中查看茶壺,則可以評論第二行。