1

我有几个对象,当它被选中时,复选框会将线框属性更改为 true 或 false (运行时)。

function toggleWireFrame(obj){
     var f = function(obj2)
     {
         if(obj2.hasOwnProperty("material")){
     obj2.material.wireframe=!obj2.material.wireframe;
     }          
  }
     obj.traverse(f);   
 }
4

2 回答 2

1

1)如果您逐个调用toggleWireFrame每个网格,您的代码应该可以工作。

toggleWireFrame(meshA);
toggleWireFrame(meshB);

如果这些网格中的每一个都由多个网格组成,并且您也需要切换所有子网格,这将是有意义的。例如,如果您从 OBJ 文件导入模型,您可能会得到很多类似的网格层次结构。

2) 还是您只想调用toggleWireFrame一次并切换所有网格的线框?

如果是这种情况,您将不得不致电

toggleWireFrame(scene);

甚至

toggleWireFrame(myObject3D);

其中myObject3D是一个Object3D实例,它是您要切换线框状态的所有网格的父级。

traverse()通过迭代起始对象的所有子和孙来工作。您需要确保要切换到线框的所有对象都位于此起始对象下,如上面的示例所示。

3) 另一种选择是使用一个数组来存储创建的每个材质,然后在用户切换复选框时遍历该数组以更改线框属性。

于 2013-10-13T19:46:07.050 回答
0

This is what I use on my projects, it just inverses the boolean since it will be true or false.

function wireframeToggle(i) {
    bool = i.material.wireframe;
    i.material.wireframe = !bool;
}

Working example (x for wireframe)

于 2013-10-08T12:39:33.217 回答