我正在使用Open GL绘制一个简单的场景。我已经将QGLWidget子类化并覆盖了paintGL()。那里没什么好看的:
void CGLWidget::paintGL()
{
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt (120.0, 160.0, -300.0, 0.0 + 120.0, 0.0 + 160.0, 2.0 - 300.0, 0.0, 1.0, 0.0);
glScalef(1.0f/300.0f, 1.0f/300.0f, 1.0f/300.0f);
glClear(GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(80.0, width()/(double)height(), 5.0, 100000.0);
glMatrixMode(GL_MODELVIEW);
glBegin(GL_POINTS);
glColor3f(1.0f,0.6f,0.0f);
glVertex3d(x, y, z);
// ...drawing some more points...
glEnd();
}
我在主窗口中有一个计时器,它触发GL小部件的updateGL()
。我已经确认它会导致paintGL()
被调用。但是,屏幕上的实际图片只是很少更新。即使我调整窗口大小,场景也不会更新。为什么这样,我怎么强迫它更新?
答案 0 :(得分:12)
不要从计时器调用updateGL(),而是调用update()以确保视图获得绘制事件。
答案 1 :(得分:8)
在CGLWidget构造函数
中QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(10);
timer -> start(VALUE);
玩'VALUE 10只是一个例子。
阿多诺