QGLWidget不显示如图所示的对象

时间:2014-05-14 21:28:51

标签: c++ qt

我在Qt中制作一个GUIon,我正在使用QGLWidgt显示一个对象的运动。 为了调试目的,我在矩阵上硬编码以尝试显示茶壶,但屏幕上没有显示任何内容。我尝试了很多东西,我只是不知道出了什么问题。

修改 我发现它正在显示茶壶,但缩放是远离的..如果我改变位置远离它的位置。当我将位置从-2.700,2.000,0.000更改为-0.0270,0.0200,0000时,我可以看到它。我想我现在的问题是如何设置屏幕大小以显示正在显示的内容??

下面给出了paintGL,驻留GL和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 个答案:

答案 0 :(得分: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);

第一行被第二行覆盖 - 您不能同时拥有透视图和正交视图。如果您不想在平行视图中查看茶壶,可以对第二行进行注释。