Havuz oyununu doğru şekilde simüle edebilen fizik motoru önerisi? [kapalı]


13

Bilardo oyunu gibi bir oyun yapıyorum. Bu oyun doğru (veya çok doğru) yansıtıcı sıçramalar gerektirir. Box2D ve Bullet Physics'i denedim , ama ikisinin de bu sorunu var.

örnekleme

Bu görüntünün üstünde bir duvar varsa, bir bilardo oyununda kırmızı çizginin gerçek bir topun seyri bekleniyor. Ancak motorlar genellikle yeşil hat rotasını gösterir. Özellikle,

  1. Bu, yavaş hareket eden bir top duvara çarptıktan sonra olur.
  2. Bazen hızla hareket eden bir top aniden yavaşlar.

Bu problemler olmadan bilardo oyununu olabildiğince doğru bir şekilde simüle edebilen bir fizik motoru buluyorum. Bazı öneriler alabilir miyim? Şimdi Newton Game Dynamics'i kazıyorum , ancak motorun istediğimi göstereceğinden emin değilim. PhysX motorunu bir sonraki deneme olarak görüyorum ve hiçbir şey çalışmazsa kendiminkini yapmak zorundayım. Ama çok uzun zaman alacağı açık, bu yüzden keşke yapmayacağım. Eğer zamanımı kurtarırsan çok sevinirim. Ve elbette, Box2D / Bullet Physics ile çözüm de memnuniyetle karşılanmaktadır.

İOS'ta C / C ++ / Objective + C ile çalışıyorum.


Konfigürasyonumu Box2D ile ekliyorum.

Duvarlar

  • statik kutu şekli
  • doğrusal / açısal sönümleme = 0.1
  • restitüsyon = 1.0
  • sürtünme = 100
  • yoğunluk = 10
  • bullet = yanlış
  • sabit dönüş = yanlış
  • atalet ölçeği = 1.0

taşaklar

  • dinamik küre şekli
  • doğrusal / açısal sönümleme = 0.1
  • restitüsyon = 1.0
  • sürtünme = 100
  • yoğunluk = 20
  • bullet = true
  • sabit dönüş = yanlış
  • atalet ölçeği = 1.0

3
büyük olasılıkla motorun yanlış olmaması olabilir, ancak bir mülk ayarlamıyorsunuz veya bir şekilde yanlış yapıyorsunuz.
Komünist Ördek


Yoğunluk 1 ve sürtünme 0.0 ~ 0.1 ile test ettim, yapışmaya devam ediyor.
Eonil

Yanıtlar:


8

Çeşitli çözümler.

  1. Box2D için set b2_velocityThresholdiçinde b2Settings.hdosyanın. Benim durumumda ayarladım 0.0fve işe yaradı! Kütle, sürtünme, sönümleme sorun değildi. Daha fazla ayrıntı için bu tartışma konusuna bakın. http://www.box2d.org/forum/viewtopic.php?f=3&t=6906&p=30782#p30782

  2. Diğer fizik motorunu kullanma. Newton Game Dynamics bunu varsayılan olarak doğru şekilde yapılandırarak yapılandırdı. Ancak iOS'ta Newton dinamiklerini kullanmak mümkündür, ancak diğerlerinden biraz daha zordur. İOS için yapılandırmak için birkaç gün kullandım.

Ayrıca BulletPhysics forumlarını da soruyorum. Bir çözüm bulduğumda bunu güncelleyeceğim.

-- (Düzenle) --

Bullet'te bazı eşik özellikleri var, ancak tam olarak aynı şeyi bulamadım b2_velocityThreshold.

Bu benzer görünüyor, ancak iyi çalışmadı.

btRigidBody->setContactProcessingThreshold(0.0f)

6

Box2D istediğinizi yapar ancak duvar ve top armatürleri için restitüsyon (sıçrama) sabitlerini ayarlamanız gerekir. Bir bilardo oyunu için muhtemelen mükemmel bir restitüsyon ve yüksek sürtünme ancak doğrusal ve açısal sönüm ile başlamak ve oradan tweak istiyorsunuz.


Birkaç gün boyunca birçok yapılandırmayı denedim, ancak yine de oluyor. İyi bir örnek alabilir miyim ...?
Eonil

3
Box2D için yoğunluk ve sürtünme değerleriniz çok büyük görünüyor.

4

Fizik motorlarının sıçrama eşiği vardır. Her iki motorda da nasıl yapacağımı bilmiyorum, ancak eşik çok yüksek ayarlanmışsa, belirli bir hızdaki etkileri görmezden gelmesine neden olacak. Hemen çıkma eşiğini düşürdüğünüzde daha düşük hızlarda çıkacaktır.

Farklı bir fizik motoru istediğini biliyorum, ama bildiğim tüm fizik motorları, nesnelerin üst üste otururken titremesini önlemek için sıçrama eşiklerini kullanıyor. Bu nedenle, iyi bir fizik motorunun, herhangi bir iyi fizik motorunun bu etkiye sahip olacağı için verimsiz olacağını öne sürmek.


0

Bu sorunu yaşadım ve benim için çözüm mükemmel bir tazminat sağlamaktı.

Benim için bu, tüm nesneler için 0,5 sqrt. Çünkü sqrt (r1 * r1 + r2 * r2) == 1 mükemmel durumda.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.