Three.js:克隆网格 & Material » 切换克隆的不透明度
Three.js: Clone Mesh & Material » Toggle opacity of clone
使用命令 Mesh.clone();
您可以克隆网格。
搜索显示几何和 material 被保留。
但是,我想以不同方式控制两个网格的不透明度。
因此我假设我也必须克隆 material。
有没有办法复制包含 material 的网格,以便我可以独立于原始网格控制新网格的不透明度?
你是对的。制作克隆时共享 material。一个解决方案是为每个网格创建一个新的 material 并复制现有 material 的值。 (使用更多内存但应该不会影响帧率?)
但是你可以做类似的事情
let nMesh = new THREE.Mesh(
oldMesh.geometry.clone(),
new THREE.MeshPhongMaterial().copy( oldMesh.material )
);
创建一个由几何体克隆和新选择的 material 制成的新网格,并复制旧 material 的值。
或者,克隆网格并替换 material(并复制原件)。您必须更新 material,因为您在初始化后更改了它。
let nMesh = oldMesh.clone();
nMesh.material = new THREE.MeshPhongMaterial().copy( oldMesh.material );
nMesh.material.needsUpdate = true;
我不确定您是否必须使用相同类型的 material,或者它会自动转换为正确的类型。
使用命令 Mesh.clone();
您可以克隆网格。
搜索显示几何和 material 被保留。
但是,我想以不同方式控制两个网格的不透明度。
因此我假设我也必须克隆 material。
有没有办法复制包含 material 的网格,以便我可以独立于原始网格控制新网格的不透明度?
你是对的。制作克隆时共享 material。一个解决方案是为每个网格创建一个新的 material 并复制现有 material 的值。 (使用更多内存但应该不会影响帧率?)
但是你可以做类似的事情
let nMesh = new THREE.Mesh(
oldMesh.geometry.clone(),
new THREE.MeshPhongMaterial().copy( oldMesh.material )
);
创建一个由几何体克隆和新选择的 material 制成的新网格,并复制旧 material 的值。 或者,克隆网格并替换 material(并复制原件)。您必须更新 material,因为您在初始化后更改了它。
let nMesh = oldMesh.clone();
nMesh.material = new THREE.MeshPhongMaterial().copy( oldMesh.material );
nMesh.material.needsUpdate = true;
我不确定您是否必须使用相同类型的 material,或者它会自动转换为正确的类型。