在QGLFrameBufferObject中绘制

时间:2014-07-04 06:29:28

标签: qt opengl

使用Qt和opengl,我想画一个QGlFrameBufferObject? 我试试这个:

QGLFrameBufferObject * fbo = new QGLFramebufferObject(200, 200, QGLFramebufferObject::NoAttachment, GL_TEXTURE_2D, GL_RGBA32F);  
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0f, fbo->size().width(), fbo->size().height(), 0.0f, 0.0f, 1.0f);
fbo->bind();
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
fbo->release();
fbo->toImage().save("test.jpg"));

但我没有得到红色图像。

其他问题

如果我想画画:

glBegin(GL_QUAD); 
glColor3d(0.2, 0.5, 1.0); 
glVertex2i( 10, 20);
glColor3d(0.7, 0.5, 1.0); 
glVertex2i( 15, 20);
glColor3d(0.8, 0.4, 1.0); 
glVertex2i( 15, 25);
glColor3d(0.1, 0.9, 1.0); 
glVertex2i( 10, 25);
glEnd();

我还需要glClear()吗?

1 个答案:

答案 0 :(得分:1)

你永远不会清除帧缓冲区。 glClearColor()仅设置用于清除的颜色,但不清除任何内容。您需要在此处添加第二行:

glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

glClear()调用将使用您在第一次调用中指定的清晰颜色清除颜色缓冲区。帧缓冲内容最初是未定义的,因此在开始绘制之前,应始终使用glClear()调用清除帧缓冲区。唯一的例外是,如果您确定渲染的图元将覆盖绘图表面的每个像素。即使这样,在某些体系结构上,仍然可以首先调用glClear()来提高性能。

只要您只清除缓冲区,它就不重要了。但是一旦你想开始绘图,你还需要设置视口:

glViewport(0, 0, 200, 200);