我试图弄清楚如何随时显示/隐藏Object3D和他的孩子。
目前,您可以像这样:
THREE.SceneUtils.traverseHierarchy( object, function ( object ) { object.visible = false; } );
谢谢! 它像一种魅力。
仅供参考-要隐藏myObject3D的所有子代,上面的代码段现在应显示为:
myObject3D.traverse( function ( object ) { object.visible = false; } );
我认为此功能尚未解决。 我想隐藏一个对象(隐藏所有子对象),但是当前的实现方式(遍历)不可行,因为我想保持其子对象的可见状态。 例如,有些孩子是可见的,而另一些则不可见。 隐藏父母应该隐藏所有孩子,但是再次显示应该显示以前可见的孩子。
我同意。 WebGLRenderer
需要容纳这一点。 这是我有待完成的事情。
仅供参考:现在,对父母可见的设置也会影响孩子。 (使用r71测试)
使用r72。 设置为“对父母可见”似乎不会影响孩子。 功能是否再次更改?
@agnivade不,它没有改变。 将visible
为false
意味着无论子对象visible
如何,对象或其子对象都不是渲染器。 如果将visible
设置为true
则只有在将其visible
设置为true
,子级才会渲染。
谢谢。 然后我的代码一定有问题,将检查。
谢谢
您可以调用
myObj3D.visible = false。 这似乎隐藏了所有属于Object3D的子对象
调用myObj3D.visible = true显示所有内容。
这是一个古老的讨论,但是这里有一个重要的警告,将visible设置为false,“ only”将隐藏对象及其对照相机的子级,但是对于raycaster仍然可见,除非您使用2个不同的层并将它们从该层禁用射线广播者正在观察。 如果要使其完全不可见,则需要在光线投射器使用的层中禁用它们。
我将第0层和第1层用于相机,仅将第0层用于光线投射,因此我可以看到和光线投射对象:
obj.layers.enable(0);
obj.visible = true;
可见但不进行射线投射的对象:
obj.layers.disable(0);
obj.layers.enable(1);
obj.visible = true;
和隐藏且未进行射线投射的对象:
obj.layers.disable(0);
obj.layers.enable(1);
obj.visible = false;
@ jscastro76您可能对https://github.com/mrdoob/three.js/pull/19012感兴趣
谢谢,我来看看!
最有用的评论
您可以调用
myObj3D.visible = false。 这似乎隐藏了所有属于Object3D的子对象
调用myObj3D.visible = true显示所有内容。