举荐:将NSDT场景编辑器退出你的3D工具链
其余系列工具:NSDT简石数字孪生

对象克隆.clone()和复制.copy()

Threejs大多数对象都有克隆.clone()和复制.copy()两个办法,点模型Points、线模型Line、网格网格模型Mesh一样具备这两个办法。

复制办法.copy()

A.copy(B)示意B属性的值赋值给A对应属性。var p1 = new THREE.Vector3(1.2,2.6,3.2);var p2 = new THREE.Vector3(0.0,0.0,0.0);p2.copy(p1)// p2向量的xyz变为p1的xyz值console.log(p2);

克隆办法.clone()

N = M.clone()示意返回一个和M雷同的对象赋值给N。

var p1 = new THREE.Vector3(1.2,2.6,3.2);var p2 = p1.clone();// p2对象和p1对象xyz属性雷同console.log(p2);

网格模型复制和克隆

网格模型复制克隆和三维向量根本逻辑是雷同,然而留神三维向量Vector3的.x、.y、.z属性值是数字,也就是说是根本类型的数据,对于网格模型而言,网格模型对象的几何体属性mesh.geometry和材质属性mesh.material的属性值都是对象的索引值。

var box=new THREE.BoxGeometry(10,10,10);//创立一个立方体几何对象var material=new THREE.MeshLambertMaterial({color:0x0000ff});//材质对象var mesh=new THREE.Mesh(box,material);//网格模型对象var mesh2 = mesh.clone();//克隆网格模型mesh.translateX(20);//网格模型mesh平移scene.add(mesh,mesh2);//网格模型增加到场景中

缩放几何体box,你能够发现下面代码中的两个网格模型的大小都产生了变动,因为网格模型克隆的时候,mesh对象的几何体对象mesh.geometry属性值是box对象的索引值,返回的新对象mesh2几何体属性mesh.geometry的值同样是box对象的索引值。

box.scale(1.5,1.5,1.5);//几何体缩放

留神

通过本节课的学习,对Threejs不同对象的克隆.clone()和复制.copy()办法有一个大抵印象即可。

理论开发的时候,留神不同对象的复制或克隆办法可能稍有区别,应用的时候最好通过代码测试,或者间接查看threejs源码某个类对.clone()和.copy()封装,这样更为直观分明。

几何体复制和克隆几何体

克隆或复制和网格模型在属性值深拷贝、浅拷贝方面有些不同,比方几何体的顶点属性Geometry.vertices,Geometry.vertices的属性值是一个数组对象,然而复制或克隆的时候,不是取得对象的索引值,而是深拷贝属性的值,能够在threejs源码Geometry.js全文检索copy: function关键词,找到该类对copy办法的封装细节。

3D建模学习工作室