Rekomendasi mesin fisika yang dapat mensimulasikan permainan biliar dengan benar? [Tutup]


13

Saya membuat game biliar seperti game. Game ini membutuhkan pantulan reflektif yang benar (atau sangat akurat). Saya mencoba Box2D dan Bullet Physics , tetapi mereka berdua memiliki masalah ini.

Ilustrasi

Jika ada dinding di atas gambar ini, garis merah diharapkan menjadi bola nyata dalam permainan biliar. Tetapi mesin sering menunjukkan jalur hijau saja. Terutama,

  1. Ini terjadi setelah bola yang bergerak pelan mengenai dinding.
  2. Terkadang bola yang bergerak cepat tiba-tiba melambat.

Saya menemukan mesin fisika yang dapat mensimulasikan permainan biliar secara akurat sebanyak mungkin tanpa masalah ini. Bisakah saya mendapatkan rekomendasi? Sekarang saya menggali Newton Game Dynamics , tetapi saya tidak yakin mesin akan menunjukkan apa yang saya inginkan. Saya mempertimbangkan mesin PhysX sebagai percobaan berikutnya, dan harus membuat sendiri jika tidak ada yang berhasil. Tapi jelas itu akan memakan waktu yang sangat lama, jadi saya berharap saya tidak akan melakukannya. Saya akan sangat menghargai jika Anda menghemat waktu saya. Dan tentu saja, solusi dengan Fisika Box2D / Bullet juga disambut.

Saya bekerja dengan C / C ++ / Objective + C di iOS.


Saya melampirkan konfigurasi saya dengan Box2D.

Dinding

  • bentuk kotak statis
  • linear / redaman sudut = 0,1
  • restitusi = 1.0
  • gesekan = 100
  • kepadatan = 10
  • peluru = salah
  • rotasi tetap = salah
  • skala inersia = 1.0

Balls

  • bentuk bola dinamis
  • linear / redaman sudut = 0,1
  • restitusi = 1.0
  • gesekan = 100
  • kepadatan = 20
  • peluru = benar
  • rotasi tetap = salah
  • skala inersia = 1.0

3
kemungkinan mesinnya tidak salah, tetapi Anda belum menetapkan properti atau melakukannya dengan salah.
Bebek Komunis


Saya diuji dengan kepadatan 1 dan gesekan 0,0 ~ 0,1, itu tetap menempel.
Eonil

Jawaban:


8

Beberapa solusi.

  1. Untuk Box2D, atur b2_velocityThresholddalam b2Settings.hfile. Dalam kasus saya, saya mengaturnya 0.0fdan itu berhasil! Massa, gesekan, redaman BUKAN masalah. Lihat utas diskusi ini untuk lebih jelasnya. http://www.box2d.org/forum/viewtopic.php?f=3&t=6906&p=30782#p30782

  2. Menggunakan mesin fisika lainnya. Newton Game Dynamics dikonfigurasi melakukan ini dengan benar secara default. Namun menggunakan dinamika Newton di iOS dimungkinkan tetapi agak sulit daripada yang lain. Saya menggunakan beberapa hari untuk mengonfigurasinya untuk iOS.

Saya juga bertanya di forum BulletPhysics. Saya akan memperbarui ini ketika saya mendapat solusi.

- (edit) -

Ada beberapa atribut ambang di Bullet, namun saya tidak dapat menemukan hal yang persis sama dengannya b2_velocityThreshold.

Ini terlihat mirip, tetapi tidak berfungsi dengan baik.

btRigidBody->setContactProcessingThreshold(0.0f)

6

Box2D akan melakukan apa yang Anda inginkan tetapi Anda harus mengatur konstanta restitusi (bouncing) untuk perlengkapan dinding dan bola. Untuk permainan biliar, Anda mungkin ingin memulai dengan pemulihan sempurna dan gesekan tinggi tetapi redaman linear dan sudut, dan mengubah dari sana.


Saya mencoba banyak konfigurasi selama beberapa hari, tetapi itu masih terjadi. Bisakah saya mendapatkan satu contoh yang baik ...?
Eonil

3
Nilai kerapatan dan gesekan Anda tampak sangat besar, untuk Box2D.

4

Mesin fisika memiliki ambang pantulan. Saya tidak tahu bagaimana melakukannya di salah satu mesin itu, tetapi ambang batas yang ditetapkan terlalu tinggi akan menyebabkannya mengabaikan dampak di bawah kecepatan tertentu. Turunkan ambang pentalan dan akan terpental pada kecepatan yang lebih rendah.

Saya tahu Anda meminta mesin fisika yang berbeda, tetapi semua mesin fisika yang saya tahu menggunakan ambang pantulan untuk menjaga agar benda-benda tidak bergerak ketika mereka duduk di atas satu sama lain. Jadi menyarankan mesin fisika yang baik akan menjadi kontraproduktif karena mesin fisika yang baik akan memiliki efek ini.


0

Saya memiliki masalah ini dan bagi saya solusinya adalah memberikan ganti rugi yang sempurna.

Jadi bagi saya itu adalah 0,5 sqrt untuk semua objek. Karena sqrt (r1 * r1 + r2 * r2) == 1 dalam situasi sempurna.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.