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实现模拟河流,水面水流,水管水流,海面
3685 0
Threejs实现模拟河流,水面水流,水管水流,海面
|
数据可视化 定位技术
three.js实现烟雾缭绕效果
前言 大家好!我是Fly哥,最近接广告的接的有点多, 感谢大家还是一如既往的支持我!respect, 前几天我在朋友圈分享了一个烟雾缭绕的效果。很多小伙伴都表示非常感兴趣,有的同学说用到了噪声, 有的同学说用到了着色器,还有更过分说用到了ps, 胖虎竟然无语凝噎。其实都是就是简单的贴图。配合一点想象力。我们先看下效果: 然后我就发了一条朋友圈,问这个像什么?? 有的说 云层, 有的说云墨,有的说雾霭, 其实都不是, 我想做的是烟雾。好的话不不多说!, 本篇文章阅读大概5分钟。不耽误大家太多时间,主要是介绍思路, 说太多也没啥意义。如果你对three.js 还没有一点了解都没有,
three.js实现烟雾缭绕效果
基于three.js的牛逼轰轰的3D编辑器nunuStudio!
这是一款基于Three.js的3D编辑器,我之前一直喊错,叫人家"牛牛",因为我觉得它真的好牛,其实人家正确拼音喊“努努”! 可以发布web的运行包,直接可以网页端二次开发,真的不要太方便了!
基于three.js的牛逼轰轰的3D编辑器nunuStudio!
|
JavaScript
Threejs实现标签,自定义样式显示标签
Threejs实现标签,自定义样式显示标签
2063 0
Threejs实现标签,自定义样式显示标签
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
2089 0
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
Threejs实现下雨,下雪,阴天,晴天,火焰
Threejs实现下雨,下雪,阴天,晴天,火焰
2777 0
Threejs实现下雨,下雪,阴天,晴天,火焰
Threejs实现天空盒,全景场景,地面草地
Threejs实现天空盒,全景场景,地面草地
1974 0
Threejs实现天空盒,全景场景,地面草地
ThreeJs制作管道中水流效果
这篇文章详细介绍了如何在Three.js中创建具有动态水流效果的管道模型,通过纹理贴图的移动来模拟水流的视觉效果。
1177 2
ThreeJs制作管道中水流效果
ThreeJs制作管道水流效果
这篇文章详细说明了如何在Three.js中创建具有流动水效果的管道模型,通过使用纹理贴图的动态偏移来模拟水流的视觉效果。
955 3
Threejs创建天空和太阳
这篇文章讲解了如何使用Three.js中的Sky组件来创建真实的天空与太阳效果,包括调整天空的颜色、太阳的位置以及实现大气散射等技巧。
702 3