我正在使用带有GLSL着色器的OpenGL来进行一些图像处理。我基本上使用带有正交投影的framebuffers来多次渲染我的图像(每个都有不同的片段着色器设置)。
然后我有两个带有纹理的帧缓冲器,我在它们之间来回渲染(例如,tex1连接到fb1,tex2连接到fb2。第一次传递将输入纹理渲染为fb1,第二次传递将tex1渲染为fb2 ,第3遍将tex2渲染为fb1 ...来回)直到最后一遍从任何纹理渲染到输出帧缓冲区。
所有这些都是使用正交投影完成的,因此不会丢失任何图像。这一切都正常,直到窗口调整大小。如果我将窗口的高度减半,图像最终只会被绘制在左边窗口的上半部分(这是一次通过,2次通过,它最终只会在窗口的顶部1/4处结束)。任何人都能理解为什么会这样吗?
第二张照片是在将窗口调整为原始高度的3/4之后
http://i567.photobucket.com/albums/ss112/davidc538/rtip1.png
http://i567.photobucket.com/albums/ss112/davidc538/rtip2.png
答案 0 :(得分:1)
在调整大小时,您似乎没有更新纹理尺寸。 即你的窗口已经调整大小,但是你仍然对它的初始尺寸进行了调整。
这意味着你每次通过都会缩小/放大你的形象。
你可以通过在调整大小期间更新你的fbo来避免这种情况(我建议四舍五入到最接近的两个幂),或者将fbo放在固定的大小并且总是渲染到完整的窗口(尽管你的渲染到大窗口时图像会模糊。)