shader到three模板

顶点着色器保持默认;
片元着色器使用mainImage()中的代码,不要括号内的out,in声明的变量,但是需要外部变量。
把fragColor 换成 gl_FragColor。
iResolution是设备视口的分辨率(像素),在three中可以通过uniform的方式传入。
iTime是一个变量(shadertoy自带的变量),着色器播放时间(秒),在three中可以通过uniform的方式传入。
fragCoord可以改成uv坐标,直接从顶点着色器传递uv坐标给片元着色器。
删除无用的变量声明,如iTimeDelta,iTimeDelta等。
    /* 顶点着色器 */
    const vertexShader=`
        varying vec2 vUv;
        void main(){
            vUv = uv;
            gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
        }
    `;
    /* 片元着色器 */
    const fragmentShader=`
        varying vec2 vUv;
        
        uniform vec3      iResolution;           // 视口分辨率(像素)
        uniform float     iTime;                 // 着色器播放时间(秒)
        const float rings = 5.0;    //任何时刻都是完整的白环数
        const float velocity=4.;    //跳动速率
        const float b = 0.003;        //平滑边界的大小
        void main(){
            vec2 position = vUv.xy/iResolution.xy;
            float aspect = iResolution.x/iResolution.y;
            position.x *= aspect;
            float dist = distance(position, vec2(aspect*0.5, 0.5));
            float offset=iTime*velocity;
            float conv=rings*4.;
            float v=dist*conv-offset;
            float ringr=floor(v);
            float color=smoothstep(-b, b, abs(dist- (ringr+float(fract(v)>0.5)+offset)/conv));
            if(mod(ringr,2.)==1.)
                color=1.-color;
            gl_FragColor = vec4(color, color, color, 1.);
        }
    `;
    const uniforms={
        iTime:{value:0},
        iResolution: { value: new THREE.Vector3( 1,1,1) },
    };
    setInterval(()=>{uniforms.iTime.value += 0.01;},10);//定时刷新
    const shaderMat=new THREE.ShaderMaterial({
        vertexShader,
        fragmentShader,
        uniforms
    });    
    const box=new THREE.Mesh(new THREE.BoxGeometry(10,10,10),shaderMat);
    scene.add(box);

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学过的代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值