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);
}