Saya menggunakan pendekatan berikut (mirip dengan algoritma pemisahan massa Tongrich http://www.richardtonge.com/ ):
- mendeteksi semua pasangan yang bertabrakan dalam adegan / konteks Anda. Biarkan (A, B) menjadi pasangan seperti itu. Terapkan gagasan pemisahan hantu / massa: jika A bersentuhan dengan benda M dan B bersentuhan dengan benda lain N, maka tentukan sementara massa A ke
m_A/M
dan dari B kem_B/N
- menghitung kontribusi kekuatan reaksi / restitusi untuk setiap pasangan (A, B) dan menyimpan kontribusi ini dalam akumulator A dan B sendiri
- menghitung kecepatan restitusi dari impuls (seperti yang Anda sebutkan) dan menyimpannya dengan cara yang sama (seperti residu kecepatan deltaV dalam akumulator masing-masing untuk setiap pasangan (A, B))
- menghitung pemindahan penalti (sekali lagi, menumpuk perpindahan, jangan langsung menerapkannya!)
- mengatur ulang massa semua badan yang sebelumnya ditetapkan sebagai pihak dalam pasangan tabrakan (
m_A = m_A * M
dan m_B = m_B * N
)
Pendekatan ini mirip dengan bagaimana algoritma iteratif Jacobi bekerja dengan sistem persamaan simultan linier. Dan itu tidak dijamin untuk menyatu, tetapi dalam simulator saya itu melakukan pekerjaan dengan cukup lancar .. dalam 3D (ya, dimensi tambahan menambah dua kali kesulitan!).
Peringatan : posisi dan kecepatan yang benar hanya setelah fase deteksi / penanganan tubrukan Anda selesai! Dengan begitu, Anda secara bersamaan memperbarui aktor yang bertabrakan. Juga, pasukan restitusi harus diperhitungkan pada saat Anda mengintegrasikan posisi dan kecepatan.
EDIT: Ya, saya kira Anda menggunakan metode integrasi Verlet yang sudah disalahgunakan (yang ini menjadi nama rumah tangga di kalangan penggemar gamedev). Dalam momok penanganan tabrakan dan integrasi ini, Anda mungkin ingin melihatnya di sini .
UPDATE: Beberapa informasi tentang cara mendekati tabrakan (dan tabrakan diri untuk fakta itu) dapat ditemukan dalam makalah ini:
Pendekatan yang saya usulkan bukan dengan kontribusi besar, banyak game menggunakannya dengan hasil yang masuk akal dan itu paling baik digunakan oleh Jakobsen dalam mesin permainan Hitman-nya.
Dari pengalaman yang agak praktis, kekuatan penalti (mirip dengan pegas linier atau eksponensial yang mendapatkan input dari jarak penetrasi) tidak dengan baik menyelesaikan penetrasi ketika kekuatan lain dari tubuh yang bertabrakan berhasil menjadi lebih besar dari mereka. Itu sebabnya saya memilih untuk menggabungkan tiga pendekatan (hampir redundan): gaya reaksi Newton (Anda mendorong dinding, dinding mendorong kembali), kecepatan turunan impuls (bola snooker bertabrakan) dan non-alami "memindahkan tubuh saling menjauh secara geometris "solusi. Bersama-sama mereka tampaknya menyediakan segalanya: singkirkan sebagian besarartefak interpenetrasi yang jelek, tubuh yang bertabrakan cenderung berinteraksi satu sama lain dalam jangka panjang (karena kecepatan dan kekuatan restitusi - setidaknya kekuatan yang cenderung menyeret tubuh dalam skenario tabrakan dibatalkan dan tubuh terpental satu sama lain) . Terakhir, untuk lebih memahami konsep-konsep sederhana namun umum ini, saya sarankan untuk menganalisis slide-slide ini .
Julukan "metode yang disalahgunakan" saya yang menggambarkan langkah-langkah integrasi Verlet ditargetkan pada kepercayaan budaya populer bahwa ini adalah Cawan Suci metode integrasi. Ini sedikit lebih baik dari pada sepupu Euler Symplectic (juga disebut oleh beberapa Euler semi-implisit). Cara metode integrasi yang lebih rumit ada (dan semua menanggung nama implisit di dalamnya). Mesin permainan yang kuat memanfaatkannya, tetapi pengembang indie tidak punya waktu untuk bereksperimen dengan mereka sejak Verlet, ketika disetel ke skenario tertentu, benar-benar menakjubkan. Juga, sama sekali tidak ada metode integrasi yang dapat menangani kendala kaku tanpa sedikit pun kecurangan yang terlibat (tidak dapat menemukan tautan, tetapi makalah yang saya maksudkan harus disebut "X.Provot -" Kendala Deformasi dalam Massa Model Musim Semi untuk Menjelaskan Perilaku Kain Yang Kaku "