问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

threejs画线抖动

发布网友 发布时间:2023-04-30 15:36

我来回答

1个回答

热心网友 时间:2023-10-09 10:42

Three中绘制线,是采用instance方式来绘制的,每个线段作为一个instance进行绘制,每个instance通过着色器来生成虚线效果。

绘制LineGeometry时,LineMaterial中可以通过指定dashed来将线样式渲染为虚线。直接打开LineMaterial.js文件可以看到,fragmentshader中通过对vLineDistance + dashOffset取余来划分虚线段,即超过dashsize的像素直接丢弃不进行渲染。

if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX
1
1
通过修改vLineDistance + dashOffset部分,即对这一部分累加距离,同时累加的距离同时间相关即可实现dash部分的移动。

这里我简化直接将丢弃的部分设置为绿色,同时将vLineDistance + dashOffset修改为:

if ( mod( vLineDistance + dashOffset + elasptime, dashSize + gapSize ) > dashSize ) {lxs_color.r=0.;lxs_color.g=1.;lxs_color.b=0.;} //discard; // todo - FIX

其中elasptime为渲染时间,类型为float,lxs_color线段颜色,类型为vec3

同时将修改后的颜色赋值给gl_FragColor,gl_FragColor = vec4( lxs_color, diffuseColor.a );

到此,着色器部分修改完成.

将LineMaterial.js中的UniformsLib.Line中补充属性elasptime。同时在LineMaterial原型上添加属性elasptime,即可,完成对LineMateial的修改。

UniformsLib.line = {

linewidth: { value: 1 },
resolution: { value: new Vector2( 1, 1 ) },
dashScale: { value: 1 },
dashSize: { value: 1 },
dashOffset: { value: 0 },
gapSize: { value: 1 }, // todo FIX - maybe change to totalSize
opacity: { value: 1 },
elasptime: { value: 0 },

};
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
elasptime:{
enumerable:true,
get:function(){
return this.uniforms.elasptime.value;
},
set:function(value){
this.uniforms.elasptime.value=value;
}
}
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
使用修改后的Material

这里直接使用项目中自带的webgl_lines_fat.html,来进行测试。将animate方法中添加itimes作为渲染时间,用来对应material中的elasptime,使用如下代码传入matLine.elasptime=itimes/1000.;,打开页面,勾选dashed选项时,即可看到流动效果。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...人的五感(视觉、听觉、嗅觉、味觉、触觉)是怎么接收外界刺激,并转... 2024法考中法学类专业指什么 14岁女孩发育有点快啊怎么办? 14岁1米58已经开始发育了,算不算正常,还长高吗 怎样能瘦大腿同时又不长小腿 吃完冰淇淋牙疼是怎么回事 原神4星角色排名-原神4星角色推荐 如何介绍动人的秋色? 在你的家乡,秋天最动人的景色是什么呢? 别人让猪咬了怎么安慰 泸定桥有多少米长 电子显示屏的计算方法 没有身份证可以去北京玩吗? 喝酸奶有助于消除青春痘吗? photoshop能设计字体吗 可以把QQ下载到桌面上,然后弄到手机上吗?求大神帮助 光遇买号需要注意什么 诛仙2从玩家手里购买账号我该注意什么。 _舛的拼音狐 _舛的拼音是什么 舛_的拼音狐 舛_的拼音是什么 舛怎么读 舛的拼音是什么 梦见郁可唯的预兆 梦见陈镔的预兆 梦见陈媛媛的预兆 梦见陈雨的预兆 梦见陈的预兆 梦见唯雪的预兆 梦见坐船遇见陈抟的预兆 梦见陈唯骂我的预兆 少儿简单英语日常口语【5篇】 李白的《战城南》的ppt 打了百草枯的草地里有洋葱草很高很密地里的洋葱还可以食用吗 乙氧氟草醚在葱苗播种后出苗前能用吗136732178871? 三下的面积的明信片怎么画 明信片手抄报 神笔马良的主人公明信片怎么画 网线的质量和网速有关系吗? 电视剧《天下第一》饰演万三千的那人叫什么名字? 银杏是被子植物? 新农村描写词语 youth在营业悖论里是第几章 youth是什么文体 狗狗常跑到小区路口是什么原因? 三个月大的小狗可以长跑吗? 高加索犬可以长跑吗? 《诫子书》原文翻译赏析,诫子书全诗的意思 关于古诗句 〈诫子书〉 “宁静以致远”的上句是什么 党服务群众资金申请类别 法治乡村振兴为民办实事项目申报表怎么填 乡村振兴补助资金发展种植类产业项目资金能否支出肥料费用