Skip to content

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

克隆 .clone()、复制.copy()是 threejs 很多对象都具有的方法,比如三维向量对象Vector3网格模型Mesh几何体材质

克隆.clone()

克隆 .clone() 简单说就是复制一个和原对象一样的新对象,下面以三维向量对象Vector3 给大家举例,其他的 threejs 对象都可以参照类似的写法。

js
const v1 = new THREE.Vector3(1, 2, 3);
console.log("v1", v1);
// v2是一个新的Vector3对象,和v1的.x、.y、.z属性值一样
const v2 = v1.clone();
console.log("v2", v2);

复制 .copy()

复制 .copy()简单说就是 把一个对象属性的属性值赋值给另一个对象,下面以三维向量对象 Vector3 给大家举例,其他的 threejs 对象都可以参照类似的写法。

js
const v1 = new THREE.Vector3(1, 2, 3);
const v3 = new THREE.Vector3(4, 5, 6);
// 读取 v1.x、v1.y、v1.z 的赋值给 v3.x、v3.y、v3.z
v3.copy(v1);

Mesh 克隆 .clone()

通过 mesh 克隆 .clone() 一个和 mesh 一样的新模型对象 mesh2。

js
const mesh2 = mesh.clone();
mesh2.position.x = 100;

通过克隆 .clone() 获得的新模型和原来的模型 共享 材质和几何体

js
// 改变材质颜色,或者说改变mesh2颜色,mesh和mesh2颜色都会改变
// material.color.set(0xffff00);
mesh2.material.color.set(0xffff00);

几何体和材质克隆.clone()

js
const mesh2 = mesh.clone();
// 克隆几何体和材质,重新设置mesh2的材质和几何体属性
mesh2.geometry = mesh.geometry.clone();
mesh2.material = mesh.material.clone();
// 改变mesh2颜色,不会改变mesh的颜色
mesh2.material.color.set(0xff0000);

练习:mesh.position.copy()

改变 mesh 的位置,使之位于 mesh2 的正上方(y),距离 100。

js
mesh.position.copy(mesh2.position); //1. 第1步位置重合
mesh.position.y += 100; //1. 第2步mesh在原来y的基础上增加100

练习:mesh.rotation.copy()

两个模型的姿态角度始终保持一样。

js
// 渲染循环
function render() {
  mesh.rotateY(0.01); // mesh旋转动画
  // 同步mesh2和mesh的姿态角度一样,不管mesh姿态角度怎么变化,mesh2始终保持同步
  mesh2.rotation.copy(mesh.rotation);
  renderer.render(scene, camera);
  requestAnimationFrame(render);
}
render();