使用GLSL,如何制作类似透视弯曲的效果

问题描述 投票:0回答:1

我正在尝试制作一个与此类似的透视弯曲 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 shader fragment-shader perspective
1个回答
0
投票

直线不是 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
,因为在这个坐标系中,这就是图像的高度。

© www.soinside.com 2019 - 2024. All rights reserved.