2014-08-29 52 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或类似的东西。

这种方式设置节点,以透明的是,原来的孩子透明的功能,但是这其中有没有孩子,那么就没有问题