Three.js:克隆网格和材质 » 切换克隆的不透明度

Mec*_*Eng 1 javascript clone mesh three.js

使用该命令Mesh.clone();您可以克隆网格。搜索显示几何形状和材料被保留。但是,我想以不同的方式控制两个网格的不透明度。因此我认为我也必须克隆这些材料。

有没有办法复制包含材质的网格,以便我可以与原始网格分开控制新网格的不透明度?

Eth*_*sey 6

你是对的。制作克隆时会共享该材料。解决方案是为每个网格创建新材质并复制现有材质的值。(使用更多内存但不会影响帧率?)

但是你可以做类似的事情

let nMesh = new THREE.Mesh( 
    oldMesh.geometry.clone(), 
    new THREE.MeshPhongMaterial().copy( oldMesh.material )
);
Run Code Online (Sandbox Code Playgroud)

创建一个由几何体克隆和所选新材质制成的新网格,并复制旧材质的值。或者,克隆网格并替换材质(并复制原始材料)。您确实必须更新材质,因为您在初始化后更改了它。

let nMesh = oldMesh.clone();
nMesh.material = new THREE.MeshPhongMaterial().copy( oldMesh.material );
nMesh.material.needsUpdate = true;
Run Code Online (Sandbox Code Playgroud)

我不确定您是否必须使用相同类型的材质,或者它是否会自动转换为正确的类型。