Three.js: Mostrar / ocultar Object3D?

Criado em 10 jun. 2011  ·  14Comentários  ·  Fonte: mrdoob/three.js

Tento descobrir como mostrar / ocultar Object3D e seus filhos a qualquer momento.

  • com a propriedade visível?
  • traduzir para fora do frustrum?
  • qualquer ideia ?
Question

Comentários muito úteis

Você poderia apenas invocar
myObj3D.visible = false. Isso parece esconder tudo o que é filho do seu Object3D

chamando myObj3D.visible = true Mostra tudo.

Todos 14 comentários

Atualmente, você pode fazer isso assim:

THREE.SceneUtils.traverseHierarchy( object, function ( object ) { object.visible = false; } );

Obrigado! Ele funciona como um encanto.

Para sua informação - para ocultar todos os filhos de myObject3D, o snippet acima agora deve ser:

myObject3D.traverse( function ( object ) { object.visible = false; } );

Acho que essa funcionalidade ainda não foi resolvida. Desejo ocultar um objeto (ocultar todos os filhos), mas a maneira atual de fazê-lo (atravessar) não é viável porque desejo manter o status visível de seus filhos. Por exemplo, algumas crianças são visíveis e outras não; ocultar o pai deve ocultar todos os filhos, mas exibi-lo novamente deve mostrar os filhos que estavam anteriormente visíveis.

Concordo. WebGLRenderer precisa acomodar isso. É algo que estou pendente de fazer.

Para sua informação: configuração visível em um dos pais agora afeta os filhos também. (testado com r71)

Usando r72. A configuração visível no pai não parece afetar os filhos. A funcionalidade mudou novamente?

@agnivade não, não mudou. Definir visible como false significa que nem o objeto nem seus filhos serão renderizadores, independentemente dos filhos visible . Se visible estiver definido como true , os filhos serão renderizados apenas se visible estiver definido como true .

Obrigado. Deve haver algo errado com meu código então, vou verificar.

obrigado

Você poderia apenas invocar
myObj3D.visible = false. Isso parece esconder tudo o que é filho do seu Object3D

chamando myObj3D.visible = true Mostra tudo.

É uma discussão antiga, mas há uma advertência importante aqui, definir visible como false "apenas" oculta o objeto e seus filhos para a câmera, mas eles ainda são visíveis para o raycaster, a menos que você use 2 camadas diferentes e as desative da camada o raycaster está observando. Se você quiser torná-los totalmente invisíveis, é necessário desativá-los na camada usada pelo raycaster.
Eu uso as camadas 0 e 1 para a câmera e apenas a camada 0 para raycasting, então posso ter objetos visíveis e raycasting:
obj.layers.enable(0); obj.visible = true;

objetos visíveis, mas não iluminados:
obj.layers.disable(0); obj.layers.enable(1); obj.visible = true;

e objetos ocultos e não iluminados:
obj.layers.disable(0); obj.layers.enable(1); obj.visible = false;

@ jscastro76 você pode estar interessado em https://github.com/mrdoob/three.js/pull/19012

obrigado, vou dar uma olhada nisso!

Esta página foi útil?
0 / 5 - 0 avaliações