我是使用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
答案 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
和几何组,以便将多种材质应用于单个网格。