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を呼び出すすべてを表示します。
これは古い議論ですが、ここで重要な注意点があります。falseに設定すると、オブジェクトとその子はカメラの「のみ」非表示になりますが、2つの異なるレイヤーを使用してレイヤーから無効にしない限り、レイキャスターには引き続き表示されます。レイキャスターが観察しています。 それらを完全に非表示にしたい場合は、レイキャスターが使用するレイヤーでそれらを無効にする必要があります。
カメラにはレイヤー0と1を使用し、レイキャスティングにはレイヤー0のみを使用しているので、オブジェクトを表示してレイキャストすることができます。
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を呼び出すすべてを表示します。