1

我正在尝试QGLWidget在 Qt 应用程序中使用 OpenGL。

我做了一个等的子类QGLWidget,并认为我会测试它是否有效。

但是,以下代码没有像我预期的那样工作:

void MyGLWidget::paintGL() {
  gluLookAt(0,0,-10,0.5,0.5,0,0,1,0);
  glClear(GL_COLOR_BUFFER_BIT);
  glColor3f(1,0,0);
  glBegin(GL_POLYGON);
  glVertex3f(0,0,0);
  glVertex3f(0,1,0);
  glVertex3f(1,1,0);
  glVertex3f(1,0,0);
  glEnd();
}

我想象这会做的是看一个红色正方形的中心。但是相反,当我运行它时,它似乎非常短暂地看着正方形的中心,然后显示屏就变成了黑色。

有什么我做错了吗?我没有在其他任何地方做任何 OpenGL。上面的函数是子类中唯一的 OpenGL 代码(现在::resizeGL()and中没有任何内容::initializeGL())。

4

2 回答 2

2

我认为您需要设置 OpenGL 视口。SDK中有一些Qt+OpenGL的例子。看一看!

于 2012-06-11T20:36:45.740 回答
1

我的代码似乎有两个问题。首先,我必须在以下位置设置视口:

void MyGLWidget::resizeGL(int w, int h) {
  glViewport(0, 0, w, h);
  glMatrixMode(GL_PROJECTION);

  glLoadIdentity();
  gluPerspective(45.,((GLfloat)w)/((GLfloat)h),0.1f,1000.0f);

  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
}

其次,我必须在打电话之前glLoadIdentity()先打电话gluLookAt()paintGL()

于 2012-06-11T21:09:00.350 回答