Mermi fiziğini oyunuma nasıl entegre edebilirim?


12

Burada bulunan yayın dosyasını indirdim , ancak nereden başlayacağımı bilmiyorum. Oyunumda çok sayıda obtu ve bir küre var, bunların hepsinin birbiriyle çarpışmasını istiyorum. (Hepsinin ağları ve ilişkili sınırlama hacimleri vardır)

edit - Ben sadece cuboids aslında onlarla ilişkili AABB var fark ettim. Sanırım bunu en azından değiştirmek zorunda kalacağım.

İzlemem gereken adımlar nelerdir?


2
4.4 Integration overviewÇok spartan olduğunu biliyorum ama temel süreci açıklayan bölümdeki kılavuza baktınız mı? Eğer buna ve örnek Demos koduna bakarsanız, çok fazla sorun yaşamamalısınız.
PeterT

Ayrıca madde işareti klasöründeki örnekleri kontrol edin, bir sürü 'em
Maik Semder

@MaikSemder Belirli olanları nasıl açacağımdan tam olarak emin değildim. dosyaları sadece linux nedir?
SirYakalot

aslında örneklerin nasıl açılacağına dair inanılmaz derecede faydalı olacağını not eder, o zaman şeyleri nasıl birbirine bağladıklarını görebiliyordum. Bunun için google olacak ama yapabildiğim zaman sormalıyım düşündüm.
SirYakalot

Hangi platformda olduğunuza bağlı. Windows'daki görsel stüdyo için örnekler için bir .sln dosyası var, kullandığınız şey budur. Sadece bullet klasöründeki sln dosyasını arayın.
Maik Semder

Yanıtlar:


21

İzlemeniz gereken temel adımlar şunlardır:

  1. Önce fizik simülasyonunuzu yönlendirmek için bir dünya nesnesi (yani btDiscreteDynamicsWorld) oluşturun.

  2. GameObjectBelki de sınırlayıcı kutusu ve dünyadaki konumu / yönelimi ile birlikte bir modeli depolayacak bir sınıfa sahip olmalısınız . Yerine pozisyon / yönlendirme bilgileri ile bir fizik örneğine gövdesi nesnesi (örneğin btRigidBody) ve modelini işlenirken, bunun yerine gövde tarafından sağlanan bilgileri kullanabilir. Vücudu oluştururken, sahip olduğunuz sınırlayıcı hacimlere uyması gereken kütlesini ve çarpışma şeklini sağlamanız gerekir. Bu konuyu başka sorunuzda da konuşmuştum .

  3. Oyun nesnenizin gövdelerinin her birini dünya nesnesine ekleyin .

  4. Simülasyonu dünyaya adım atarak güncelleyin (yani dünyanızı arayarak stepSimulation).

El kitabını okumak için biraz zaman ayırın, çünkü çok fazla bilgiye sahiptir.


Adres yorumunu düzenle

Sormadan önce küfrediyorum ama ... oyunuma doğru dosyaları dahil etmek gibi çok temel şeyleri nasıl yaparım? Eğer spesifikasyonlara ihtiyacınız varsa, katı cisim çarpışmalarıyla ilgilenecek dosyaları arıyorum. Ayrıca şimdiye kadar yardım için çok teşekkür ederim!

