我正在使用 QtCreator 在 qt 4.8 中实现一个简单的 2D opengl 类。没什么特别的,但是当我使用 glOrtho 设置场景时,我无法将背景颜色设置为一种。
这是带有一些注释试验的代码:
#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();
}
事实是,我只想设置一次背景颜色,并且每次鼠标移动都通过 updateGL 设置所有paintGL,而无需清理背景。因此,paintGL 中的注释行(有效地使背景变为绿色)必须保持注释。
肯定有一些更新的东西可以打电话,但我不明白在哪里..