0

我正在使用 GLEW 在 MinGW Windows Code::Blocks 12.11 上做一个 SDL/OpenGL 项目。我正在尝试实现 2D 离屏渲染,以便最终可以尝试一些片段着色器效果。

这是渲染到默认帧缓冲区的场景:

场景正常

但是,如果我将场景渲染到 Framebuffer 对象的纹理(称为 fbo_texture),然后尝试将其渲染到全屏四边形,我会得到:

带有帧缓冲对象的场景

图像出现翻转、镜像和绿色。我很确定帧缓冲区的渲染工作正常,但对于我来说,我无法弄清楚为什么纹理看起来如此倾斜。

这是我在调用 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0) 后尝试将 fbo_texture 渲染到纹理四边形的方法。我在程序初始化时使用 glMatrixMode(GL_MODELVIEW) 和 glOrtho(0, screen_width, screen_height, 0, 0, 1) 。screen_width 为 400,screen_height 为 400。

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, fbo_texture);
glBegin(GL_QUADS);
    x1= 0.5;
    x2= 400.5;
    y1= 0.5;
    y2 = 400.5;
    glTexCoord2f(0.0f, 0.0f); glVertex2f(x1, y1);
    glTexCoord2f(1.0f, 0.0f); glVertex2f(x2, y1);
    glTexCoord2f(0.0f, 1.0f); glVertex2f(x2, y2);
    glTexCoord2f(1.0f, 1.0f); glVertex2f(x1, y2);
glEnd();


glDisable(GL_TEXTURE_2D);

我非常感谢任何帮助,如果我应该提供更多信息,请告诉我。

4

1 回答 1

2

这可能不是您唯一的问题,但从您显示的部分来看,两个顶点在您的纹理坐标中交换。4个顶点中的第3个是右上角,带有坐标(x2, y2),所以它应该有纹理坐标(1.0f, 1.0f)

glTexCoord2f(0.0f, 0.0f); glVertex2f(x1, y1);
glTexCoord2f(1.0f, 0.0f); glVertex2f(x2, y1);
glTexCoord2f(1.0f, 1.0f); glVertex2f(x2, y2);
glTexCoord2f(0.0f, 1.0f); glVertex2f(x1, y2);

你也说你打电话glOrtho()glMatrixMode(GL_MODELVIEW)glOrtho()设置一个投影矩阵,所以它通常应该在glMatrixMode(GL_PROJECTION).

于 2014-06-08T01:37:04.663 回答