DPS_Manage/shaders/effect2.frag

89 lines
2.3 KiB
GLSL
Raw Permalink Normal View History

2025-05-29 14:04:05 +08:00
#version 450
layout(location = 0) in vec2 fragCoord;
layout(location = 0) out vec4 fragColor;
uniform mat4 qt_Matrix;
uniform float qt_Opacity;
uniform vec3 iResolution; // viewport resolution (in pixels)
uniform float iTime; // shader playback time (in seconds)
//来自 https://www.shadertoy.com/view/wdyczG
#define S(a,b,t) smoothstep(a,b,t)
mat2 Rot(float a)
{
float s = sin(a);
float c = cos(a);
return mat2(c, -s, s, c);
}
// Created by inigo quilez - iq/2014
// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
vec2 hash( vec2 p )
{
p = vec2( dot(p,vec2(2127.1,81.17)), dot(p,vec2(1269.5,283.37)) );
return fract(sin(p)*43758.5453);
}
float noise( in vec2 p )
{
vec2 i = floor( p );
vec2 f = fract( p );
vec2 u = f*f*(3.0-2.0*f);
float n = mix( mix( dot( -1.0+2.0*hash( i + vec2(0.0,0.0) ), f - vec2(0.0,0.0) ),
dot( -1.0+2.0*hash( i + vec2(1.0,0.0) ), f - vec2(1.0,0.0) ), u.x),
mix( dot( -1.0+2.0*hash( i + vec2(0.0,1.0) ), f - vec2(0.0,1.0) ),
dot( -1.0+2.0*hash( i + vec2(1.0,1.0) ), f - vec2(1.0,1.0) ), u.x), u.y);
return 0.5 + 0.5*n;
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord/iResolution.xy;
float ratio = iResolution.x / iResolution.y;
vec2 tuv = uv;
tuv -= .5;
// rotate with Noise
float degree = noise(vec2(iTime*.1, tuv.x*tuv.y));
tuv.y *= 1./ratio;
tuv *= Rot(radians((degree-.5)*720.+180.));
tuv.y *= ratio;
// Wave warp with sin
float frequency = 5.;
float amplitude = 30.;
float speed = iTime * 2.;
tuv.x += sin(tuv.y*frequency+speed)/amplitude;
tuv.y += sin(tuv.x*frequency*1.5+speed)/(amplitude*.5);
// draw the image
vec3 colorYellow = vec3(.957, .804, .623);
vec3 colorDeepBlue = vec3(.192, .384, .933);
vec3 layer1 = mix(colorYellow, colorDeepBlue, S(-.3, .2, (tuv*Rot(radians(-5.))).x));
vec3 colorRed = vec3(.910, .510, .8);
vec3 colorBlue = vec3(0.350, .71, .953);
vec3 layer2 = mix(colorRed, colorBlue, S(-.3, .2, (tuv*Rot(radians(-5.))).x));
vec3 finalComp = mix(layer1, layer2, S(.5, -.3, tuv.y));
vec3 col = finalComp;
fragColor = vec4(col,1.0) * qt_Opacity;
}
void main() {
mainImage(fragColor, fragCoord);
}