我正在尝试制作一个与此类似的透视弯曲 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);
}
上面的代码没有达到我想要的效果;感谢您的帮助!
直线不是 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.0
替换为 iResolution.y
,因为在这个坐标系中,这就是图像的高度。