我正在使用GLEW在MinGW Windows Code :: Blocks 12.11上进行SDL / OpenGL项目。我正在尝试实现2D离屏渲染,这样我最终可以尝试一些片段着色器效果。
这是渲染到默认帧缓冲区的场景:
但是,如果我将场景渲染为Framebuffer对象的纹理(称为fbo_texture),然后尝试将其渲染为全屏四边形,我会得到:
图像显示为翻转,镜像和绿色。我很确定Framebuffer的渲染是否正常工作,但对于我的生活,我无法弄清楚为什么纹理看起来如此偏斜。
以下是我在调用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);
我非常感谢您的帮助,如果我需要提供更多信息,请告诉我。
答案 0 :(得分: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)
之后调用。