我正在尝试使用Java和Lwjgl为乒乓缓冲区编写多步效果的着色器。但它看起来与ShaderToy中的外观不同。因此,在寻找答案的过程中,我将所有内容都剥离了一个更简单的着色器,基本上就是这样:
glFragColor = texture2D(u_Texture, v_TexCoords) * 3.0;
我正在使用512x512的乒乓缓冲区将512x512图像的纹理颜色相乘。当我运行这3个步骤时,这是输出:
左上角是原始图像,除白色和黄色像素外,所有像素均为黑色。步骤顺时针旋转至左下角。如您所见,有些工件正在蔓延,起初我以为是正常现象,但是在ShaderToy中使用相同的着色器不会发生这种情况。如果我不将颜色相乘,那么一切正常,无论有多少乒乓球,我都能得到相同的图像。如果我每步采样都有几个像素偏移,则图像可以正确地偏移到所有步的总和而不会出现问题(因此我认为纹理坐标没有错)。
我知道我应该共享代码,但是FrameBuffer分配,Quad设置,着色器等都跨越了几个源文件,这是不实际的。我对此有些陌生,只是希望这是一个常见的陷阱/设置问题,以使一些有经验的人可以通过查看图像来猜测可能会发生什么。