您不必丢失属性。如果您使用的是THREE.BufferGeometry,则可以改用群组。
群组
var boxGeo = new THREE.BoxBufferGeometry(10, 10, 10);
// set up your groups
boxGeo.clearGroups();
boxGeo.addGroup(0, boxGeo.index.count, 0);
材料
在 THREE.js r85 之前
您将使用THREE.MultiMaterial。
// add both of your materials to a multi-material
var mm = new THREE.MultiMaterial([
new THREE.MeshLambertMaterial({color: "red"}),
new THREE.MeshPhongMaterial({color: "red"}),
]);
var mesh = new THREE.Mesh(boxGeo, mm);
适用于 THREE.js r85 及更高版本
您可以简单地将一组材料传递给THREE.Mesh。
// add both of your materials to a multi-material
var mm = [
new THREE.MeshLambertMaterial({color: "red"}),
new THREE.MeshPhongMaterial({color: "red"}),
];
var mesh = new THREE.Mesh(boxGeo, mm);
交换材料
然后当你想交换材料时:
if(mesh.geometry.groups[0].materialIndex === 0){
mesh.geometry.groups[0].materialIndex = 1;
}
else{
mesh.geometry.groups[0].materialIndex = 0
}