首页 > 解决方案 > 尝试使用 Ping-Pong 帧缓冲区时出现奇怪的颜色伪影

问题描述

我正在尝试使用 Java 和 Lwjgl 为带有乒乓缓冲区的多步效果编写着色器。但它看起来与它在 ShaderToy 中的外观不同。因此,在我寻找答案的过程中,我将所有内容都简化为一个更简单的着色器,基本上就是这样:

glFragColor = texture2D(u_Texture, v_TexCoords) * 3.0;

我正在使用 512x512 的 ping-pong 缓冲区为 512x512 图像乘以纹理颜色。当我运行这 3 个步骤时,输出如下:

问题

左上角是原始图像,除了白色和黄色之外,所有像素都是完全黑色的。步骤顺时针到左下角。正如您所看到的,一些伪影正在蔓延,起初我认为这可能是正常的,但在 ShaderToy 中使用相同的着色器时不会发生这种情况。如果我不将颜色相乘,一切都很好,无论打多少次乒乓球,我都会得到相同的图像。如果我每一步都偏移几个像素进行采样,则图像会正确地移位到所有步骤的总和,而不会出现问题(所以我认为纹理坐标没有错)。

我知道我应该共享代码,但 FrameBuffer 分配、Quad 设置、着色器等都跨越多个源文件,这不切实际。我对此有点陌生,只是希望这是一个足够常见的陷阱/设置问题,一些有经验的人可以通过查看图像来猜测可能发生的事情。

标签: openglglsl

解决方案


推荐阅读