Jak zintegrować fizykę pocisków z moją grą?

12

Pobrałem znaleziony tutaj plik wydania , ale nie jestem pewien, od czego zacząć. W mojej grze mam wiele podłużnych i kuli, chcę, aby wszystkie one kolidowały ze sobą. (Wszystkie mają siatki i powiązane objętości ograniczające)

edytuj - Właśnie zdałem sobie sprawę, że prostopadłościany mają z nimi skojarzone AABB. Chyba muszę to zmienić przynajmniej.

Jakie kroki muszę wykonać?

SirYakalot
źródło
2
czy zajrzałeś do podręcznika w rozdziale 4.4 Integration overviewwiem, że jest bardzo spartański, ale opisuje podstawowy proces. Więc jeśli spojrzysz na to i kod na przykładowe dema, nie powinieneś mieć zbyt wielu problemów.
PeterT
Sprawdź również przykłady w folderze punktorów, jest ich kilka
Maik Semder
@ MaikSemder Nie byłem pewien, jak otworzyć określone. czy robią pliki tylko linux?
SirYakalot
tak naprawdę notatki o tym, jak otwierać przykłady, byłyby niezwykle pomocne, wtedy mogłem po prostu zobaczyć, w jaki sposób powiązali ze sobą różne rzeczy. Rozejrzę się za tym, ale pomyślałem, że powinienem zapytać, póki mogę.
SirYakalot
To zależy od tego, jaką jesteś platformą. W Visual Studio na Windowsie jest plik .sln dla przykładów, zakładam, że tego właśnie używasz. Po prostu wyszukaj plik SLN w folderze punktorów.
Maik Semder

Odpowiedzi:

21

Oto podstawowe kroki, które musisz wykonać:

  1. Najpierw utwórz obiekt świata (tj. btDiscreteDynamicsWorld), Aby przeprowadzić symulację fizyki.

  2. Powinieneś już mieć taką klasę, GameObjectże może przechowuje model wraz z obwiednią i pozycją / orientacją na świecie. Zastąpić w pozycji / orientacji informacji o wystąpieniu fizyki ciała obiektu (tj btRigidBody), a podczas odtwarzania modelu na podstawie informacji dostarczonych przez organizm, a nie. Tworząc ciało, musisz podać jego masę i kształt kolizji, które powinny odpowiadać ograniczonym objętościom, które już masz. Mówiłem o tym również w innym pytaniu .

  3. Dodaj ciała każdego obiektu gry do obiektu świata .

  4. Zaktualizuj symulację , krocząc po świecie (tj. Wzywając stepSimulationswój świat).

Poświęć trochę czasu na przeczytanie instrukcji, ponieważ zawiera ona również wiele informacji.


Edytuj w celu zaadresowania komentarza

Kulę się zanim zapytam, ale ... jak mogę zrobić bardzo podstawowe rzeczy, takie jak po prostu dołączenie odpowiednich plików do mojej gry? Jeśli potrzebujesz konkretnej informacji, szukam plików, które poradzą sobie ze sztywnymi zderzeniami ciała. Dziękuję również bardzo za dotychczasową pomoc!

Z twojego komentarza wynika, że ​​nigdy wcześniej nie pracowałeś z zewnętrznymi bibliotekami C ++. Minęło trochę czasu, odkąd to zrobiłem, ale tak pamiętam proces (w Visual Studio).

Na początek cytuję instrukcję, która już wyjaśnia, czego potrzebujesz:

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

Oto podstawowe kroki, które musisz wykonać, aby spełnić powyższe warunki ...

1. Krok przygotowawczy

Przede wszystkim rozpakuj pobrany plik do znanego katalogu, np C:\Bullet. Będziesz musiał później poznać ścieżkę do tego folderu.

Wewnątrz znajdują się dwa foldery, do których należy odwołać się w swoim projekcie. Pierwszy to srcfolder, w którym przechowywane są .hpliki nagłówkowe, które zostaną uwzględnione w kodzie źródłowym. Drugi to libfolder, który będzie trzymać .libpliki biblioteki, które będą odwołuje się do projektu. Zauważ, że dołączanie i łączenie to dwie różne rzeczy.

Ale libfolder powinien być na razie pusty, ponieważ nie zbudowałeś jeszcze silnika. Więc zapoznaj się z instrukcją, jak zbudować projekt przy użyciu CMake i Visual Studio, na przykład. Jest na stronie 7.

Po odnieść sukces, trzeba mieć co najmniej trzy pliki w libfolderze: BulletDynamics.lib, BulletCollision.libi LinearMath.lib(mam zgadywać z podręcznika). Teraz, aby nawiązać połączenie między Bullet a twoim projektem ...

2. Dołącz nagłówki

Przede wszystkim musisz dodać C:\Bullet\srcfolder do opcji ścieżki dołączania do projektu. Możesz to zrobić w programie Visual Studio, klikając projekt prawym przyciskiem myszy, nawigując Configuration Properties -> C/C++ -> General -> Additional Include Directoriesi zapisując tam ścieżkę katalogu.

Po skonfigurowaniu możesz po prostu zrobić #include “btBulletDynamicsCommon.h”kod. Ten nagłówek wydaje się służyć jako centrum wszystkich wymaganych funkcji.

3. Połącz biblioteki

Na koniec musisz połączyć wyżej wymienione biblioteki. Frist, pod Configuration Properties -> Linker -> General -> Additional Library Directoriesdodać ścieżkę do libfolderu, lub innymi słowy C:\Bullet\lib.

Następnie w obszarze Configuration Properties -> Linker -> Input-> Additional Dependenciesdodaj nazwę bibliotek do listy zależności. Oddziel każdą bibliotekę od ;i nie zapomnij rozszerzenia pliku. Tak na przykład, można dodać to do końca listy: BulletDynamics.lib;BulletCollision.lib;LinearMath.lib.

Po tym powinieneś być w stanie zbudować i uruchomić swój projekt.

David Gouveia
źródło
Kulę się zanim zapytam, ale ... jak mogę zrobić bardzo podstawowe rzeczy, takie jak po prostu dołączenie odpowiednich plików do mojej gry? Jeśli potrzebujesz konkretnej informacji, szukam plików, które poradzą sobie ze sztywnymi zderzeniami ciała. Dziękuję również bardzo za dotychczasową pomoc!
SirYakalot
@AsherEinhorn Sprawdź moją edycję.
David Gouveia,
@AsherEinhorn Nie ma problemu, to mnie też potknęło, kiedy po raz pierwszy pracowałem z bibliotekami C ++ kilka lat temu.
David Gouveia
Tak, to jedna z tych rzeczy, których do tej pory unikałem, cały kod w moich grach jest mój, ale próba napisania własnego silnika fizyki to tylko strata czasu, gdy inni ludzie zrobili to lepiej niż ja prawdopodobnie kiedykolwiek będzie.
SirYakalot
@AsherEinhorn Tak, nie zawracaj sobie głowy pisaniem własnego silnika fizyki, nawet jeśli gra wydaje się prosta. Pierwszy raz użyłem silnika fizyki po tym, jak spróbowałem go zaimplementować w prostej grze 2D. Zaimplementowałem wykrywanie kolizji OBB-OBB za pomocą twierdzenia o osi oddzielającej, ale kiedy dotarłem do punktu, w którym potrzebowałem reakcji na kolizję, byłem całkowicie utknięty. Potem pomyślałem, że równie dobrze mogę wypróbować silnik fizyki (w szczególności użyłem Box2D) i po niecałej godzinie wszystko działało.
David Gouveia