threejs实现场景扫光【光柱场景扫射】

1.创建ShaderPass对象
let SweepingLightShader = {
uniforms: {
“tDiffuse”: {type: “t”, value: 0.0},
“time”:{type: “f”, value: 1.0}
},
vertexShader:varying vec2 vUv; varying vec3 iPosition; void main(){ vUv = uv; iPosition = position; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); },
fragmentShader:`
uniform float time;
uniform sampler2D tDiffuse;
varying vec2 vUv;
varying vec3 iPosition;
void main(){
vec4 texel = texture2D(tDiffuse, vUv);
float x = iPosition.x;
float lighty = x*1.2 + time;
float alpha = abs(iPosition.y - lighty);
if(alpha < 0.1){
float a = 1.0 - alpha / 0.1;
float enda = smoothstep(0.0,1.0,a) + 0.3;
gl_FragColor = texel * enda;
}else{
gl_FragColor = texel * 0.3;
}

}
`
};
2.实例
customGrayScale = new THREE.ShaderPass(SweepingLightShader);
customGrayScale.needsUpdate=true
window.customGrayScale=customGrayScale
composer.addPass(customGrayScale);
3.animate
//扫光
var time =customGrayScale.uniforms.time.value;
if(time > 2.0){
type = ‘reduce’
}else if(time < -2.0){
type = ‘add’;
}
if(type ==‘add’){
customGrayScale.uniforms.time.value += 0.01;
}else{
customGrayScale.uniforms.time.value -= 0.01;
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果你想在飞线图上添加光柱效果,可以使用 ECharts 中的 `effectScatter` 系列来实现。下面是创建飞线光柱的步骤: 1. 引入 ECharts 库和主题样式: ```html <script src="https://cdn.jsdelivr.net/npm/echarts@5.2.0/dist/echarts.min.js"></script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.css"> ``` 2. 创建一个包含飞线图和光柱的容器: ```html <div id="chartContainer" style="width: 600px; height: 400px;"></div> ``` 3. 使用 JavaScript 代码初始化图表并设置配置项: ```javascript var chart = echarts.init(document.getElementById('chartContainer')); var option = { series: [ { type: 'lines', coordinateSystem: 'geo', data: [...], // 飞线的数据,包含起始点和终点坐标 polyline: true, // 设置为多段线模式 lineStyle: { color: '#fff', // 线条颜色 width: 1, // 线条宽度 opacity: 0.6, // 线条透明度 curveness: 0.2, // 线条曲度,值为 [0, 1],表示曲线的弯曲程度 }, }, { type: 'effectScatter', coordinateSystem: 'geo', data: [...], // 光柱的数据,包含光柱的位置坐标 symbolSize: 8, // 光柱的大小 showEffectOn: 'render', // 在渲染时显示特效 rippleEffect: { brushType: 'stroke', // 特效的绘制方式,可选值为 'stroke' 或 'fill' scale: 4, // 特效的缩放比例 }, itemStyle: { color: '#fff', // 光柱的颜色 opacity: 0.6, // 光柱的透明度 }, }, ], // 其他配置项... }; // 使用配置项绘制图表 chart.setOption(option); ``` 在上面的代码中,我们使用了两个系列类型:`lines` 和 `effectScatter`。`lines` 用于绘制飞线,`effectScatter` 用于绘制光柱特效。你可以根据需要调整数据和配置项来实现自定义的飞线光柱效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值