Threejs实现模拟管道液体流动

简介: Threejs实现模拟管道液体流动

1,介绍


该示例使用的是 r95版本Three.js库。

主要实现功能:模拟管道液体流动。效果图如下:



2,主要说明



模拟管道液体流动实现步骤:创建管道,添加纹理,位移纹理实现流动效果。

如下函数:定义管道位置坐标,创建管道并赋予材质,并添加到场景中


function initTubeModel() {
  var pointsArr = [
    [42, 0, 10],
    [21, 0, 10],
    [21, 0, 1],
    [-3, 0, 1],
    [-3, 0, -18],
    [-10, 0, -18],
    [-10, 0, 5],
    [1, 0, 5],
    [1, 0, 24],
    [-27, 0, 24],
    [-27, 0, 18],
    [-46, 0, 19],
    [-46, 0, -4],
    [-25, 0, -6],
    [-25, 0, -19],
    [-35, 0, -20],
    [-35, 0, -26],
    [-30, 0, -30],
    [3, 0, -30]
  ];
  var curve = createPath(pointsArr)
  var tubeGeometry = new THREE.TubeGeometry(curve, 1000, 0.5, 100, false);
  var textureLoader = new THREE.TextureLoader();
  texture = textureLoader.load('assets/textures/arrow1.jpg'); //./ZS箭头.svg  ./arrow.jpg
  // 设置阵列模式为 RepeatWrapping
  texture.wrapS = THREE.RepeatWrapping
  texture.wrapT = THREE.RepeatWrapping
  texture.repeat.x = 50;
  texture.repeat.y = 2;
  texture.offset.y = 0.5;
  var tubeMaterial = new THREE.MeshPhongMaterial({
    map: texture,
    transparent: true,
    color: 0x47d8fa,
    side: THREE.DoubleSide,
    //opacity: 0.4,
  });
  // 设置数组材质对象作为网格模型材质参数
  var mesh = new THREE.Mesh(tubeGeometry, tubeMaterial); //网格模型对象Mesh
  mesh.position.y = 2;
  mesh.rotateZ(3.14);
  mesh.scale.set(2, 2, 2);
  scene.add(mesh); //网格模型添加到场景中
}


function createPath(pointsArr) {
  pointsArr = pointsArr.map((point) => new THREE.Vector3(...point)); // 将参数数组转换成点数组的形式
  // 方法一:自定义三维路径 curvePath
  const path = new THREE.CurvePath();
  for (let i = 0; i < pointsArr.length - 1; i++) {
    const lineCurve = new THREE.LineCurve3(pointsArr[i], pointsArr[i + 1]); // 每两个点之间形成一条三维直线
    path.curves.push(lineCurve); // curvePath有一个curves属性,里面存放组成该三维路径的各个子路径
  }
  return path;
}

流动效果关键一步,动态刷新调用,位移材质


function renderScene() {
  TWEEN.update();
  orbit.update();
  // 使用requestAnimationFrame函数进行渲染
  requestAnimationFrame(renderScene);
  renderer.render(scene, camera);
  texture.offset.x -= 0.04
}
目录
相关文章
Threejs实现模拟河流,水面水流,水管水流,海面
Threejs实现模拟河流,水面水流,水管水流,海面
1736 0
Threejs实现模拟河流,水面水流,水管水流,海面
|
1月前
|
SQL 算法
LabVIEW开发机械手圆周插补轨迹控制
LabVIEW开发机械手圆周插补轨迹控制
19 0
|
1月前
|
数据采集 编解码 数据处理
LabVIEW并行模拟和数字数据流的获取和分析 人类脑电波和决策行为
LabVIEW并行模拟和数字数据流的获取和分析 人类脑电波和决策行为
20 0
|
1月前
|
传感器
光学雨量计的工作机制可以简单概括
光学雨量计的工作机制可以简单概括
光学雨量计的工作机制可以简单概括
|
11月前
|
算法 5G
智能超表面(RIS)辅助双功能雷达和通信波束形成设计(Matlab代码实现)
智能超表面(RIS)辅助双功能雷达和通信波束形成设计(Matlab代码实现)
258 0
|
11月前
|
传感器 算法
【改进的多同步挤压变换】基于改进多同步挤压的高分辨率时频分析工具,用于分析非平稳信号(Matlab代码实现)
【改进的多同步挤压变换】基于改进多同步挤压的高分辨率时频分析工具,用于分析非平稳信号(Matlab代码实现)
118 0
|
12月前
|
数据可视化 C++
【变化检测】多时相遥感影像变化检测 Qt界面可视化 / 实现卷帘功能(附有完整代码)
【变化检测】多时相遥感影像变化检测 Qt界面可视化 / 实现卷帘功能(附有完整代码)
|
机器学习/深度学习 传感器 算法
【信号跟踪】基于二阶锁相环辅助三阶锁频环加码环高动态GNSS信号跟踪附Matlab代码
【信号跟踪】基于二阶锁相环辅助三阶锁频环加码环高动态GNSS信号跟踪附Matlab代码
|
机器学习/深度学习 人工智能 算法
将有色液体图像转换成透明液体,CMU教机器人准确掌控向杯中倒多少水
将有色液体图像转换成透明液体,CMU教机器人准确掌控向杯中倒多少水
|
传感器 芯片
【微机原理资料分享】基于8086多路温度采集系统设计(仿真、程序、报告)
以8088 CPU 为核心设计一个温度采集系统,系统可以实现一路温度的采集,在3位LED显示器上显示当前温度。 本设计所用器件主要有传感器,A/D转换器,8088CPU,可编程并行接口8255,显示器等。首先传感器把所测的温度转换为电压,输入A/D转换器中进行转换,然后再把得到的二进制数经过CPU在数码管上显示出来。 本设计共分以下几个模块:8088主控模块、A/D转换模块、并行接口模块、显示模块。
314 0
【微机原理资料分享】基于8086多路温度采集系统设计(仿真、程序、报告)

热门文章

最新文章