我有几个对象,当选中它时,该复选框会将wireframe属性更改为true或false(运行时)。
function toggleWireFrame(obj){
var f = function(obj2)
{
if(obj2.hasOwnProperty("material")){
obj2.material.wireframe=!obj2.material.wireframe;
}
}
obj.traverse(f);
}
最佳答案
1)如果您在每个网格上一个一个地调用toggleWireFrame
,您的代码应该可以工作。
toggleWireFrame(meshA);
toggleWireFrame(meshB);
如果这些网格中的每一个都由多个网格组成,并且您还需要切换所有子网格,这将是有意义的。例如,如果从OBJ文件导入模型,则可能会得到很多类似的网格层次结构。
2)还是只想调用一次
toggleWireFrame
并切换所有网格的线框?如果是这样,您将不得不致电
toggleWireFrame(scene);
甚至
toggleWireFrame(myObject3D);
其中,
myObject3D
是一个Object3D
实例,是要切换线框状态的所有网格的父级。traverse()
通过遍历起始对象的所有子代和孙代来工作。您需要确保要切换到线框的所有对象都在该起始对象下为父对象,如上面的示例所示。3)另一个选择是使用数组存储创建的每种材质,然后在用户切换复选框时循环访问此数组以更改线框属性。
关于javascript - 如何在three.js中使用遍历来修改线框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19247770/