Intento descubrir cómo mostrar / ocultar Object3D y sus hijos en cualquier momento.
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!
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.