举荐:将 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 建模学习工作室