gpt4 book ai didi

pixel-shader - 在对纹理进行采样时在 GLSL 中使用 floor() 函数会留下故障

转载 作者:行者123 更新时间:2023-12-01 13:47:20 24 4
gpt4 key购买 nike

这是我遇到的问题的 shadertoy 示例:

https://www.shadertoy.com/view/4dVGzW

我通过从 floor-ed 纹理坐标采样来采样纹理:

#define GRID_SIZE 20.0

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord.xy / iResolution.xy;

// Sample texture at integral positions
vec2 texUV = floor(uv * GRID_SIZE) / GRID_SIZE;

fragColor = texture2D(iChannel0, texUV).rgba;
}

我看到的错误是在网格方 block 之间绘制了 1-2 条像素线有时

Grid of colours

请注意,我们不仅在 web 上使用 GLSL ES,而且在 Unity 中使用 HLSL 都看到了这个问题。

floor() 和我不明白的浮点运算有什么关系吗?!我不仅想知道如何修复它,还想知道为什么它会发生?

最佳答案

事实证明,这些网格线使用了来自纹理的低细节 mipmap。将纹理上的过滤器设置更改为“最近”或“线性”过滤而不是“mipmap”修复了它。

也可以使用第三个“偏置”参数调用 texture2D,该参数修改它将使用的 mipmap 级别。

感谢shadertoy的评论者回答问题!

(不确定如何在没有偏差的情况下为自定义着色器实际选择 mipmap 级别,如果有人知道的话会很感兴趣!)

关于pixel-shader - 在对纹理进行采样时在 GLSL 中使用 floor() 函数会留下故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34951491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com