Threejs 实现扩散圆环效果

ThreeJS 实现扩散圆效果

代码实现
1//r 圆半径 2//init 初始圆半径 3//ring 圆环大小 4//color 颜色 THREE.Vector3 5//speed 速度 6function scatterCircle(r, init, ring, color, speed) { 7 var uniform = { 8 u_color: { value: color }, 9 u_r: { value: init }, 10 u_ring: { 11 value: ring, 12 }, 13 }; 14 15 var vs = ` 16 varying vec3 vPosition; 17 void main(){ 18 vPosition=position; 19 gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); 20 } 21 `; 22 var fs = ` 23 varying vec3 vPosition; 24 uniform vec3 u_color; 25 uniform float u_r; 26 uniform float u_ring; 27 28 void main(){ 29 float pct=distance(vec2(vPosition.x,vPosition.y),vec2(0.0)); 30 if(pct>u_r || pct<(u_r-u_ring)){ 31 gl_FragColor = vec4(1.0,0.0,0.0,0); 32 }else{ 33 float dis=(pct-(u_r-u_ring))/(u_r-u_ring); 34 gl_FragColor = vec4(u_color,dis); 35 } 36 } 37 `; 38 const geometry = new THREE.CircleGeometry(r, 120); 39 var material = new THREE.ShaderMaterial({ 40 vertexShader: vs, 41 fragmentShader: fs, 42 side: THREE.DoubleSide, 43 uniforms: uniform, 44 transparent: true, 45 depthWrite: false, 46 }); 47 const circle = new THREE.Mesh(geometry, material); 48 49 function render() { 50 uniform.u_r.value += speed || 0.1; 51 if (uniform.u_r.value >= r) { 52 uniform.u_r.value = init; 53 } 54 requestAnimationFrame(render); 55 } 56 render(); 57 58 return circle; 59} 60
使用
1let circle = scatterCircle(1, 0.1, 0.3, new THREE.Vector3(0, 1, 1), 0.02); 2circle.position.set(x, y, z); 3scene.add(circle);
点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java GUI初试

学面向对象,以java为设计语言,虽然老师不是讲java但是还是把java的基础知识大概讲了一下,速度当然很快,很少动手实践,这是自己抽时间照着课本做的图像化界面计算圆的周长面积。/功能:测试GUI的使用,用户输入圆的半径,然后计算时间:2012.11.3作者:KDF5000文件名:Tes

Python10行代码实现视频人脸追踪打马赛克

一、背景知识1.1、headblur简介追踪人脸打马赛克需要使用headblur函数。调用语法:headblur(clip,fx,fy,rzone,rblurNone)说明:其中参数fx和fy是两个函数,该函数带参数t,用于确认t时刻需要模糊化范围的中心点位置,moviepy将对以中心点为圆心半径r\zone的圆范围内的图像进行模糊化处理,模糊化处理时

python刷题-圆的面积

问题描述给定圆的半径r,求圆的面积。输入格式输入包含一个整数r,表示圆的半径。输出格式输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。说明:在本题中,输入是一个整数,但是输出是一个实数。对于实数输出的问题,请一定看清楚实数输出的要求,比如本题中要求保留小数点后7位,则你的程序必须严格的输出7位小数,输出过多或者过少的小数位数都是不

旋转算法

一条直线通过端点绕一个半径为200的圆的圆心进行360度的旋转,在旋转的期间直线的端点一直在圆环上defineCRTSECURENOWARNINGSinclude"graphics.h"defineUSEMATHDEFINESincludestructPointdoublex;doubley;Point(void):

SVG 绘制椭圆

本节我们来学习如何在SVG中绘制椭圆,椭圆和圆形有点像,但是又不一样。圆形只有一个半径,而椭圆x轴和y轴上的半径不同,所以椭圆就是一个不规则的圆。如何绘制一个椭圆在绘制椭圆时,可以通过cx和cy属性确定椭圆的圆心,rx设置椭圆的x轴的半径,ry设置y轴的半径。