当前位置:网站首页>threejs+shader 曲线点运动,飞线运动
threejs+shader 曲线点运动,飞线运动
2022-08-09 10:50:00 【榴莲不好吃】
飞线-从开始到结束都显示
别忘了设置
transparent: true,
depthWrite: false,
blending: THREE.AdditiveBlending,
vertexShader: ` attribute float aIndex; uniform float uTime; uniform float uLength; uniform float uScale; varying float vSize; void main() { vec4 viewPosition = viewMatrix * modelMatrix * vec4(position,1); gl_Position = projectionMatrix * viewPosition; vSize = aIndex- uTime; if(vSize<=0.0){ vSize = vSize + uLength; }else{ vSize = 0.0; } gl_PointSize = vSize * uScale; } `,
fragmentShader: ` varying float vSize; uniform vec3 uColor; void main(){ float distanceToCenter = distance(gl_PointCoord,vec2(0.5)); float alpha = 1.0 - (distanceToCenter*2.0); gl_FragColor = vec4(1,0,0,alpha); if(vSize<=0.0){ gl_FragColor = vec4(1,0,0,0); }else{ // // gl_FragColor = vec4(uColor,1.0); gl_FragColor = vec4(uColor,alpha); // 圆点点 } } `
飞线-快结束的时候淡出
fragmentShader: ` varying float vSize; uniform float uTime; uniform float uLength; uniform vec3 uColor; void main(){ float distanceToCenter = distance(gl_PointCoord,vec2(0.5)); float alpha = 1.0 - (distanceToCenter*2.0); if(vSize<=0.0){ gl_FragColor = vec4(1,0,0,0); }else{ float s = 0.9; if(uTime > uLength *s){ gl_FragColor = vec4(uColor, alpha - ((uTime - uLength * s) / (uLength * (1.0-s)))); // 圆点 }else{ gl_FragColor = vec4(uColor,alpha); // 圆点 } } } `,
飞线- 显示部分点,前面的点大,后面的点小
vertexShader: ` attribute float aIndex; uniform float uTime; uniform float uLength; uniform float uScale; varying float vSize; void main() { vec4 modelPosition = modelMatrix * vec4( position, 1.0 ); // 顶点坐标 gl_Position = projectionMatrix * viewMatrix * modelPosition; float size = aIndex - uTime; if(size < 0.0) { size = size + uLength; } vSize = (size - uLength / 2.0) * uScale; // 设置二分之一的点为不可见 gl_PointSize = vSize; } `,
fragmentShader: ` varying float vSize; uniform vec3 uColor; void main(){ float distanceToCenter = distance(gl_PointCoord,vec2(0.5,0.5)); float alpha = 1.0 - (distanceToCenter*2.0); if(vSize<=0.0){ gl_FragColor = vec4(1,0,0,0); }else{ gl_FragColor = vec4(uColor,alpha); } } `,
飞线- 点越小越透明,形成一个小尾巴
vertexShader: ` attribute float aIndex; uniform float uTime; uniform float uLength; uniform float uScale; varying float vSize; void main() { vec4 modelPosition = modelMatrix * vec4( position, 1.0 ); // 顶点坐标 gl_Position = projectionMatrix * viewMatrix * modelPosition; float size = aIndex - uTime; if(size < 0.0) { size = size + uLength; } vSize = (size - uLength / 2.0) * uScale; // 设置二分之一的点为不可见 gl_PointSize = vSize; } `,
fragmentShader: ` varying float vSize; uniform float uLength; uniform float uScale; void main(){ if(vSize <= 0.0){ gl_FragColor = vec4(1,1,0,0); }else{ // 根据点的大小设置透明度,点越小越透明 float opacity = uLength / 2.0 * uScale; gl_FragColor = vec4(1,1,0,vSize / opacity); } } `,
保留曲线路径
vertexShader: ` attribute float aIndex; uniform float uTime; uniform float uLength; uniform float uScale; varying float vSize; void main() { vec4 modelPosition = modelMatrix * vec4( position, 1.0 ); // 顶点坐标 gl_Position = projectionMatrix * viewMatrix * modelPosition; float size = aIndex - uTime; if(size < 0.0) { size = size + uLength; } vSize = (size - uLength / 2.0) * uScale; // 设置二分之一的点为不可见 gl_PointSize = vSize<=2.0?2.0:vSize; } `,
fragmentShader: ` varying float vSize; uniform vec3 uColor; void main(){ float distanceToCenter = distance(gl_PointCoord,vec2(0.5,0.5)); float alpha = 1.0 - (distanceToCenter*2.0); if(vSize<=2.0){ gl_FragColor = vec4(1,0,1,alpha); }else{ gl_FragColor = vec4(uColor,alpha); } } `,
点在线上运行
vertexShader: ` attribute float aIndex; uniform float uTime; uniform float uLength; uniform float uScale; varying float vSize; void main() { vec4 modelPosition = modelMatrix * vec4( position, 1.0 ); // 顶点坐标 gl_Position = projectionMatrix * viewMatrix * modelPosition; float size = aIndex - uTime; if(size < 0.0) { size = size + uLength; } vSize = (size - (uLength * 0.99)); // 只显示0.01的点 gl_PointSize = vSize<=2.0?2.0:vSize; } `,
fragmentShader: ` varying float vSize; uniform vec3 uColor; void main(){ float distanceToCenter = distance(gl_PointCoord,vec2(0.5,0.5)); float alpha = 1.0 - (distanceToCenter*2.0); if(vSize<=2.0){ gl_FragColor = vec4(1,0,1,alpha); }else{ gl_FragColor = vec4(uColor,alpha); } } `,
边栏推荐
- 聚类了解
- 机器学习--线性回归(Linear Regression)
- 绝了,这套RESTful API接口设计总结
- [Error record] Solve the problem that ASRock J3455-ITX cannot be turned on without a monitor plugged in
- unix系统编程 第十五章 15.2管道
- PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization Paper Reading
- 情感分析SowNLP词库
- 多商户商城系统功能拆解26讲-平台端分销设置
- prometheus接入mysqld_exporter
- 深度学习--生成对抗网络(Generative Adversarial Nets)
猜你喜欢
PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization Paper Reading
LM小型可编程控制器软件(基于CoDeSys)笔记二十六:plc的数据存储区(模拟量输入通道部分)
How tall is the B+ tree of the MySQL index?
类与对象 (下)
信息系统项目的十大管理
深度学习--生成对抗网络(Generative Adversarial Nets)
OpenSSF's open source software risk assessment tool: Scorecards
985毕业,工作3年,分享从阿里辞职到了国企的一路辛酸和经验
相关系数计算,热力图绘制,代码实现
【原创】VMware Workstation实现Openwrt软路由功能,非ESXI,内容非常详细!
随机推荐
OneNote 教程,如何在 OneNote 中搜索和查找笔记?
Unix System Programming Chapter 15 15.2 Pipes
【原创】VMware Workstation实现Openwrt软路由功能,非ESXI,内容非常详细!
为什么组合优先于继承
性能测试(04)-表达式和业务关联-JDBC关联
ThreadLocal及其内存泄露分析
Official explanation, detailed explanation and example of torch.cat() function
Shell script combat (2nd edition) / People's Posts and Telecommunications Press Script 1 Find programs in the PATH
1006 Sign In and Sign Out (25分)
信息系统项目的十大管理
聚类了解
Solve 1. tensorflow runs using CPU but not GPU 2. GPU version number in tensorflow environment 3. Correspondence between tensorflow and cuda and cudnn versions 4. Check cuda and cudnn versions
笔记本电脑使用常见问题,持续更新
非科班毕业生,五面阿里:四轮技术面+HR一面已拿offer
Cluster understanding
torch.cat()函数的官方解释,详解以及例子
1003 Emergency (25分)
性能测试(01)-jmeter元件-线程组、调试取样器
深度学习--自编码器(AutoEncoder)
1008 Elevator (20分)