展示隐形父母的孩子

时间:2014-08-29 11:28:50

标签: javascript three.js visibility

在我的场景中,我有一个对象图,我将子对象添加到父对象中。但是,当我设置parent.visible = false时,three.js行为正确并且在层次结构中没有显示任何元素。

但是对于我的项目,我想要一个不同的行为。我希望子对象在其可见性为true时显示,即使父对象被隐藏也是如此。

实现这一目标的最佳方法是什么?我想到为父对象分配透明材质,但我听说这会在渲染场景时引起问题,应该省略。

2 个答案:

答案 0 :(得分: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(CanvasRenderer的r.69dev)

答案 1 :(得分:0)

另一种解决方法是稍微改变对象关系。

您希望变为透明的节点应该是容器节点,它们具有子节点,但没有可视化表示。此容器的网格是一个具有特殊名称的子网,例如 self 或类似的东西。

这样将节点设置为透明是一个将 self 子节点变为透明的函数,但是这个节点没有子节点然后没有问题