threejs圆形扩散效果

//圆环扩散
let circle = scatterCircle(251, 0.120, 0.330, new THREE.Vector3(0, 1, 1), 5.02);
circle.position.set(0, 0, 0);
scene.add(circle);

//r 圆半径
//init 初始圆半径
//ring 圆环大小
//color 颜色 THREE.Vector3
//speed 速度
function scatterCircle(r, init, ring, color, speed) {
var uniform = {
u_color: { value: color },
u_r: { value: init },
u_ring: {
value: ring,
},
};
var vs = varying vec3 vPosition; void main(){ vPosition=position; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); } ;
var fs = `
varying vec3 vPosition;
uniform vec3 u_color;
uniform float u_r;
uniform float u_ring;

void main(){
        float pct=distance(vec2(vPosition.x,vPosition.y),vec2(0.0));
        if(pct>u_r || pct<(u_r-u_ring)){
            gl_FragColor = vec4(1.0,0.0,0.0,0);
        }else{
            float dis=(pct-(u_r-u_ring))/(u_r-u_ring);
            gl_FragColor = vec4(u_color,dis);
        }
    }
`;
const geometry = new THREE.CircleGeometry(r, 120);
var material = new THREE.ShaderMaterial({
    vertexShader: vs,
    fragmentShader: fs,
    side: THREE.DoubleSide,
    uniforms: uniform,
    transparent: true,
    depthWrite: false,
});
const circle = new THREE.Mesh(geometry, material);
function render() {
    uniform.u_r.value += speed || 0.1;
    if (uniform.u_r.value >= r) {
        uniform.u_r.value = init;
    }
    requestAnimationFrame(render);
}
render();
return circle;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值