Translate, rotate and scale are most basic element of image effect. If you didn't understand how make effect at each pixel, please read again before post "Show Video and Image".
Translate ex)
1. Translate
Translation means each pixel move parallel on the x, y-axis. In other words, if you want to translate 0.25 on the x-axis, a pixel should point to a distance of -0.25 from the original.Translate ex)
void mainImage( out vec4 fragColor, in vec2 fragCoord ){
vec2 uv = fragCoord/iResolution.xy;
if(uv.x < 0.5){
// translate to x ( -0.25 )
uv.x += 0.25;
}else{
// translate to x ( +0.25 )
uv.x -= 0.25;
}
fragColor = texture(iChannel0, uv);
}
result)
2. Scale
Scale also has a similar concept to parallel translation. If you want to zoom in twice, each pixel should point to the coordinates of half the original coordinates.
Scale ex)
void mainImage( out vec4 fragColor, in vec2 fragCoord ){
vec2 uv = fragCoord/iResolution.xy;
if(uv.x < 0.5 && uv.y < 0.5){
uv *= 2.0;
}else{
uv /= 2.0;
}
fragColor = texture(iChannel0, uv);
}
result)
3. Rotate
mat2 rotate(float angle){
return mat2(cos(angle),-sin(angle), sin(angle),cos(angle));
}
the angle is 0.0 to 2.0. It means PI is 1.0.
Rotate ex)
#define PI 3.141592
mat2 rotate(float angle){
return mat2(cos(angle),-sin(angle), sin(angle),cos(angle));
}
void mainImage( out vec4 fragColor, in vec2 fragCoord ){
vec2 uv = fragCoord/iResolution.xy;
if(uv.x < 0.5){
uv -= vec2(0.5);
uv *= rotate(PI * 0.5);
uv += vec2(0.5);
}else{
uv -= vec2(0.5);
uv *= rotate(PI * -0.5);
uv += vec2(0.5);
}
fragColor = texture(iChannel0, uv);
}
Result )
Comments
Post a Comment