一个物体上的交替材料

时间:2016-11-04 12:36:37

标签: javascript three.js

我是使用three.js的初学者,我试图在一个对象上定义两种材料,并使用visibilty标志在两者之间交替,但没有成功。 还有其他方法,还是可以这样做?

var materials = [
    new THREE.MeshPhongMaterial( { color: 0x00ff00,visible:true, shininess: 1 } ),
    new THREE.MeshPhongMaterial( { color: 0xff0000,visible:false, shininess: 1 } )
];

obj= THREE.SceneUtils.createMultiMaterialObject( geometry, materials );
scene.add( obj);

scene.traverse(function (node){
    if(node instanceof THREE.Mesh) {
        node.visible =!node.visible;
    }
});

我将在场景中的所有对象中使用这个,这就是为什么我正在使用scene.traverse

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试对材料应用可见性,但在遍历期间您还要检查网格。从材料定义中移除visibility: true/false,然后添加以下行:

obj= THREE.SceneUtils.createMultiMaterialObject( geometry, materials );
obj.children[1].visible = false; // add this line
scene.add( obj);

这会将visibility = false应用于createMultiMaterialObject创建的第二个网格。然后,您的遍历将正确地翻转网格的可见性。

当您更好地了解THREE.js时,您会想要查看THREE.MultiMaterial和几何组,以便将多种材质应用于单个网格。