Threejs—BIM管道流向动态效果

  • Threejs—BIM管道流向动态效果

Threejs—BIM管道流向动态效果

BIM管道流向主要是描述管道内液体流动方向的一个业务场景,

在BIM管道分析展示中一个比较常用的场景,这次基于threejs的纹理流动,实现一版效果,主要如下:

原理很简单就是借助TubeGeometry,配合MeshPhongMaterial材质,在设置texture 的时候,给一个循环函数,让纹理的offset(偏移)每次都递增,就可以达到感觉有一个流动的特效。

// 此部分为了展示为hardcodeconst pathArr = [4624.99, 2329.38, -5843.11,4624.99, 4643.14, -5843.11,1437.47, 4643.14, -5819.36,1413.69, 4643.14, -1854.40,-6983.28, 4643.14, -1854.04,-7078.43, 4643.14, 2149.46]const  radius =  500

核心代码函数createTube如下

// 动态创建一个管道function createTube(pathArr, radius) {let curveArr = []// 三个一组取出curve数据for(let i=0; i < pathArr.length; i+=3) {curveArr.push(new THREE.Vector3(pathArr[i], pathArr[i+1], pathArr[i+2]))}var curve = new THREE.CatmullRomCurve3(curveArr);/*** TubeGeometry(path : Curve, tubularSegments : Integer, radius : Float, radialSegments : Integer, closed : Boolean)*/var tubeGeometry = new THREE.TubeGeometry(curve, 100, radius, 50, false);var textureLoader = new THREE.TextureLoader();var texture = textureLoader.load(`${process.env.BASE_URL}imgLib/arrow.png`);// 设置阵列模式 RepeatWrappingtexture.wrapS = THREE.RepeatWrappingtexture.wrapT = THREE.RepeatWrapping// 设置x方向的重复数(沿着管道路径方向)// 设置y方向的重复数(环绕管道方向)texture.repeat.x = 10;texture.repeat.y = 4;// 设置管道纹理偏移数,便于对中texture.offset.y = 0.5;var tubeMaterial = new THREE.MeshPhongMaterial({map: texture,transparent: true,});var tube = new THREE.Mesh(tubeGeometry, tubeMaterial);// 使用加减法可以设置不同的运动方向setInterval(() => {texture.offset.x -= 0.0076})return tube}

具体业务中需要定位组织数据管道路径curve,可以从boundingbox中求出一个外接圆,进而套用这个方法生成流动特效,注意组件销毁时候的setInterval函数的清除避免内存泄漏。


BIM树洞

做一个静谧的树洞君

用建筑的语言描述IT事物;

用IT的思维解决建筑问题;

共建BIM桥梁,聚合团队。

本学习分享资料不得用于商业用途,仅做学习交流!!如有侵权立即删除!!


  • 微信公众号: BIM树洞

  • 知乎专栏:BIM树洞

  • 气氛组博客:http://www.31bim.com

  • BIM应用及咨询,CAD,Revit, OpenGL,图形开发交流,加Q群1083064224

