Saya telah terjebak selama dua minggu terakhir untuk memperbarui contoh threejs_mousepick.html dari rilis THREE.js lama ke yang sekarang. Oh ya, saya pemula dalam pemrograman.

Saya telah membuat Fiddle, melompat seseorang akan meluangkan waktu untuk membantu saya. CANNON.js adalah API yang hebat dan menyedihkan melihat bahwa contoh-contoh sudah sangat tua/tidak dapat digunakan dengan THREE.js hari ini. Saya mengerti ini banyak pekerjaan dan saya merasa ingin membantu tetapi saya butuh bantuan terlebih dahulu. Jadi, jika @schteppe Anda membaca ini, hubungi: Saya bersedia meluangkan waktu untuk mengerjakan ini.

-1
Student 20 Oktober 2017, 09:28
Berikut tautannya: jsfiddle.net/f4j64L91/1
 – 
Student
20 Oktober 2017, 09:29
Periksa konsol masuk, ada beberapa pesan yang berguna. Dan baca tentang THREE.Raycaster().
 – 
prisoner849
20 Oktober 2017, 11:01
Ya. Saya tahu cara menggunakan Three.js raycaster, saya mencoba mengganti fungsi beberapa hal tetapi belum berhasil ... belum. Kode ini rumit, bersarang. Saya akan terus bereksperimen.
 – 
Student
20 Oktober 2017, 11:55
Periksa jsfiddle di jawaban saya)
 – 
prisoner849
20 Oktober 2017, 14:08

1 menjawab

Jawaban Terbaik

Jawabannya seluas pertanyaannya.

Penggunaan THREE.Raycaster() dan THREE.Plane() sangat menyederhanakan banyak hal. Ini memungkinkan untuk menghilangkan fungsi seperti projectOntoPlane, findNearestIntersectingObject, getRayCasterFromScreenCoord, dan memperpendek fungsi setScreenPerpCenter (namanya konyol, tapi saya membiarkannya seperti itu) untuk hanya satu baris.

jsfiddle contoh r87

enter image description here

gplane adalah THREE.Plane():

var gplane = new THREE.Plane(), gplaneNormal = new THREE.Vector3();

Seperti yang tertulis di komentar deskripsi, kami membuat bidang virtual, tempat kami memindahkan titik sambungan kami.

function setScreenPerpCenter(point) {
  gplane.setFromNormalAndCoplanarPoint(gplaneNormal.subVectors(camera.position, point).normalize(), point);
}

Di sini, kita mengatur bidang kita dari titik normal dan coplanar, di mana normal adalah vektor pengurangan yang dinormalisasi antara posisi kamera dan titik klik pada kubus, dan titik itu adalah titik klik itu sendiri. Baca tentang metode tersebut di sini

0
prisoner849 23 Oktober 2017, 23:01
Terima kasih. Saya selalu bingung dengan fungsi-fungsi ini dan tidak yakin bagaimana menggunakannya atau tidak. Saya akan menghabiskan waktu malam ini untuk belajar dari kode Anda. Terima kasih lagi.
 – 
Student
20 Oktober 2017, 15:48
Terima kasih kembali. Tandai jawaban sebagai diterima, jika itu memecahkan masalah Anda)
 – 
prisoner849
20 Oktober 2017, 16:21
Mudah-mudahan Anda akan membaca ini, narapidana849, karena saya memiliki beberapa masalah dalam memahami l.165: (Saya mengubah gplane untuk refPlane, untuk tujuan panjang, saya tidak bisa mengetiknya) Dari apa yang saya mengerti: 1) refPlaneNormal diberi nilai baru dari "kamera .position" - "point" (diambil dari event click; saya memiliki variabel tipe Vector3. 2) Kemudian refPlaneNormal dinormalisasi, yang berarti refPlaneNormal / 1; Di sini saya juga punya vector3. 3) Setelah menyelesaikan setFromNormalAndCoplamarPoint dengan "2) vector2" saya dan titik acara klik saya, saya mendapatkan pesawat yang bernama refPlane. Apakah itu cara Anda membaca ini?
 – 
Student
23 Oktober 2017, 22:53
Terima kasih lagi. Semua ini agak baru bagi saya, tetapi saya mulai memahaminya.
 – 
Student
24 Oktober 2017, 08:54