2013-10-08 26 views
1

我有幾個對象,當它被選中時,複選框會將線框屬性更改爲true或false(運行時間)。如何在three.js中使用遍歷來修改線框

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

回答

0

這是我在我的項目中使用的,它只是顛倒布爾值,因爲它將是真或假。

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

Working example(X爲線框)

+0

我有幾個對象,我想改變一切。所以我使用了遍歷,但它不起作用。使用你的代碼我不能改變任何東西=( – Alinehx

+0

在所附的例子中,我有一個數組中的所有元素,所以只是循環它,我猜你也可以用三個組來做同樣的事情...... –

1

1)你的代碼應該工作,如果你調用toggleWireFrame在每個網格中,一個接一個。

toggleWireFrame(meshA); 
toggleWireFrame(meshB); 

這將使意義,如果每個網格由幾個網格,你需要切換所有的子網格太。例如,如果從OBJ文件導入模型,您可能會獲得如此多的網格層次結構。

2)還是你只想打電話給toggleWireFrame一次,並讓所有網格的線框切換?

如果是這樣的話,你就必須調用

toggleWireFrame(scene);

甚至

toggleWireFrame(myObject3D);

其中myObject3DObject3D實例,它是所有網格的父,你想要切換線框狀態。

traverse()通過遍歷起始對象的所有孩子和孫子的作品。您需要確保您想要切換到線框的所有對象都在此起始對象下面,如上例所示。

3)另一種選擇是使用數組來存儲創建的每個材質,然後遍歷該數組以更改線框屬性,當用戶切換複選框時。