我是openGL的新手,我正在使用帧缓冲区对象(FBO)进行屏幕外渲染,正如大多数其他问题的答案所建议的那样。
GLuint fb[1],color_rb[1];
glGenFramebuffersEXT(1, fb);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb[0]);
glGenRenderbuffersEXT(1, color_rb);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, color_rb[0]);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, 256, 256);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, color_rb[0]);
// rendering to the FBO
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb[0]);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glViewport(0, 0, 256, 256);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 256.0, 0.0, 256.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
RenderATriangle(); // i have defined this function to render a texture in a triangular geometry
GLubyte pixels[4*4*4];
glReadPixels(0, 0, 4, 4, GL_BGRA, GL_UNSIGNED_BYTE, pixels);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
当我使用时,我没有收到任何编译错误。我还在我的 ubuntu 12.10 系统中安装了 glew。当我执行此代码时,分段错误即将到来。我尝试使用 cout 语句检查错误在哪里,我发现使用 glGenFramebuffersEXT(1, GLuint* array) 生成帧缓冲区时出现错误。那么任何人都可以告诉我在我的代码中生成 FBO 有什么问题。还有一件事,如果有人能告诉如何渲染到磁盘中的外部图像文件。
我的进口是:
#include <iostream>
#include <GL/glew.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>