Three.js: Tampilkan / sembunyikan Object3D?

Dibuat pada 10 Jun 2011  ·  14Komentar  ·  Sumber: mrdoob/three.js

Saya mencoba mencari cara untuk menampilkan / menyembunyikan Object3D dan anak-anaknya setiap saat.

  • dengan properti yang terlihat?
  • menerjemahkannya dari frustrum?
  • ada ide ?
Question

Komentar yang paling membantu

Anda bisa memohon
myObj3D.visible = false. Ini tampaknya menyembunyikan semua yang merupakan anak dari Object3D Anda

memanggil myObj3D.visible = true Menunjukkan segalanya.

Semua 14 komentar

Saat ini Anda dapat melakukannya seperti ini:

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

Terima kasih! Ini bekerja seperti pesona.

FYI - Untuk menyembunyikan semua turunan myObject3D, cuplikan di atas sekarang harus membaca:

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

Saya rasa fungsi ini belum terselesaikan. Saya ingin menyembunyikan objek (menyembunyikan semua anak) tetapi cara melakukannya (traverse) saat ini tidak memungkinkan karena saya ingin mempertahankan status terlihat dari anak-anaknya. Misalnya, beberapa anak terlihat dan yang lainnya tidak; menyembunyikan induk harus menyembunyikan semua anak tetapi menampilkannya lagi harus menunjukkan anak yang sebelumnya terlihat.

Saya setuju. WebGLRenderer perlu mengakomodasi itu. Itu adalah sesuatu yang harus saya lakukan.

FYI: Pengaturan terlihat pada orang tua sekarang mempengaruhi anak-anak juga. (diuji dengan r71)

Menggunakan r72. Setting yang terlihat pada orang tua sepertinya tidak mempengaruhi anak-anak. Apakah fungsinya berubah lagi?

@ tidak, tidak berubah. Menyetel visible menjadi false berarti baik objek atau turunannya tidak akan menjadi penyaji, terlepas dari turunannya visible . Jika visible disetel ke true maka anak-anak hanya akan merender jika visible disetel ke true .

Terima kasih. Pasti ada yang salah dengan kode saya, saya akan memeriksa.

Terima kasih

Anda bisa memohon
myObj3D.visible = false. Ini tampaknya menyembunyikan semua yang merupakan anak dari Object3D Anda

memanggil myObj3D.visible = true Menunjukkan segalanya.

Ini adalah diskusi lama, tapi ada peringatan penting di sini, set terlihat ke false "hanya" menyembunyikan objek dan anak-anak untuk kamera, tetapi mereka masih terlihat untuk raycaster, kecuali jika Anda menggunakan 2 lapisan berbeda dan Anda menonaktifkannya dari lapisan raycaster sedang mengamati. Jika Anda ingin membuatnya tidak terlihat sepenuhnya diperlukan untuk menonaktifkannya di lapisan yang digunakan oleh raycaster.
Saya menggunakan lapisan 0 dan 1 untuk kamera, dan hanya lapisan 0 untuk raycasting, jadi saya dapat membuat objek terlihat dan disiarkan:
obj.layers.enable(0); obj.visible = true;

benda terlihat tetapi tidak terpancar:
obj.layers.disable(0); obj.layers.enable(1); obj.visible = true;

dan objek tersembunyi dan tidak terpancar sinar:
obj.layers.disable(0); obj.layers.enable(1); obj.visible = false;

@ jscastro76 Anda mungkin tertarik dengan https://github.com/mrdoob/three.js/pull/19012

terima kasih, saya akan memeriksanya!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat