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
}
目录
相关文章
|
机器学习/深度学习 传感器 数据可视化
【免费】以 3D 形式显示热图、高程或天线响应模式表面数据附matlab代码
【免费】以 3D 形式显示热图、高程或天线响应模式表面数据附matlab代码
Threejs实现模拟河流,水面水流,水管水流,海面
Threejs实现模拟河流,水面水流,水管水流,海面
2389 0
Threejs实现模拟河流,水面水流,水管水流,海面
|
2月前
ThreeJs制作管道中水流效果
这篇文章详细介绍了如何在Three.js中创建具有动态水流效果的管道模型,通过纹理贴图的移动来模拟水流的视觉效果。
119 2
ThreeJs制作管道中水流效果
|
2月前
ThreeJs制作管道水流效果
这篇文章详细说明了如何在Three.js中创建具有流动水效果的管道模型,通过使用纹理贴图的动态偏移来模拟水流的视觉效果。
79 3
|
7月前
|
算法
LabVIEW机械臂轨迹跟踪控制
LabVIEW机械臂轨迹跟踪控制
61 3
|
7月前
|
数据采集 网络协议 安全
Bently Nevada 132417-01 输入/输出模块4通道监视器输入/输出模块体系触点 行程倍增 用于将3500架置于行程中的描述
Bently Nevada 132417-01 输入/输出模块4通道监视器输入/输出模块体系触点 行程倍增 用于将3500架置于行程中的描述
|
7月前
|
传感器 数据采集 运维
LabVIEW在旋转机械故障诊断中的随机共振增强应用
LabVIEW在旋转机械故障诊断中的随机共振增强应用
41 4
|
7月前
|
SQL 算法
LabVIEW开发机械手圆周插补轨迹控制
LabVIEW开发机械手圆周插补轨迹控制
45 0
|
7月前
|
数据采集 编解码 数据处理
LabVIEW并行模拟和数字数据流的获取和分析 人类脑电波和决策行为
LabVIEW并行模拟和数字数据流的获取和分析 人类脑电波和决策行为
46 0
|
前端开发 芯片
【芯片前端】保持代码手感——不重叠序列检测
【芯片前端】保持代码手感——不重叠序列检测