Three.js: Afficher / masquer Object3D?

Créé le 10 juin 2011  ·  14Commentaires  ·  Source: mrdoob/three.js

J'essaie de comprendre comment afficher / masquer Object3D et ses enfants à tout moment.

  • avec la propriété visible?
  • le traduire hors du frustrum?
  • une idée ?
Question

Commentaire le plus utile

Vous pouvez simplement invoquer
myObj3D.visible = faux. Cela semble cacher tout ce qui est un enfant de votre Object3D

appeler myObj3D.visible = true Affiche tout.

Tous les 14 commentaires

Actuellement, vous pouvez le faire comme ceci:

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

Merci! Il fonctionne comme un charme.

FYI - Pour masquer tous les enfants de myObject3D, l'extrait de code ci-dessus doit maintenant lire:

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

Je pense que cette fonctionnalité n'est pas encore résolue. Je veux masquer un objet (masquer tous les enfants) mais la façon actuelle de le faire (traverser) n'est pas faisable car je veux maintenir le statut visible de ses enfants. Par exemple, certains enfants sont visibles et d'autres non; masquer le parent doit masquer tous les enfants, mais le montrer à nouveau doit afficher les enfants qui étaient auparavant visibles.

Je suis d'accord. WebGLRenderer doit tenir compte de cela. C'est quelque chose que j'ai en attente de faire.

Pour info: le paramètre visible sur un parent affecte désormais également les enfants. (testé avec r71)

En utilisant r72. Le paramètre visible sur le parent ne semble pas affecter les enfants. La fonctionnalité a-t-elle encore changé?

@agnivade non, ça n'a pas changé. Définir visible sur false signifie que ni l'objet ni ses enfants ne seront rendus, quels que soient les enfants visible . Si visible est défini sur true alors les enfants ne seront rendus que si leur visible est défini sur true .

Merci. Il doit y avoir quelque chose qui ne va pas avec mon code alors, va vérifier.

Merci

Vous pouvez simplement invoquer
myObj3D.visible = faux. Cela semble cacher tout ce qui est un enfant de votre Object3D

appeler myObj3D.visible = true Affiche tout.

C'est une vieille discussion, mais il y a une mise en garde importante ici, définir visible sur false "seulement" masque l'objet et ses enfants pour la caméra, mais ils sont toujours visibles pour le raycaster, sauf si vous utilisez 2 calques différents et que vous les désactivez du calque le raycaster observe. Si vous voulez les rendre totalement invisibles, il est nécessaire de les désactiver dans le calque utilisé par le raycaster.
J'utilise les calques 0 et 1 pour la caméra, et uniquement le calque 0 pour le raycasting, donc je peux avoir des objets visibles et raycastés:
obj.layers.enable(0); obj.visible = true;

objets visibles mais non diffusés:
obj.layers.disable(0); obj.layers.enable(1); obj.visible = true;

et objets cachés et non raycastés:
obj.layers.disable(0); obj.layers.enable(1); obj.visible = false;

@ jscastro76 vous pouvez être intéressé par https://github.com/mrdoob/three.js/pull/19012

merci, je vais y jeter un œil!

Cette page vous a été utile?
0 / 5 - 0 notes