Saya mencoba membuat game 3D sederhana dan perlu membatasi pemain dalam batas-batas dunia game. Ketika pemain menyentuh sisi dunia saya ingin kapal pemain sedikit memantul.
Akibatnya saya mencoba untuk menjebak pemain di dalam kotak, dan menghentikan mereka lolos dari sisi ...
Saya telah berhasil mendefinisikan batas-batas gameworld sebagai kumpulan pesawat, dengan normals dan jarak dari asalnya. Pemain memiliki bola pembatas bola dan dari mengikuti situs web ini http://www.gamasutra.com/view/feature/3383/simple_intersection_tests_for_games.php Saya telah berhasil mendeteksi tabrakan.
Saya sekarang tidak bisa mengetahui apa yang harus dilakukan ketika tabrakan terdeteksi. Yang terbaik yang bisa saya kelola adalah pemain terjebak di pesawat, melewatinya, atau memantul berulang kali dengan kecepatan sangat cepat.
Akal sehat mengatakan kepada saya bahwa saya perlu menghitung sudut pantulan dari pesawat, menggunakan normal dan menerapkannya pada kecepatan pemain, namun saya pikir saya harus terlebih dahulu melihat apakah pemain telah melalui pesawat yang sedikit saya tidak bisa bekerja.
sumber
distance = speed * time
, biasanya dengan jarak ekstra kecil untuk menghindari kesalahan) dan kemudian memperbarui kecepatannya ke apa hasil tabrakan.F = ma, atau a = F / m. Hitung titik tumbukan antara bola dan bidang. Ini biasanya Sphere center - radius * normal. Jika Anda ingin lebih akurat, hitung sejauh mana bola telah menembus pesawat, dan sesuaikan perhitungan Anda. Ini sebagian besar tentu saja opsional, kecuali jika Anda ingin fisika benar-benar akurat. Sekarang hitung kecepatan relatif sepanjang normal. Untuk bidang statis ini adalah: Vball Dot N. Lalu Multiply VballDotN dengan -1, dan kalikan dengan massa. Dalam fisika pada tahap ini Anda juga akan mengalikannya dengan koefisien restitusi (faktor bouncing). Lipat gandakan skalar ini dengan N dan Anda punya kekuatan.
Saat menyesuaikan Vball, bagilah gaya dengan massa lagi dan Anda memiliki akselerasi akhir, jadi tambahkan saja ini pada kecepatan dan Anda memiliki kecepatan tabrakan pos akhir.
Metode ini akurat untuk formula respons tabrakan. Jika Anda ingin lebih akurat, Anda harus mempertimbangkan gesekan, yang akan menyebabkan bola berputar, tetapi saya tidak tahu apakah Anda menginginkannya dalam permainan Anda. Jika Anda melakukannya, ini adalah bagaimana Anda menghitung gaya tangensial:
Pastikan untuk menghitung Ft sebelum menerapkan efek linear apa pun, atau friksi tidak akan akurat.
sumber
vec3 F = -CollisionNormal * (1.0f+Ball.getRestitution())*vDotN;
:?Saya menyarankan Anda menghitung jarak dari pesawat terlebih dahulu; dan kemudian ketika jarak <= ke jari-jari melakukan reaksi tabrakan.
Anda kemudian dapat mengubah ini untuk menghitung jarak dan jika jaraknya kurang dari jari-jari (yang berarti objek tumpang tindih) menggeser posisi bola dan kemudian melakukan reaksi tabrakan.
sumber