Opengl 将FBO渲染到外部图像文件

Opengl 将FBO渲染到外部图像文件,opengl,Opengl,我是openGL新手,我正在使用帧缓冲区对象(FBO)进行屏幕外渲染,正如其他大多数问题的答案所建议的那样 GLuint fb[1],color_rb[1]; glGenFramebuffersEXT(1, fb); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb[0]); glGenRenderbuffersEXT(1, color_rb); glBindRenderbufferEXT(GL_RENDERBUFFER_

我是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*数组)生成帧缓冲区的过程中。所以,有谁能告诉我在我的代码中生成FBO有什么问题吗。 还有一件事,如果有人知道如何渲染到磁盘中的外部图像文件

我的进口是:

#include <iostream>
#include <GL/glew.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#包括
#包括
#包括
#包括
#包括
当我执行这段代码时,分段错误就来了

在Linux上,OpenGL-1.2之后的任何内容都必须在运行时初始化。这称为扩展加载。由于如果“手动”执行此任务,则有点令人生畏,因此开发了许多扩展加载程序库。一个流行的选择是

当我执行这段代码时,分段错误就来了


在Linux上,OpenGL-1.2之后的任何内容都必须在运行时初始化。这称为扩展加载。由于如果“手动”执行此任务,则有点令人生畏,因此开发了许多扩展加载程序库。一个流行的选择是。

非常感谢……你能帮我一小段代码来使用GLEW并使FBO初始化工作正常吗?@ChinmayJindal:你可能会发现我多年前写的最简单的FBO示例很有用:–它包含GLEW和FBO代码。我想再问你一件事。。。在基于linux的系统上,借助openGL是否有可能在没有窗口的情况下生成此输出???@ChinmayJindal:使用当前生成的驱动程序,您必须在活动X服务器上创建一个X11可绘制文件,以可靠地获得硬件加速的openGL上下文。drawable不需要可见,因此可以使用隐藏窗口。理论上,MesaGL的最新版本提供了一个EGLAPI来创建硬件加速的OpenGL绘图表面,但这种支持仍然是实验性的。不过,您可以在软件渲染器模式下使用屏幕外Mesa(osmesa)。再过两年,可能会有广泛支持的API来创建无头硬件加速OpenGL上下文。非常感谢…你能帮我一小段代码来使用GLEW并使FBO初始化工作正常吗?@ChinmayJindal:你可能会发现我几年前写的最小FBO示例很有用:–它包含了GLEW和FBO密码我想再问你一件事。。。在基于linux的系统上,借助openGL是否有可能在没有窗口的情况下生成此输出???@ChinmayJindal:使用当前生成的驱动程序,您必须在活动X服务器上创建一个X11可绘制文件,以可靠地获得硬件加速的openGL上下文。drawable不需要可见,因此可以使用隐藏窗口。理论上,MesaGL的最新版本提供了一个EGLAPI来创建硬件加速的OpenGL绘图表面,但这种支持仍然是实验性的。不过,您可以在软件渲染器模式下使用屏幕外Mesa(osmesa)。再过两年,可能会有广泛支持的API来创建无头硬件加速的OpenGL上下文。