在我的場景中,我有一個對象圖,我在其中向父母添加子對象。但是,當我設置parent.visible = false
three.js行爲正確並且在層次結構中不顯示任何元素。顯示看不見的父母的孩子
但對於我的項目,我想要一個不同的行爲。當他們的可見性是true
,即使當父對象被隱藏時,我也希望子對象顯示出來。
什麼是最好的方法來實現這一目標?我想爲父對象分配一個透明材質,但是我聽說這會在渲染場景時產生問題,應該省略。
在我的場景中,我有一個對象圖,我在其中向父母添加子對象。但是,當我設置parent.visible = false
three.js行爲正確並且在層次結構中不顯示任何元素。顯示看不見的父母的孩子
但對於我的項目,我想要一個不同的行爲。當他們的可見性是true
,即使當父對象被隱藏時,我也希望子對象顯示出來。
什麼是最好的方法來實現這一目標?我想爲父對象分配一個透明材質,但是我聽說這會在渲染場景時產生問題,應該省略。
看不見父母的孩子。
但是有一個合理的解決方法:將材料可見性設置爲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
)
另一個解決辦法將是稍微改變對象的關係。
要變成透明的節點應該是容器節點,它有子節點,但沒有可視表示。此容器的網格是一個特殊名稱的孩子,如self或類似的東西。
這種方式設置節點,以透明的是,原來的自孩子透明的功能,但是這其中有沒有孩子,那麼就沒有問題
感謝您的解決方案。這使我相信改變物質可見度而不是物體可見度本身。如何使用'material.visible = false;'? – Jonas 2014-09-01 08:34:25
'material.visible'已在r.69dev分支中刪除,並且不受'CanvasRenderer'支持,但現在將支持它。看到。 http://github.com/mrdoob/three.js/issues/5256。謝謝你的建議! – WestLangley 2014-09-01 21:09:38
沒有問題,謝謝你的酷three.js庫。保持良好的工作! – Jonas 2014-09-02 14:53:22