QtCreatorを使用して、qt 4.8で単純な2D openglクラスを実装しています。特別なことは何もありませんが、glOrtho でシーンを設定しているときに背景色を 1 つだけ設定することはできません。
いくつかのコメント付きの試行を含むコードは次のとおりです。
#include "glwidget.h"
#include <iostream>
GLWidget::GLWidget(QWidget *parent) :
QGLWidget(parent) {}
void GLWidget::initializeGL() {
std::cout << "GLWidget::initializeGL" << std::endl;
glShadeModel(GL_SMOOTH);
glClearDepth(1.0f);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}
void GLWidget::resizeGL(int width, int height) {
std::cout << "GLWidget::resizeGL" << std::endl;
makeCurrent();
glViewport(0,0,(GLint)width, (GLint)height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, width, 0, height);
glScalef(1, -1, 1); // invert Y axis so increasing Y goes down.
glTranslatef(0, -height, 0); // shift origin up to upper-left corner.
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
frameCount = 0;
glClearColor(0.0f, 255.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
//updateGL(); // this doesn't produce any changes
}
void GLWidget::paintGL() {
std::cout << "GLWidget::paintGL" << std::endl;
makeCurrent();
// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // this works but it is in paintGL
// glLoadIdentity();
}
実際には、背景色を一度だけ設定し、すべての paintGL を updateGL 経由でマウスの動きごとに設定したいのですが、背景をきれいにする必要はありません。そのため、paintGL のコメント行 (効果的に背景を緑にする行) は、コメントし続ける必要があります。
確かにいくつかの更新があります-何かを呼び出す必要がありますが、どこにあるのかわかりません..