繁体   English   中英

OpenGL帧缓冲区受窗口大小的影响

[英]OpenGL framebuffer affected by size of window

我正在将OpenGL与GLSL着色器一起使用以进行某些图像处理。 我基本上是使用带有正交投影的帧缓冲区多次渲染我的图像(每个片段着色器都有不同的设置)。

然后,我有2个帧缓冲区,并在它们之间来回渲染纹理(例如,tex1附着到fb1,tex2附着到fb2。第一遍将输入纹理渲染到fb1,第二遍将tex1渲染到fb2,第三遍将tex2渲染为fb1 ...(来回),直到最后一遍从任何纹理渲染到输出帧缓冲区为止。

所有这些操作都是使用正交投影完成的,因此不会丢失任何图像。 在调整窗口大小之前,所有这些都可以正常工作。 如果我将窗口的高度减小一半,则图像最终只会在剩下的窗口的上半部分绘制(这是一遍,两遍,并且最终只会在窗口的上半部分1/4处绘制) )。 谁能理解为什么会这样?

第二张图片是将窗口调整为原始高度的3/4之后

http://i567.photobucket.com/albums/ss112/davidc538/rtip1.png

http://i567.photobucket.com/albums/ss112/davidc538/rtip2.png

调整大小时似乎没有更新纹理尺寸。 也就是说,您的窗口已调整大小,但您仍在尝试初始化其初始尺寸。

  • 传递1写入tex1(已附加到fb1)
  • 第2遍将tex1(附加到fb1)写入tex2(fb2)
  • 第三遍将tex2写回到tex1
  • 第三遍将tex1写回到tex2

这意味着您每次通过都会缩小/放大图像。

您可以通过在调整大小时更新fbo来避免这种情况(我建议四舍五入到最接近的较大的2的幂),或者通过将fbo保持固定大小并始终渲染到整个窗口(尽管图像会渲染到大窗口时模糊不清)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM