渲染到纹理或离屏帧缓冲区

我在使用iPhone上的OpenGLES进行纹理渲染和离屏帧缓冲时遇到了问题。

alt text http://j.imagehost.org/0923/IMG_0020.pngalt text http://j.imagehost.org/0725/IMG_0019.png

第一张图片直接显示呈现给CAEAGLLayer麻将牌,这是正确的。 第二个显示渲染为离屏帧缓冲区的图块,使用glCopyTexImage2D复制到纹理以及渲染到CAEAGLLayer的纹理。 两者都使用白色不透明四边形作为背景。 我也尝试直接渲染纹理,但效果与屏幕外帧缓冲区相同。

我的代码创建帧缓冲区:

    GLuint framebuffer;
    glGenFramebuffersOES(1, &framebuffer);
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);

    GLuint renderbuffer;
    glGenRenderbuffersOES(1, &renderbuffer);
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, renderbuffer);
    glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGB8_OES,
            512, 512);

    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES,
            GL_RENDERBUFFER_OES, renderbuffer);

我使用VBO调用glDrawElementsglDrawElements纹理图集中的所有图块,以传递交错的顶点数据(坐标,纹理坐标,颜色)。 我使用RGBA8888纹理格式,使用glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)混合函数在两个三角形(四边形)上绘制每个图像。 我不使用深度缓冲区(在所有情况下)。

有人可以告诉我可能是什么问题?


看起来你没有发布足够的代码,但是从发布的内容看来,你似乎将FBO中的纹理和渲染缓冲区的角色融合在了一起。 (你的帖子标题说渲染纹理)你忘了定义你的绘制缓冲区。

连接到FBO的渲染缓冲区通常用作深度缓冲区。 因此请尝试以下操作:

GLuint framebuffer;
glGenFramebuffersOES(1, &framebuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);

//set up the Depth Buffer
GLuint renderbuffer;
glGenRenderbuffersOES(1, &renderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, renderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT24,
        512, 512);

glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT,
        GL_RENDERBUFFER_OES, renderbuffer);
//set up the texture that you will be rendering to
glActiveTexture(GL_TEXTURE0);
GLuint textureID;
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
//add various other texture parameters here
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGB8_OES, 512,512);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureID, 0);
// define your draw buffers
GLenum drawBuffers[1] = {GL_COLOR_ATTACHMENT0};
glDrawBuffers(1, drawBuffers);

希望有所帮助

链接地址: http://www.djcxy.com/p/33933.html

上一篇: Render to texture or offscreen framebuffer

下一篇: Render OpenGL scene to texture using FBO in fixed function pipeline drawing