0

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 のコメント行 (効果的に背景を緑にする行) は、コメントし続ける必要があります。

確かにいくつかの更新があります-何かを呼び出す必要がありますが、どこにあるのかわかりません..

4

1 に答える 1