显示隐形父母的孩子
Posted
技术标签:
【中文标题】显示隐形父母的孩子【英文标题】:Show children of invisible parents 【发布时间】:2014-10-23 09:53:10 【问题描述】:在我的场景中,我有一个对象图,我在其中将子对象添加到父对象。但是,当我设置 parent.visible = false
时,three.js 行为正确并且在层次结构中不显示任何元素。
但对于我的项目,我想要不同的行为。我希望子对象在其可见性为true
时显示出来,即使父对象被隐藏。
实现这一目标的最佳方法是什么?本来想给父对象分配一个透明材质的,但是听说这会在渲染场景的时候出现问题,应该省略掉。
【问题讨论】:
【参考方案1】:不可见父母的孩子不可见。
不过,有一个合理的解决方法:将材质可见性设置为 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 建议(请参阅 cmets)和最近的拉取请求更新答案。
three.js r.68(r.69dev for CanvasRenderer
)
【讨论】:
感谢您的解决方案。这说服了我改变材料的可见性而不是对象的可见性本身。使用material.visible = false;
怎么样?
material.visible
已在 r.69dev 分支中删除,CanvasRenderer
不支持,但现在将支持。看。 github.com/mrdoob/three.js/issues/5256。谢谢你的建议!
没问题,感谢酷炫的three.js 库。继续努力!【参考方案2】:
另一种解决方法是稍微改变对象关系。
您想要变得透明的节点应该是容器节点,有子节点,但没有可视化表示。而这个容器的网格是一个具有特殊名称的孩子,例如 self 或类似的东西。
这种方式将节点设置为透明是一个将self子节点变为透明的函数,但是这个没有子节点就没有问题了
【讨论】:
以上是关于显示隐形父母的孩子的主要内容,如果未能解决你的问题,请参考以下文章