Yorumunuzdan daha önce hiç harici C ++ kütüphaneleriyle çalışmadığınız anlaşılıyor. Bunu yaptığımdan bu yana bir süre geçti, ancak bu süreci (Visual Studio'da) hatırlıyorum.

Yeni başlayanlar için neye ihtiyacınız olduğunu açıklayan kılavuzu alıntılarım:

- #include btBulletDynamicsCommon.h in your source file 
- Required include path: Bullet/src folder 
- Required libraries: BulletDynamics, BulletCollision, LinearMath

Ve yukarıdaki koşulları yerine getirmek için izlemeniz gereken temel adımlar ...

1. Hazırlık Adımı

Her şeyden önce, indirdiğiniz dosyayı bilinen bir dizine çıkarın, örn C:\Bullet. Bu klasörün yolunu daha sonra bilmeniz gerekir.

İçinde projenizde referans vermeniz gereken iki klasör var. Birincisi , kaynak kodunuza ekleyeceğiniz başlık dosyalarını srctutan klasördür . İkincisi, projenize bağlayacağınız kütüphane dosyalarını tutacak klasördür . Dahil etme ve bağlamanın iki farklı şey olduğuna dikkat edin..hlib.lib

Ancak libklasör şimdilik boş olmalı, çünkü henüz motoru inşa etmediniz. Bu nedenle, örneğin CMake ve Visual Studio kullanarak projenin nasıl oluşturulacağına ilişkin kılavuza bakın. Sayfa 7'de.

Eğer başarılı sonra, en az üç dosya olmalıdır libklasördeki: BulletDynamics.lib, BulletCollision.libve LinearMath.lib(ı manuel tahmin ediyorum). Şimdi Bullet ile projeniz arasındaki bağlantıyı kurmak için ...

2. Başlıkları Dahil Et

Her şeyden önce, C:\Bullet\srcklasörü projenizin yol ekleme seçeneklerine eklemeniz gerekir . Projenizi sağ tıklatıp Configuration Properties -> C/C++ -> General -> Additional Include Directories, dizin yolunu oraya yazarak ve yazarak Visual Studio'da yapabilirsiniz .

Bunu ayarladıktan sonra #include “btBulletDynamicsCommon.h”, kodunuzu kolayca yapabilirsiniz . Bu başlık, ihtiyaç duyduğunuz tüm özelliklere bir hub işlevi görür.

3. Bağlantı Kütüphaneleri

Son olarak, yukarıda belirtilen kütüphaneleri bağlamanız gerekir. Frist, altında klasöre Configuration Properties -> Linker -> General -> Additional Library Directoriesyol ekleme libveya başka bir deyişle C:\Bullet\lib.

Ardından, Configuration Properties -> Linker -> Input-> Additional Dependenciesbağımlılık listesine kitaplıkların adını ekleyin. Her kitaplığı bir ile ayırın ;ve dosya uzantısını unutmayın. Yani örneğin, sen olabilir eklemek listenin sonuna bu: BulletDynamics.lib;BulletCollision.lib;LinearMath.lib.

Bundan sonra projenizi oluşturabilir ve çalıştırabilirsiniz.


Sormadan önce küfrediyorum ama ... oyunuma doğru dosyaları dahil etmek gibi çok temel şeyleri nasıl yapabilirim? Eğer spesifikasyonlara ihtiyacınız varsa, katı cisim çarpışmalarıyla ilgilenecek dosyaları arıyorum. Ayrıca şimdiye kadar yardım için çok teşekkür ederim!
SirYakalot

@AsherEinhorn Düzenlememi kontrol et.
David Gouveia

@AsherEinhorn Sorun değil, bu da birkaç yıl önce C ++ kütüphaneleriyle ilk kez çalıştığımda beni tökezledi.
David Gouveia

Evet, şimdiye kadar kaçınılması gereken şeylerden biri, oyunlarımdaki tüm kod benim, ama kendi fizik motorumu yazmaya çalışmak, diğer insanların onları benden daha iyi yaptığı zaman kaybı. muhtemelen hiç olacak.
SirYakalot

@ AsherEinhorn Evet, oyun basit görünse bile kendi fizik motorunuzu yazmaya zahmet etmeyin . İlk kez bir fizik motoru kullandığımda, bunu basit bir 2D oyuna kendim uygulamaya çalıştım. Ayırma ekseni teoremini kullanarak OBB-OBB çarpışma algılamasını uyguladım, ancak çarpışma yanıtına ihtiyaç duyduğum noktaya geldiğimde tamamen sıkışmıştım. Sonra bir fizik motorunu da deneyebileceğimi düşündüm (özellikle Box2D kullandım) ve bir saatin altında her şeyim hazır ve çalışır durumda.
David Gouveia
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.