Three.js: ¿Mostrar / ocultar Object3D?

Creado en 10 jun. 2011  ·  14Comentarios  ·  Fuente: mrdoob/three.js

Intento descubrir cómo mostrar / ocultar Object3D y sus hijos en cualquier momento.

  • con la propiedad visible?
  • traducirlo del frustrum?
  • alguna idea ?
Question

Comentario más útil

Podrías simplemente invocar
myObj3D.visible = falso. Esto parece ocultar todo lo que es hijo de su Object3D

llamando a myObj3D.visible = true Muestra todo.

Todos 14 comentarios

Actualmente puedes hacer eso así:

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

¡Gracias! Funciona a las mil maravillas.

FYI: para ocultar todos los elementos secundarios de myObject3D, el fragmento de arriba ahora debería leer:

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

Creo que esta funcionalidad aún no está resuelta. Quiero ocultar un objeto (ocultando a todos los hijos) pero la forma actual de hacerlo (atravesar) no es factible porque quiero mantener el estado visible de sus hijos. Por ejemplo, algunos niños son visibles y otros no; ocultar el padre debería ocultar a todos los hijos, pero mostrarlo de nuevo debería mostrar los hijos que antes eran visibles.

Estoy de acuerdo. WebGLRenderer necesita adaptarse a eso. Es algo que tengo pendiente de hacer.

FYI: La configuración visible en un padre ahora también afecta a los niños. (probado con r71)

Utilizando r72. La configuración visible en los padres no parece afectar a los niños. ¿Ha cambiado la funcionalidad de nuevo?

@agnivade no, no ha cambiado. Establecer visible en false significa que ni el objeto ni sus hijos serán procesadores, independientemente de los hijos visible . Si visible se establece en true , los niños solo representarán si su visible se establece en true .

Gracias. Entonces debe haber algo mal con mi código, lo comprobaré.

Gracias

Podrías simplemente invocar
myObj3D.visible = falso. Esto parece ocultar todo lo que es hijo de su Object3D

llamando a myObj3D.visible = true Muestra todo.

Es una discusión antigua, pero hay una advertencia importante aquí, si se establece visible en falso "solo" oculta el objeto y sus hijos para la cámara, pero siguen siendo visibles para el raycaster, a menos que use 2 capas diferentes y las deshabilite de la capa. el emisor de rayos está observando. Si desea hacerlos completamente invisibles, es necesario desactivarlos en la capa utilizada por el raycaster.
Utilizo las capas 0 y 1 para la cámara, y solo la capa 0 para la transmisión de rayos, por lo que puedo tener objetos visibles y emitidos por rayos:
obj.layers.enable(0); obj.visible = true;

Objetos visibles pero no emitidos por rayos:
obj.layers.disable(0); obj.layers.enable(1); obj.visible = true;

y objetos ocultos y no emitidos por rayos:
obj.layers.disable(0); obj.layers.enable(1); obj.visible = false;

@ jscastro76 puede estar interesado en https://github.com/mrdoob/three.js/pull/19012

gracias, le echaré un vistazo!

¿Fue útil esta página
0 / 5 - 0 calificaciones