opengl - 尝试使用 Ping-Pong 帧缓冲区时出现奇怪的颜色伪影
问题描述
我正在尝试使用 Java 和 Lwjgl 为带有乒乓缓冲区的多步效果编写着色器。但它看起来与它在 ShaderToy 中的外观不同。因此,在我寻找答案的过程中,我将所有内容都简化为一个更简单的着色器,基本上就是这样:
glFragColor = texture2D(u_Texture, v_TexCoords) * 3.0;
我正在使用 512x512 的 ping-pong 缓冲区为 512x512 图像乘以纹理颜色。当我运行这 3 个步骤时,输出如下:
左上角是原始图像,除了白色和黄色之外,所有像素都是完全黑色的。步骤顺时针到左下角。正如您所看到的,一些伪影正在蔓延,起初我认为这可能是正常的,但在 ShaderToy 中使用相同的着色器时不会发生这种情况。如果我不将颜色相乘,一切都很好,无论打多少次乒乓球,我都会得到相同的图像。如果我每一步都偏移几个像素进行采样,则图像会正确地移位到所有步骤的总和,而不会出现问题(所以我认为纹理坐标没有错)。
我知道我应该共享代码,但 FrameBuffer 分配、Quad 设置、着色器等都跨越多个源文件,这不切实际。我对此有点陌生,只是希望这是一个足够常见的陷阱/设置问题,一些有经验的人可以通过查看图像来猜测可能发生的事情。
解决方案
推荐阅读
- android - ionic cordova 资源似乎不适用于 Bitrise
- python - LXML:获取标题/顶级注释
- javascript - 在同一行中分配变量和更改属性
- c# - 如何在其他脚本的任何其他函数中调用包含参数的函数?
- excel - 我想使用按钮自动更新 cel whitout 中的列表框值
- python - from sklearn.model_selection import train_test_split 和 from sklearn.cross_validation import train_test_split 有什么区别
- php - 使用 MySQL LIKE 参数在表上搜索
- floating-point - 如何对 IEEE754 中表示的浮点数执行乘法运算
- angular - (Angular 2/4/5/6) 两个(或多个)内部订阅方法和一个外部订阅方法
- python - 应用程序说移动到目录后找不到模块