渲染帧缓冲显示错误的结果

我试图在使用LWJGL的同时将所有渲染渲染到帧缓冲区而不是后缓冲区。
我为图形做了以下事情。
设置显示并设置OpenGL:

    try {
        Display.setDisplayMode(new DisplayMode(1024, 768));
        Display.create();
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(0);
    }
    Display.setTitle(WINDOW_NAME);

    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();
    GL11.glOrtho(0, 1024, 0, 768, 1, -1);
    GL11.glMatrixMode(GL11.GL_MODELVIEW);

然后我创建一个framebuffer对象:

    m_width = p_width;
    m_height = p_height;


    m_frameBufferObject = glGenFramebuffersEXT();
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_frameBufferObject);
    m_depthBuffer = glGenRenderbuffersEXT();
    glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_depthBuffer);
    glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, p_width, p_height);

    glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, m_depthBuffer);
    m_frameBufferTexture = glGenTextures();
    glBindTexture(GL_TEXTURE_2D, m_frameBufferTexture);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, p_width, p_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (java.nio.ByteBuffer)null);
    glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_frameBufferTexture, 0);

渲染是这样完成的(目前我只尝试绘制一个像素):

    // Bind the framebuffer object.
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_frameBufferObject);
    glPushAttrib(GL_VIEWPORT_BIT);
    glViewport(0, 0, m_width, m_height);
    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);  

    // Clear with black
    GL11.glColor3f(0.0f, 0.0f, 0.0f);

    GL11.glBegin(GL11.GL_POINTS);
    setOpenGLColour(new Colour(Colour.RED));
    GL11.glVertex2f(100, 100);
    GL11.glEnd();

    //Deactivate the framebuffer object
    glPopAttrib();
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

    //Render the framebuffer object to the screen
    GL11.glBegin(GL11.GL_QUADS);
    GL11.glTexCoord2f(0f, 0f);
    GL11.glVertex2f(0, 0);
    GL11.glTexCoord2f(1f, 0f);
    GL11.glVertex2f(1024, 0); 
    GL11.glTexCoord2f(1f, 1f);
    GL11.glVertex2f(1024, 768);
    GL11.glTexCoord2f(0f, 1f);
    GL11.glVertex2f(0, 768);
    GL11.glEnd();

问题是:现在完整的屏幕是红色的。 不只是一个红色的像素,但完整的屏幕是红色的。 如果我不绘制像素,那么屏幕只是黑色。
有人能告诉我我可能做错了什么,或者如何做对吗?


它看起来像当你试图将FBO渲染结果复制到屏幕时没有变形。 由于您将当前绘制颜色设置为红色,因此只会将屏幕尺寸四边形绘制为红色。

我所看到的一件事是纹理从未启用。 在开始最终绘图命令之前添加此项:

glEnable(GL_TEXTURE_2D);

纹理也需要绑定,这通常会在绘图函数中发生。 但是既然你在设置过程中绑定了纹理,并且从不解除绑定,那么这个部分很可能不会引起问题。

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

上一篇: Rendering to framebuffer shows wrong result

下一篇: LWJGL: Texture renders with background color