2014-08-29 48 views
3

在我的場景中,我有一個對象圖,我在其中向父母添加子對象。但是,當我設置parent.visible = false three.js行爲正確並且在層次結構中不顯示任何元素。顯示看不見的父母的孩子

但對於我的項目,我想要一個不同的行爲。當他們的可見性是true,即使當父對象被隱藏時,我也希望子對象顯示出來。

什麼是最好的方法來實現這一目標?我想爲父對象分配一個透明材質,但是我聽說這會在渲染場景時產生問題,應該省略。

回答

4

看不見父母的孩子。

但是有一個合理的解決方法:將材料可見性設置爲false。

您將需要clone()材質爲每個對象,但這是好的,因爲對象將(在WebGLRenderer的情況下)仍然共享相同的着色器程序。

var material = new THREE.MeshPhongMaterial(); 

parent = new THREE.Mesh(geometry, material.clone()); 
parent.material.visible = false; 

child = new THREE.Mesh(geometry, material.clone()); 

編輯:根據OP建議(請參閱評論)和最近的拉取請求更新答案。

three.js所r.68(r.69dev爲CanvasRenderer

+0

感謝您的解決方案。這使我相信改變物質可見度而不是物體可見度本身。如何使用'material.visible = false;'? – Jonas 2014-09-01 08:34:25

+1

'material.visible'已在r.69dev分支中刪除,並且不受'CanvasRenderer'支持,但現在將支持它。看到。 http://github.com/mrdoob/three.js/issues/5256。謝謝你的建議! – WestLangley 2014-09-01 21:09:38

+0

沒有問題,謝謝你的酷three.js庫。保持良好的工作! – Jonas 2014-09-02 14:53:22

0

另一個解決辦法將是稍微改變對象的關係。

要變成透明的節點應該是容器節點,它有子節點,但沒有可視表示。此容器的網格是一個特殊名稱的孩子,如self或類似的東西。

這種方式設置節點,以透明的是,原來的孩子透明的功能,但是這其中有沒有孩子,那麼就沒有問題