Threejs绘制传送带

2024-04-22 17:52
文章标签 绘制 threejs 传送带

本文主要是介绍Threejs绘制传送带,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接下来会做一个MES场景下的数字孪生,所以开始做车间相关的模型,不过还是尽量少用建模,纯代码实现,因为一方面可以动态使用,可以调节长度和宽度等,

下面这节就做一个简单的传送带,这是所有车间都会有的,

首先添加一个场景,相机,灯光等。

initScene(){//初始化场景this.scene = new THREE.Scene();//创建场景const axesHelper = new THREE.AxesHelper( 100 );axesHelper.position.set(0,0,0)this.scene.add( axesHelper );},initCamera(){//初始化相机,创建透视相机,第一个参数是视角角度,第二个参数是宽高比,第三个参数是近裁剪面,第四个参数是远裁剪面this.camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 10000);this.camera.position.set(100,100,100);//设置相机位置this.camera.up.set(0, 0, 1);   // <=== spin // around Z-axis},initLight(){//初始化灯光const directionalLight1 = new THREE.DirectionalLight(0xffffff, 1.5);//颜色是白色,强度是1.5directionalLight1.position.set(300,300,600);//设置灯光位置this.scene.add(directionalLight1);},
initRenderer(){//初始化渲染器this.renderer = new THREE.WebGLRenderer({ antialias: true });this.container = document.getElementById("container");//获取容器this.renderer.setSize(this.container.clientWidth, this.container.clientHeight);//设置渲染器的大小this.renderer.setClearColor('#FFFFFF', 1.0);//设置背景颜色this.container.appendChild(this.renderer.domElement);//将渲染器添加到容器中},initControl(){//创建控制器this.controls = new OrbitControls(this.camera, this.renderer.domElement);//创建控制器},initAnimate() {//创建动画requestAnimationFrame(this.initAnimate);this.renderer.render(this.scene, this.camera);},

有了基础的设置之后,下面开始绘制传送带,传送带需要两条边上的边框为长方体,两个边框中间为间距相同的滚轮,下面先画两个边框,设置边框之间的距离为20

      let width = 20; let geometryLeft = new THREE.BoxGeometry(conveyorLength,1,1);//创建一个几何体let materialLeft = new THREE.MeshBasicMaterial({color:'#0000FF'});//创建材质let borderLeft = new THREE.Mesh(geometryLeft, materialLeft);//创建网格模型borderLeft.position.set(x,y,z);this.scene.add(borderLeft);//添加到场景中let geometryRight = new THREE.BoxGeometry(conveyorLength,1,1);//创建一个几何体let materialRight = new THREE.MeshBasicMaterial({color:'#0000FF'});//创建材质let borderRight = new THREE.Mesh(geometryRight, materialRight);//创建网格模型borderRight.position.set(x ,y+ width,z)this.scene.add(borderRight);//添加到场景中

添加后是这样的效果

然后等间距的添加中间的滚轮,这里要注意的是在threejs中,默认的点都是模型的中间,所以设置滚轮位置的时候要从边框的一端开始,并且向y轴正方向偏移半个滚轮的长度,

let lineX = x - conveyorLength/2 +3;let lineY = y + width/2;for (let i = 0; i < conveyorLength/5; i++) {const cylinderGeometry = new THREE.CylinderGeometry(0.5, 0.5, width, 32); // 创建圆柱体几何体 参数依次为:半径, 顶部半径, 高, 侧面分段数const cylinderMaterial = new THREE.MeshBasicMaterial({ color: '#AAAAAA' }); //  // 创建圆柱体材质绿色const cylinderMesh = new THREE.Mesh(cylinderGeometry, cylinderMaterial);// 使用几何体和材质创建圆柱体网格cylinderMesh.position.set(lineX+(i*5),lineY,z);this.scene.add(cylinderMesh);// 将圆柱体添加到场景中}

最后把边框和滚轮的功能封装成一个可以通过传参动态调整传送带长度以及宽度的功能函数

initConveyor(x,y,z,width,conveyorLength){//初始化传送带let geometryLeft = new THREE.BoxGeometry(conveyorLength,1,1);//创建一个几何体let materialLeft = new THREE.MeshBasicMaterial({color:'#0000FF'});//创建材质let borderLeft = new THREE.Mesh(geometryLeft, materialLeft);//创建网格模型borderLeft.position.set(x,y,z);this.scene.add(borderLeft);//添加到场景中let geometryRight = new THREE.BoxGeometry(conveyorLength,1,1);//创建一个几何体let materialRight = new THREE.MeshBasicMaterial({color:'#0000FF'});//创建材质let borderRight = new THREE.Mesh(geometryRight, materialRight);//创建网格模型borderRight.position.set(x ,y+ width,z)this.scene.add(borderRight);//添加到场景中let lineX = x - conveyorLength/2 +3;let lineY = y + width/2;for (let i = 0; i < conveyorLength/5; i++) {const cylinderGeometry = new THREE.CylinderGeometry(0.5, 0.5, width, 32); // 创建圆柱体几何体 参数依次为:半径, 顶部半径, 高, 侧面分段数const cylinderMaterial = new THREE.MeshBasicMaterial({ color: '#AAAAAA' }); //  // 创建圆柱体材质绿色const cylinderMesh = new THREE.Mesh(cylinderGeometry, cylinderMaterial);// 使用几何体和材质创建圆柱体网格cylinderMesh.position.set(lineX+(i*5),lineY,z);this.scene.add(cylinderMesh);// 将圆柱体添加到场景中}},

最终效果如下:

这篇关于Threejs绘制传送带的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/926462

相关文章

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

如何用Python绘制简易动态圣诞树

《如何用Python绘制简易动态圣诞树》这篇文章主要给大家介绍了关于如何用Python绘制简易动态圣诞树,文中讲解了如何通过编写代码来实现特定的效果,包括代码的编写技巧和效果的展示,需要的朋友可以参考... 目录代码:效果:总结 代码:import randomimport timefrom math

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87