纹理流动扭曲

小日子3D网页做的不错 复刻!- by three.js


在这里插入图片描述

扭曲shader

		this.uniforms = {
            tDiffuse: { value: null },
            tPictureScene: { value: null },
            tMouseTexture: { value: params.mouseTexture.texture },
            paper: {
                value: ThreeHelper.instance.loadTexture("/public/textures/paper.png", (t) => {
                    t.colorSpace = THREE.SRGBColorSpace;
                    t.wrapS = t.wrapT = THREE.RepeatWrapping;
                }),
            },
            iTime: params.iTime,
            ease: {
                value: 0.0,
            },
            distA: {
                value: 0.6,
            },
            distB: {
                value: 2.5,
            },
            strength: {
                value: 0.05,
            },
            alpha: {
                value: 1,
            },
        };

        this.material = new THREE.ShaderMaterial({
            uniforms: this.uniforms,
            vertexShader: /* glsl */ `
                varying vec2 vUv;

                void main() {
                    vUv = uv;

                    vec3 transform = position;

                    vec4 modelPosition = vec4(transform, 1.0);

                    vec4 modelViewPosition = modelViewMatrix * modelPosition;

                    gl_Position = projectionMatrix * modelViewPosition;

                }
            `,
            fragmentShader: /* glsl */ `
                varying vec2 vUv;
            
                uniform sampler2D tDiffuse;
                uniform sampler2D tPictureScene;
                uniform sampler2D paper;
                uniform sampler2D tMouseTexture;
                uniform float iTime;
                uniform float iProgress;
                uniform float ease;
                uniform float distA;
                uniform float distB;
                uniform float alpha;
                uniform float strength;
                uniform float isMelting;

                void main() {
                    vec2 ppp = -1.0 + 2.0 * vUv;
                    float wScale = 1.6;

                    ppp += 0.1 * cos( ( 1.5 * wScale ) * ppp.yx + 1.1 * iTime + vec2(0.1,1.1) );
                    ppp += 0.1 * cos( ( 2.3 * wScale ) * ppp.yx + 1.3 * iTime + vec2(3.2,3.4) );
                    ppp += 0.1 * cos( ( 2.2 * wScale ) * ppp.yx + 1.7 * iTime + vec2(1.8,5.2) );
                    ppp += distA * cos( ( distB * wScale ) * ppp.yx + 1.4 * iTime + vec2(6.3,3.9) );
                    
                    float r = length( ppp );
                	float mixEase = max(0.06,ease);
                    
                    float vx = (vUv.x * mixEase) + (r * (1.0 - mixEase));
                    float vy =  vUv.y * mixEase;

                    // vec2 effectUv = vec2(vx, vy) + strength * vec2(mfSin, mfSin);
                    vec2 effectUv = vec2(vx, vy);

                    // effectUv = mix(vUv,effectUv,isMelting);

                    vec3 paperColor = texture2D(paper,vUv).rgb * min(iTime * 0.01,0.03);

                    vec3 diffuseColor = texture2D(tDiffuse,vUv).rgb;
                    vec3 MouseTexture = texture2D(tMouseTexture,vUv).rgb * strength;

	                float mfSin = sin(MouseTexture.r);

                    effectUv += vec2(mfSin, mfSin);
                    
                    vec4 color = texture2D(tPictureScene,effectUv).rgba;
                    
                    // float brightness = getBrightness(color);

                    gl_FragColor = vec4(paperColor + color.rgb + diffuseColor, color.a * alpha); 
                    // gl_FragColor = vec4(MouseTexture, color.a * alpha); 
                }
            `,
            transparent: true,
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值