这几天遇到一个需求,类似这个案例:http://www.hightopo.com/demo/FaultDetection/

就是这个透明渐变呼吸光柱,看到之后就想着写个shader材质实现透明度渐变,并随着时间微弱变化就好了,但是写完之后,透明部分的渲染却出了问题。

请先无视顶部纹理,因为这不是重点,我们可以看到同一物体在不同角度下,透明部分的渲染却不一样(某些角度下,透明部分渲染为白色)

由于刚开始百度的姿势不正确加上自己的一点小疏忽,折腾了半天,最后,还是在这篇文章中找到了答案。https://www.jianshu.com/p/5807b5f69480

答案就是为透明物体设置渲染层级。

//按层级进行先后渲染
this.renderer.sortObjects = true; //设置透明物体的渲染层级(默认是0)
cylinder.renderOrder = ;

最后奉上该呼吸效果的shader:

const Gradient = {
vs:`
varying vec3 iPosition;
void main(){
iPosition = position;
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
`,
fs:`
varying vec3 iPosition;
uniform float time;
void main(){
vec3 color = vec3(./.,./.,./.);
float height = iPosition.y + .;
float white = (distance(vec2(iPosition.x,iPosition.z),vec2(0.0))-6.0)/(6.0 * (sqrt(2.0)-1.0));
float alphax = smoothstep(0.0,1.0,white );
float alphay = smoothstep(1.0,0.0,height/25.0 + sin(time) * 0.2 );
if(height<0.1||height>29.9){
discard;
}
gl_FragColor = vec4(color +vec3(.,.,.)* alphax * 0.0008,alphay*0.7);
}
`
}

注意:

alphax是为了给x轴添加红色权重,alphay是y轴的呼吸效果

最新文章

  1. virtualBox下面安装linux系统如何共享目录
  2. PuppetOpenstack Newton Design Summit见闻
  3. .net别样外观控件包DotNetBar
  4. BZOJ 3402: [Usaco2009 Open]Hide and Seek 捉迷藏
  5. BatteryWarning 电池预警
  6. Python 函数简介之一
  7. BZOJ 4078: [Wf2014]Metal Processing Plant [放弃了]
  8. 如何用java实现一个p2p种子搜索(4)-种子获取
  9. PC端实现微信登录浅析
  10. php 定时任务
  11. Ansible安装及OS规划
  12. JavaScript 数组(Array)方法汇总
  13. hadoop java上传文件
  14. 10分钟开发 GPS 应用,了解一下
  15. java 定时执行
  16. Unbound服务的安装与运行管理
  17. idea ssm项目出现日志中文乱码,封装的json中的msg字段中文乱码(但是json封装的bean中的字段不乱码)等其他各种项目下的中文乱码解决方案
  18. mysql 数据操作 单表查询 limit 练习
  19. 腾讯云的对象存储COS
  20. Jquery validation自定义验证

热门文章

  1. bat 获取当前文件夹的文件名
  2. docker 在push镜像到本地registry出现的500 Internal Server Error
  3. Python 列表和元组 (2) 持续更新
  4. js原型补充
  5. 题解 [51nod1385] 凑数字
  6. MFC 类内线程函数
  7. PHP mysqli_fetch_assoc() 函数
  8. JPA规则
  9. Python: 关于 sys.stdout.flush()
  10. Maximum GCD(UVA 11827)