Estou tentando fazer um shader GLSL com flexão de perspectiva semelhante a este.
Original:

Flexão de perspectiva:

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);
}
O código acima não consegue exatamente o que desejo; sua ajuda é apreciada!
A razão pela qual a linha não está em um ângulo de 45° e não termina onde deveria é que, ao dividir
fragCoord.xy
poriResolution.xy
, você dimensiona os eixos xey em valores diferentes. Na sua situação, como a imagem é mais larga do que alta,uv
será esticada horizontalmente. Para evitar isso, sugiro que você faça o dimensionamento após a transformação do espelho:Observe que substituí
1.0
s poriResolution.y
, pois neste sistema de coordenadas essa é a altura da sua imagem.