Three.js教程:对象克隆、复制
推荐:将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
方法的封装细节。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!