OpenGL в Qt не рисует красный квадрат

Я пытаюсь использовать QGLWidget использовать OpenGL в приложении Qt.

Я сделал подкласс 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() а также ::initializeGL()).

2 ответа

Решение

Кажется, с моим кодом было две проблемы. Сначала я должен был настроить порт просмотра в:

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(),

Я думаю, что вам нужно настроить окно просмотра OpenGL. В SDK есть несколько примеров Qt+OpenGL. Взглянуть!

Другие вопросы по тегам