2D fizik motorunu nasıl oluştururum? [kapalı]


20

Yaptığım en gelişmiş oyunlar Box2dFlashAS3 fizik motoru ve seviyeleri ile bir platform oyunu ile yapılmış 8 top bilardo oyunudur.

Platform oyunları yaptığımda, her zaman bir motorun nasıl yapılacağını bilmek isterdim, böylece tekrar kullanabilirim. Eğimleri, kavisli eğimleri, mükemmel yerçekimi ve gerçek hayat fiziği olan oyunlar gördüğümde, her zaman motoru nasıl kodlayacağımı bilmemi diledim.

Lütfen gerekli bilgi tabanı için gerekli teknik ve makaleleri önerin.


Yanıtlar:


16

Kendi fizik motorunuzu, bunu yapma deneyiminden başka bir şey için yuvarlanmaya karşı öneririm (sadece işiniz bittiğinde muhtemelen atmanız gerektiğini unutmayın - tüm edgecas'leri ve sayısal sınır / istikrar sorunlarını çözmek gerçekten zor ve zamanınız mevcut bir motora katkıda bulunarak çok daha iyi kullanılabilir), birkaç kaynak aşağıda verilmiştir:

Bilardo Salonu Dersleri: Daireler veya Küreler Arasında Hızlı, Doğru Çarpışma Tespiti daire / daire ve küre / küre çarpışmasını tartışır.

N Uygulama Ayırma eksen teoremi tabanlı algılama ve tepki temel bir anlaşılması için harika.


9

Erin Catto, Box2D'nin çevrimiçi uygulamasıyla ilgili tüm GDC derslerine sahiptir . Box2D'nin de benim tecrübelerime göre okunması kolay bir kodu var.


pdf'ler gerçekten zor malzemelerdir. Ama, cpp ve h dosyalarını okuduğumda, dediğin gibi, bunlar "anlaşılabilir". Teşekkürler.
Vishnu

+1. Box2D, kendi başınıza dönerken çok zor olan şeylerden biri olan kararlılık konusunda da çok dikkatli.
leander

5

Bunu nasıl yapabileceğiniz aşağıda açıklanmıştır:

Yaklaşık hareket

Her fizik nesnesinin şu vektörlere ihtiyacı vardır:

  • Konum : Nesnenin olduğu yer.
  • Hız : Konumunun nasıl değiştiği.
  • Hızlanma : Hızının nasıl değiştiği.

Yani, sezgisel olarak, her fizik nesnesine her karede bu tür bir şey yapmanız gerekir a:

a.speed    += a.acceleration
a.position += a.speed

Tuzaklar : Bu, Euler entegrasyon yöntemi olarak bilinir . Bu yaklaşım, küçük hızlar ve ivmeler için ve küçük zaman adımlarında daha iyidir. Bir oyunda, bu normalde doğrudur. Ancak bir nesne gerçekten hızlı bir şekilde ince bir duvara veya doğrudan başka bir hareketli nesneye doğru hareket ederse, konumu tamamen geçecek kadar büyük miktarda artırıldığında, bu nesne ile çarpışmayı atlayabilir. Hızlı hareket eden nesneleriniz varsa, bundan kurtulmak için Sürekli Çarpışma Algılama'ya ihtiyacınız olabilir .

Çarpışma

Çarpışma, bu tür bir sekansla yaklaştırılabilir:

  1. Tespit : İki cismin kesiştiği tespit edilmiştir.
  2. Çözüm : Her bir vücudun konumu, artık kesişmeyecek şekilde değiştirilir.
  3. Fizik : Her vücudun hızı momentum, sürtünme ve restitüsyon (zıplama) olarak değiştirilir.

Bu, zaman içinde ayrık noktalarda meydana geldiği için Ayrık Çarpışma Tespiti olarak bilinir. Her adım dikkati hak ediyor:

Adım 1: Çarpışma tespiti (İşler çarpışıyor mu?)

İçin iki çemberin : kendi merkezleri daha ayrı kendi yarı çaplarının toplamından daha olup olmadığını Hemen kontrol edin.

İçin iki dikdörtgen : Çekle kendi köşe koordinatları başka dikdörtgenin içinde olup olmadığını.

Daha karmaşık çokgenleri içeren herhangi bir şey için, başka bir sorunun konusu olan Ayırma Ekseni Teoremine ihtiyacınız olacaktır .

Tuzaklar : Dikkate almak isteyebileceğiniz diğer birçok çarpışma türü vardır . Bazıları gerçekten karmaşık: Dışbükey çokgenler birden çok kez kesişebilir !

2. Adım: Çarpışma çözünürlüğü (Bunları birbirinden ayırma.)

Bir çarpışmayı çözmek için basit bir yöntem , çarpışma algılamasından elde edilen değerleri kullanarak minimum penetrasyon yoluyla çeviri yapmaktır. Bu esasen nesnelerin mümkün olan minimum hareket mesafesiyle birbirinden ayrılmasını içerir.

Örnek olarak, dairelerden birinin yerinde sabitlendiği daire-daire çarpışmasını ele alalım. Minimum yer değiştirme vektörü, orta nokta vektörleri arasındaki farkla aynı yöne sahiptir. Uzunluğu, yarıçaplarının toplamı ile merkezler arasındaki mesafe arasındaki farktır.

Bu fikir diğer şekillere kolayca genelleme yapar.

Tuzaklar : Her iki çarpışan nesne hareket edebiliyorsa, hareketlerinin inandırıcı bir yaklaşımını elde etmek için her ikisini de toplam mesafenin bir kısmı kadar hareket ettirmeniz gerekebilir. Açıkçası farklı yönlerde hareket etmek zorunda kalacaklar.

Adım 3: Çarpışma fiziği (Diğer değişiklikler.)

Gerçekleşmeye eğilimli olan en belirgin şey, nesnelerden bir veya ikisinin yön değiştirmesidir, yani hız vektörünü döndürür. Bunu uygulamak oldukça kolaydır.

Tehlikeler : Nesneler olabilir elastik ama olabilir vermeye sistemdeki toplam enerjisi azalır ve bu durumda,. Hava direnci nedeniyle sürüklemeniz gerekebilir . Sürtünme (özellikle statik sürtünme ) uygulaması oldukça karmaşıktır .

Bazı sonuçlar

Gerçekliğin simülasyonu, simüle etmek istiyorsa katlanarak daha da zordur. Sayısız kenar vakası, akıl almaz derecede zor formüller ve sürekli büyüyen araştırma makaleleri yığınları arasında dolaşıyorsunuz.

İhtiyaçlarınız basitse veya öğrenmeye hevesliyseniz, deneyin.

İhtiyaçlarınız karmaşıksa veya matematiği sevmiyorsanız, sizin için ayrıntıları bir fizik motoru ile aydınlatın. Box2D ve Bullet oyunlarda oldukça popüler.




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.