【发布时间】:2014-09-21 20:55:35
【问题描述】:
窗口
使用 glew
我正在尝试在屏幕外渲染并将渲染的 img opengl 保存到 png 文件中。
我在 stackoverflow 上关注了一个高度评价的答案: How to render offscreen on OpenGL?
但是我得到的png文件只是黑屏。
这是我的相关代码:
glutCreateWindow(argv[0]);
if(GLEW_OK!=glewInit())
{
return -1;
}
initScene();
GLuint fbo, render_buf;
glGenFramebuffers(1,&fbo);
glGenRenderbuffers(1,&render_buf);
glBindRenderbuffer(GL_RENDERBUFFER,render_buf);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGB8, viewport.w, viewport.h);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER,fbo);
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, render_buf);
//Before drawing
glBindFramebuffer(GL_DRAW_FRAMEBUFFER,fbo);
glClear(GL_COLOR_BUFFER_BIT); // clear the color buffer
glMatrixMode(GL_MODELVIEW); // indicate we are specifying camera transformations
glLoadIdentity(); // make sure transformation is "zero'd"
//draw...
//glBegin(GL_POINTS) glColor3f, glVertex2f
//glFlush();
glFinish();
/*glutDisplayFunc(myDisplay);
glutPostRedisplay();*/
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
savePNG(outputPNGName,0,0,viewport.w,viewport.h);
//At deinit:
glDeleteFramebuffers(1,&fbo);
glDeleteRenderbuffers(1,&render_buf);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER,0);
如何解决问题? 谢谢
保存PNG(相关代码):
glReadBuffer(GL_COLOR_ATTACHMENT0);
glReadPixels(x, y, width, height, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)image);
【问题讨论】:
-
必须尝试渲染到纹理上并在场景中显示一个四边形?最好确保您的帧缓冲区正常工作。
-
还确保 - 通过保持系统帧缓冲区处于活动状态 - 你真的绘制任何可见的东西(一直发生......);)如果这个和 @Iggy 的解决方案不能帮助使用例如gDebugger 查看您的渲染缓冲区内容以确保您的 savePNG 不是问题...
-
谢谢,我已经更新了我的 savePNG 代码...@lggy 你能分享一个关于如何渲染到纹理的链接吗?
标签: opengl framebuffer glew