我有几个对象,当选中它时,该复选框会将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/

10-12 12:53