Saya mencoba mencari cara untuk menampilkan / menyembunyikan Object3D dan anak-anaknya setiap saat.
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!
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.