Mouaad Abdelghafour AITALI Asked: 2023-09-03 20:59:40 +0800 CST2023-09-03 20:59:40 +0800 CST 2023-09-03 20:59:40 +0800 CST 使用GLSL,如何创建类似透视弯曲的效果 772 我正在尝试制作一个与此类似的透视弯曲 GLSL 着色器。 原来的: 透视弯曲: void mainImage( out vec4 fragColor, in vec2 fragCoord ){ vec2 uv = fragCoord.xy/iResolution.xy; if (uv.x + uv.y < 1.0) uv = 1.0 - vec2(uv.y, uv.x); fragColor = texture(iChannel0, uv); } 上面的代码并没有达到我想要的效果;感谢您的帮助! glsl 1 个回答 Voted Best Answer Cadeyrn 2023-09-03T22:10:43+08:002023-09-03T22:10:43+08:00 这条线不成 45° 角并且没有在应有的位置结束的原因是,通过除以fragCoord.xy,iResolution.xy您可以将 x 轴和 y 轴缩放不同的量。在您的情况下,由于图像的宽度大于高度,因此uv将被水平拉伸。为了避免这种情况,我建议您在镜像变换后进行缩放: void mainImage( out vec4 fragColor, in vec2 fragCoord ){ vec2 uv = fragCoord.xy; if (uv.x + uv.y < iResolution.y) uv = iResolution.y - vec2(uv.y, uv.x); uv /= iResolution.xy; fragColor = texture(iChannel0, uv); } 请注意,我将1.0s 替换为iResolution.y因为在此坐标系中,这就是图像的高度。
这条线不成 45° 角并且没有在应有的位置结束的原因是,通过除以
fragCoord.xy
,iResolution.xy
您可以将 x 轴和 y 轴缩放不同的量。在您的情况下,由于图像的宽度大于高度,因此uv
将被水平拉伸。为了避免这种情况,我建议您在镜像变换后进行缩放:请注意,我将
1.0
s 替换为iResolution.y
因为在此坐标系中,这就是图像的高度。