Three.js: Показать / скрыть Object3D?

Созданный на 10 июн. 2011  ·  14Комментарии  ·  Источник: mrdoob/three.js

Я пытаюсь понять, как в любой момент показать / скрыть Object3D и его детей.

  • с видимым свойством?
  • перевести это из пирамиды?
  • Есть идеи ?
Question

Самый полезный комментарий

Вы можете просто вызвать
myObj3D.visible = false. Кажется, это скрывает все, что является дочерним по отношению к вашему Object3D.

вызов myObj3D.visible = true Показывает все.

Все 14 Комментарий

В настоящее время это можно сделать так:

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

спасибо, я посмотрю!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги