Qt 在QGLFrameBufferObject中绘制

Qt 在QGLFrameBufferObject中绘制,qt,opengl,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(

有了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()

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

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

只要你只清除缓冲区,这就不重要了。但一旦要开始绘制,还需要设置视口:

glViewport(0, 0, 200, 200);

你能试试像
GL\u RGBA8
这样的格式吗
GL_RGBA32F
应该可以工作,但它是一种更新、更很少使用的格式。为了缩小问题范围,需要检查更基本的格式是否有效。我对
GL\u RGBA8
也有同样的问题。请不要编辑问题以将其转换为其他内容。这个网站的目的是建立一个问答库。如果问题被编辑,答案将不再与问题匹配。好的,我扩展了答案。