Я пытаюсь понять, как в любой момент показать / скрыть 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 «только» скрывает объект и его дочерние элементы для камеры, но они все еще видны для Raycaster, если вы не используете 2 разных слоя и не отключите их от слоя. Raycaster наблюдает. Если вы хотите сделать их полностью невидимыми, необходимо отключить их в слое, используемом Raycaster.
Я использую слои 0 и 1 для камеры и только слой 0 для raycasting, поэтому я могу видеть объекты и raycasted:
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 Показывает все.