窗口戰平幀緩衝,但使用GLEW</p> <p>我試圖渲染離屏和保存渲染到PNG文件的IMG的OpenGL只得到黑色
。
我也跟着上一個計算器高度評價答案: 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);
如何解決這個問題? 謝謝
savePNG(相關的代碼):
glReadBuffer(GL_COLOR_ATTACHMENT0);
glReadPixels(x, y, width, height, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)image);
不得不試圖渲染到紋理,並在場景中顯示它四?確保你的framebuffer能夠正常工作會很好。 – Iggy 2014-09-21 21:11:02
還要確保 - 通過保持系統幀緩存處於活動狀態 - 您確實能夠看到任何可見的內容(始終發生......);)如果這個和@Iggy的解決方案不能幫助使用例如[gDebugger](http://www.gremedy.com/)看看你的renderbuffer內容,以確保你的savePNG不是問題... – Thomas 2014-09-21 21:20:03
謝謝,我已經更新了我的savePNG代碼... @lggy你能分享一個關於如何渲染紋理的鏈接嗎? – shrekshao 2014-09-21 21:26:24