我有几个对象,当它被选中时,复选框会将线框属性更改为true或false(运行时)。
function toggleWireFrame(obj){
var f = function(obj2)
{
if(obj2.hasOwnProperty("material")){
obj2.material.wireframe=!obj2.material.wireframe;
}
}
obj.traverse(f);
}
答案 0 :(得分:1)
1)如果您逐个调用每个网格上的toggleWireFrame
,您的代码应该有效。
toggleWireFrame(meshA);
toggleWireFrame(meshB);
如果这些网格中的每一个都由多个网格组成,并且您还需要切换所有子网格,这将是有意义的。例如,如果从OBJ文件导入模型,则可能会获得类似的网格层次结构。
2)或者您是否只想调用toggleWireFrame
一次并让所有网格'线框切换?
如果是这种情况,则必须致电
toggleWireFrame(scene);
甚至
toggleWireFrame(myObject3D);
其中myObject3D
是Object3D
个实例,它是您要切换线框状态的所有网格的父级。
traverse()
通过迭代起始对象的所有子孙而来工作。您需要确保要切换到线框的所有对象都是此起始对象的父级,如上例所示。
3)另一种选择是使用数组在创建每个材料时存储它们,然后在用户切换复选框时迭代遍历此数组以更改线框属性。
答案 1 :(得分:0)
这是我在我的项目中使用的,它只是反转布尔值,因为它将是真或假。
function wireframeToggle(i) {
bool = i.material.wireframe;
i.material.wireframe = !bool;
}
Working example(x代表线框)