Threejs绘制方形管道

简介: 这篇文章讲解了如何在Three.js中创建和渲染方形管道,包括建立几何体、应用材质以及进行场景中的定位和渲染等步骤。

之前有用Threejs的TubeGeometry绘制管道效果,但是TubeGeometry的管道效果默认是圆形的截面,这节实现方形截面的管道绘制。

因为Threejs不提供方形截面的管道,所以使用的是绘制截面,然后拉伸的方式,所以需要先绘制一个方形,当然在此之前还是要先创建一个场景,包括灯光,相机,渲染器等,之前章节已有过就不再贴代码了,下面先通过Shape创建一个截面

const shape = new THREE.Shape();// 创建形状
shape.moveTo(0, 0);
shape.lineTo(2, 0);
shape.lineTo(2, 2);
shape.lineTo(0, 2);
shape.lineTo(0, 0);

然后用CatmullRomCurve3绘制出曲线,也是后面轨道的轨迹,

 const curve = new THREE.CatmullRomCurve3([
        new THREE.Vector3( -10, -50, -50 ),
        new THREE.Vector3( 10, 0, 0 ),
        new THREE.Vector3( 8, 50, 50 ),
        new THREE.Vector3( -5, 0, 100)
      ]);

通过ExtrudeGeometry拉伸的方法,将shape截面和曲线curve传入后,进行拉伸,并设置路径的精度,就可以得到一个几何体geometry,再添加一个材质,创建网格模型,添加到场景中。就可以得到下面的3D模型,

const geometry = new THREE.ExtrudeGeometry(shape,  { // 创建挤出几何体
        extrudePath:curve,//扫描轨迹
        steps:100 //沿着路径细分精度,越大越光滑
      });
 const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });// 创建材质
 const mesh = new THREE.Mesh(geometry, material); // 创建网格
this.scene.add(mesh);// 将网格添加到场景中

但是这个管道为纯色,下面给这个管道添加贴图,让他更真实,我就随便找了张图片作为贴图,代替原有的材质,完整代码如下:

initExtrudeGeometry(){  // 创建挤出几何体
      const shape = new THREE.Shape();// 创建形状
      shape.moveTo(0, 0);
      shape.lineTo(4, 0);
      shape.lineTo(4, 4);
      shape.lineTo(0, 4);
      shape.lineTo(0, 0);
      // 扫描轨迹:创建轮廓的扫描轨迹(3D样条曲线)
      const curve = new THREE.CatmullRomCurve3([
        new THREE.Vector3( -10, -50, -50 ),
        new THREE.Vector3( 10, 0, 0 ),
        new THREE.Vector3( 8, 50, 50 ),
        new THREE.Vector3( -5, 0, 100)
      ]);
      const geometry = new THREE.ExtrudeGeometry(shape,  { // 创建挤出几何体
        extrudePath:curve,//扫描轨迹
        steps:100 //沿着路径细分精度,越大越光滑
      });
      const texLoader = new THREE.TextureLoader();//纹理贴图加载器TextureLoader
      const texture = texLoader.load('/static/images/cold1.png');// .load()方法加载图像,返回一个纹理对象Texture
      const material = new THREE.MeshBasicMaterial({ // 设置纹理贴图:Texture对象作为材质map属性的属性值
        map: texture,//map表示材质的颜色贴图属性
      });
      // 设置阵列模式
      texture.wrapS = THREE.RepeatWrapping;
      texture.wrapT = THREE.RepeatWrapping;
      // uv两个方向纹理重复数量
      texture.repeat.set(0.5,0.5);//注意选择合适的阵列数量
      // const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });// 创建材质
      const mesh = new THREE.Mesh(geometry, material); // 创建网格
      this.scene.add(mesh);// 将网格添加到场景中
    },

最终的效果如下,不过贴图还是根据实际场景选择,效果会更好

相关文章
Threejs实现模拟管道液体流动
Threejs实现模拟管道液体流动
4271 0
Threejs实现模拟管道液体流动
Threejs实现模拟河流,水面水流,水管水流,海面
Threejs实现模拟河流,水面水流,水管水流,海面
4555 0
Threejs实现模拟河流,水面水流,水管水流,海面
基于three.js的牛逼轰轰的3D编辑器nunuStudio!
这是一款基于Three.js的3D编辑器,我之前一直喊错,叫人家"牛牛",因为我觉得它真的好牛,其实人家正确拼音喊“努努”! 可以发布web的运行包,直接可以网页端二次开发,真的不要太方便了!
基于three.js的牛逼轰轰的3D编辑器nunuStudio!
|
JavaScript
Threejs实现标签,自定义样式显示标签
Threejs实现标签,自定义样式显示标签
2396 0
Threejs实现标签,自定义样式显示标签
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
2350 0
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
|
图形学
ThreeJs创建管道效果
这篇文章介绍了在Three.js中创建管道(Tube)效果的方法和技术细节。
773 4
ThreeJs创建管道效果
ThreeJs制作管道水流效果
这篇文章详细说明了如何在Three.js中创建具有流动水效果的管道模型,通过使用纹理贴图的动态偏移来模拟水流的视觉效果。
1448 3
ThreeJs制作管道中水流效果
这篇文章详细介绍了如何在Three.js中创建具有动态水流效果的管道模型,通过纹理贴图的移动来模拟水流的视觉效果。
1680 2
ThreeJs制作管道中水流效果
|
前端开发 JavaScript 容器
在 vite+vue 中使用@originjs/vite-plugin-federation 模块联邦
【10月更文挑战第25天】模块联邦是一种强大的技术,它允许将不同的微前端模块组合在一起,形成一个统一的应用。在 vite+vue 项目中,使用@originjs/vite-plugin-federation 模块联邦可以实现高效的模块共享和组合。通过本文的介绍,相信你已经了解了如何在 vite+vue 项目中使用@originjs/vite-plugin-federation 模块联邦,包括安装、配置和使用等方面。在实际开发中,你可以根据自己的需求和项目的特点,灵活地使用模块联邦,提高项目的可维护性和扩展性。
|
开发框架
threejs做特效:实现物体的发光效果-EffectComposer详解!
【8月更文挑战第7天】实现物体的发光效果-EffectComposer详解!
3300 6
threejs做特效:实现物体的发光效果-EffectComposer详解!