【无标题】

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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值