显示隐形父母的孩子

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子节点变为透明的函数,但是这个没有子节点就没有问题了

【讨论】:

以上是关于显示隐形父母的孩子的主要内容,如果未能解决你的问题,请参考以下文章

显示每个父母的所有孩子

当孩子依赖父母,父母依赖孩子时,浏览器如何计算宽度

php 显示当前菜单父母当前页面的孩子/兄弟姐妹

获取父母的所有可能的孩子/后代

VUE 有没有办法使用 :click 事件在父母姓名下显示孩子姓名?

角。使孩子 100% 宽度的 flex 父母