c++ - OpenGL 帧缓冲离屏渲染

标签 c++ opengl rendering framebuffer off-screen

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

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

Scene Normal

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

Scene with Framebuffer Object

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

以下是我在调用 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 个顶点中的第 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);

您还说您在 glMatrixMode(GL_MODELVIEW) 之后调用了 glOrtho()glOrtho() 设置投影矩阵,因此通常应在 glMatrixMode(GL_PROJECTION) 之后调用。

关于c++ - OpenGL 帧缓冲离屏渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24102151/

相关文章:

opengl - gl_FragColor 是否做了 gl_FragData 不做的事情?

java - 处理 - 渲染形状太慢

Android:.ttf >3MB 的字体呈现问题

C++ 等价于 StringBuffer/StringBuilder?

java - 从 javax.vecmath.Matrix4f 创建 float[]

c++ - 使用许可文件保护 DLL 文件

macos - 使用 Core Graphics 绘制雾

c++ - DirectX9 中的多个渲染目标

c++ - const 是否允许在此处进行(理论上的)优化?

c++ - 更改 C++ 类名的脚本