Cara terbaik / Efisien untuk mengimplementasikan Tabrakan 3d

16

Saya sudah memprogram sistem collision berbasis 2d untuk game sebelumnya. Itu adalah sistem tabrakan pertama saya dan jelek. Saya mencari tabrakan antara objek dengan memeriksa semua objek dengan semua objek. Saya sudah pernah mendengar tentang sistem grid dengan sel di mana objek hanya akan melihat tabrakan dengan objek lain dari sel saat ini. Apakah ini cara yang bagus untuk memeriksa tabrakan?

Saya ingin memiliki teknik yang baik untuk mengulang semua item saya di dunia 3d.

Jean-Philippe Leclerc
sumber

Jawaban:

11

Anda akan membutuhkan algoritme pemartisian-ruang yang baik, yang biasa digunakan dalam 3D adalah octrees .

Setelah itu Anda bisa mengelilingi model dll dengan bola pembatas di mana mereka cocok dengan rapi karena tabrakan antara pembatas bola sangat mudah untuk dihitung. Setelah Anda tahu bahwa dua bola yang saling bertabrakan bertabrakan, Anda dapat secara iteratif membuat bola yang lebih kecil itu menjadi lebih kecil dan menambahkan bola yang membatasi untuk membuat objek tertutup di dalamnya, atau kami menggunakan algoritma pintar lain untuk menghitung tabrakan antara dua objek yang kompleks.

Lihat gambar ini: beberapa bola pembatas

Roy T.
sumber
12

Pada akhirnya saya pikir jawaban untuk pertanyaan Anda akan tergantung pada kebutuhan aplikasi khusus Anda, karena tidak ada solusi satu ukuran untuk semua. Meskipun ada sejumlah sumber daya yang layak di web, Anda akan menghemat banyak waktu dan frustrasi dengan mengambil Deteksi Tabrakan Real-time Christer Ericson , yang menjabarkan dengan sangat rinci berbagai macam teknik dan algoritma, misalnya Kode C ++.

Itu membantu saya mengambil langkah kecil sebelum mencoba membangun sistem yang hebat. Menulis fungsi untuk menentukan apakah suatu titik ada di dalam sebuah bidang, maka jika suatu titik berada di dalam segitiga, jika sinar berada di dalam segitiga, dll. waktu hal-hal yang sepertinya tidak bisa ditembus (maafkan permainan kata) pada awalnya menjadi kurang menakutkan. Berikut adalah daftar sejumlah tes, dengan kode contoh:

http://www.realtimerendering.com/intersections.html

Sementara itu, karena saya tahu tidak semua orang bisa membayar $ 70-80 untuk buku sesuka hati, berikut adalah beberapa istilah yang mungkin ingin Anda perhatikan:

  • Partisi Spasial, Oktrees, Quadtrees, pohon BSP
  • Pohon BIH
  • Volume Bounding dan Volume Bounding Hierarki
  • Deteksi Tabrakan Terpisah vs. Kontinyu
  • Teorema Sumbu Pemisah
  • Algoritma GJK
user_123abc
sumber