three.js 之 透明物体不能正常显示
2024-08-27 21:49:52
这几天遇到一个需求,类似这个案例: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轴的呼吸效果
最新文章
- virtualBox下面安装linux系统如何共享目录
- PuppetOpenstack Newton Design Summit见闻
- .net别样外观控件包DotNetBar
- BZOJ 3402: [Usaco2009 Open]Hide and Seek 捉迷藏
- BatteryWarning 电池预警
- Python 函数简介之一
- BZOJ 4078: [Wf2014]Metal Processing Plant [放弃了]
- 如何用java实现一个p2p种子搜索(4)-种子获取
- PC端实现微信登录浅析
- php 定时任务
- Ansible安装及OS规划
- JavaScript 数组(Array)方法汇总
- hadoop java上传文件
- 10分钟开发 GPS 应用,了解一下
- java 定时执行
- Unbound服务的安装与运行管理
- idea ssm项目出现日志中文乱码,封装的json中的msg字段中文乱码(但是json封装的bean中的字段不乱码)等其他各种项目下的中文乱码解决方案
- mysql 数据操作 单表查询 limit 练习
- 腾讯云的对象存储COS
- Jquery validation自定义验证