Threejs—BIM管道流向动态效果相关推荐

  1. 你所不知道的ndJSON:序列化与管道流

    一直以为对JSON所有的语法都了如指掌,毕竟json的标准用一只手都数的过来,直到我发现了一个叫ndJSON的标准,简单说,以下2种语法都是合法的: 图一:json格式 图二:ndjson格式 其中图 ...

  2. 基于VS2019 C++的跨平台(Linux)开发(1.5)——管道

    一.管道概述 1.1.管道概念 管道是Unix中最古老的进程间通信的形式.我们把从一个进程连接到另一个进程的一个数据流(文件IO流)称为一个"管道". 1.2.管道特点 管道是半双 ...

  3. nodejs-stream部分

    参考: https://blog.csdn.net/eeewwwddd/article/details/81042225 http://nodejs.cn/api/stream.html#stream ...

  4. 多个线程访问统一对象的不同方法_不会多线程还想进BAT?精选19道多线程面试题,有答案边看边学...

    一. Java程序如何停止一个线程? 建议使用"异常法"来终止线程的继续运行.在想要被中断执行的线程中, 调用 interrupted()方法,该方法用来检验当前线程是否已经被中断 ...

  5. 带wiringPi库的交叉编译

    WiringPi的下载--网盘提取 链接:https://pan.baidu.com/s/1cPIt-xZLye1DAQjq2yKzeg 提取码:35vt (这个库不是很好,链接的库的格式不对,是宿主 ...

  6. linux 进程通信 pipe

    pipe函数 管道函数 man pipe #include <unistd.h> int pipe(int pipefd[2]);参数介绍:pipefd读写文件描述符,0-代表读, 1-代 ...

  7. npm以及gulp相关操作

    在工作流相关的第一篇博客中,我们安装了nodejs的环境,那么nodejs自带的npm是一个功能十分强大的管理器,它已经不仅仅是局限于nodejs的版本管理器了,那么当现在我们可以通过npm来下载我们 ...

  8. Oozie-4.1.0-cdh5.5.2 安装部署使用

    文章目录 一.Hadoop常见调度框架 1.Work Flow流程图: 2.Oozie有几个主要概念: 二.Oozie安装 1.编译源码,解压压缩包: 2.详细配置: (1)生成mysql数据表(oo ...

  9. 新一代三维GIS技术体系再升维

    编者按:在2018 GIS 软件技术大会上,超图发布了SuperMap GIS 9D(2019)系列产品,该版本全面拥抱空间大数据技术,并在微服务.容器化.云原生.自动化运维等方面全新升级,进一步优化 ...

最新文章

  1. 公开课 | 旷视科技产品总监:计算机视觉如何赋能身份验证场景
  2. 【转】做正确的事情,等着被开除(Do the right thing, Wait to get fired)
  3. Linux系统下配置Java环境
  4. Uva 11396 爪分解
  5. PyTorch : torch.nn.xxx 和 torch.nn.functional.xxx
  6. office数据集dslr_DSLR的完整形式是什么?
  7. Java中HashMap的常用操作
  8. JVM 一套卷,助你快速掌握优化法则
  9. C#3.0新特性 和 Javascript
  10. 第3章[3.6] 说透Ext JS的窗口及对话框用法
  11. JavaMail(2)——给多人发送、抄送
  12. JavaScript自定义事件
  13. Python-Matplotlib可视化(6)——自定义坐标轴让统计图清晰易懂
  14. Perl语言入门(第五版) 中文版PDF下载 (原书名:Learning Perl,5/e)
  15. MFC对磁盘测速工具CrystalDiskMark6_0_0的工厂方式控制源代码 同时控制 8个窗口,界面同步显示,比较完整点的版本
  16. Alpha测试 / Beta测试 / 黑盒测试 /白盒测试概述
  17. 【SCIENTIFIC AMERICAN December 2019】【NUCLEAR PHYSICS】Proton Size Puzzle
  18. 输入年月日实现计算这是一年的第几天
  19. 初识OpenGL (3)片段着色器(Fragment Shader)
  20. 基于加密短信验证码的蓝牙智能锁设计

热门文章

  1. vscode运行python终端无显示_vscode的终端不显示内容怎么办
  2. DevFest14 珠海 Wear 主题大会总结
  3. 曾辉机器人_工业机器人论文范文
  4. 软件性能测试方案怎么编写?
  5. ZETA 一种基于 UNB 的低功耗广域网 (LPWAN)技术
  6. linkis和scripts使用中遇到问题解决办法
  7. 20171225 股票操作日志
  8. Windows 下编程检测显示器信息及插拔
  9. 用Java计算二月份有多少天
  10. 人脸识别 | Hi 你说,彭于晏是猫咪还是人,还是?