将节点设置为 .visible = false 时出现的问题,其子节点不再可见

Issue when you set a node to .visible = false, its child nodes are no longer visible

提问人:Leonardo Gomez 提问时间:9/22/2023 更新时间:11/17/2023 访问量:25

问:

我在使用特定 .glb 模型的模型查看器时遇到了问题:

基本上,我有一个 .glb 文件,其中包含一个包含多个元素的节点树。但对于这个特定示例,我将尝试仅在 1 个主节点上恢复它,只有 1 个辅助节点。

问题是,在节点树中,如果我取消选择父节点,它的“可见”属性会变成“false”,并且自动地,它的子节点也会变得不可见,无论它有什么“可见”。属性。所以我的问题是,有没有办法让它们彼此独立?我的想法就像我们所拥有的一样:https://sandbox.babylonjs.com/ 取消选中父元素使子元素可见。

是什么原因导致了这种行为?它只发生在一些 glb 文件中,而不是全部。我如何知道代码的哪一部分正在执行此验证以显示或不显示不可见父节点的子节点?

谢谢

当其父节点不可见时,我试图检查/取消选中其子节点,只是为了检查这是否只是库上的一个错误,但似乎即使在那种情况下,它也不会可见。因此,我假设如果禁用父元素,则无论如何都不会显示其子元素。

三个.js 查看器

评论

0赞 TheJim01 9/23/2023
你需要更具体一点。首先,什么是“模型查看器”?其次,这种可见性链接/分组似乎是正确的。如果父节点不可见,则不应将该节点及其子节点添加到可呈现项列表中。要获得所需的效果,必须将渲染列表生成与场景树分离。

答:

0赞 coderofsalvation 11/17/2023 #1

您可以使用以下方法将材质设置为不可见:

myobj.material.visible = false

但是,在共享材料的情况下,这也会影响其他对象,您可以通过先克隆材料来规避这些对象:

if( myobj.material ){
  if( !myobj.material.clone ){
    myobj.material = myobj.material.clone()
    myobj.material.clone = true
  }
  myobj.material.visible = false
}