Ta strona używa cookies, kliknij tutaj aby dowiedzieć się więcej.
Początki z SDL OpenGL Box2D w C++
KoKa
27 lutego 2013 04:24:26

Przy okazji eventu Humble Bundle Mojam na www.humblebundle.com obserwując developerów tworzących swoje gry postanowiłem w końcu wziąć się za generowanie grafiki w C++ i napisać coś bardziej złożonego niż kalkulatory czy inne gry w zgadywanie liczby. Kiedyś próbowałem robić coś w DirectX ale skończyło się na animowanym rąbie, który zgrabnie lewitował i obracał się wokół swojej osi... :P Więc DirectX poszedł w kąt. Tym razem po przygodach z Javą postanowiłem, że grafika 2D będzie dobrym początkiem, dodatkowo zaimplementuję jakąś bibliotekę fizyczną i będzie jeszcze fajniej :].

Na początek trzeba było wybrać bibliotekę odpowiedzialną za rysowanie i renderowanie grafiki. Z bibliotek bardziej popularnych znam dwie, SDL i Allegro. Z powodów bliżej mi nie znanych wybrałem SDL (po prostu zapomniałem o istnieniu Allego więc nawet nie wziąłem tej biblioteki pod uwagę :P), dodatkowo użyłem biblioteki SDL_GFX przeznaczonej do rysowania prostych kształtów, wszystko to renderowane programowo (czyli przez procesor).

Długo nie musiałem czekać by przekonać się, że renderowania obsługiwane programowo jest wolne (nie do końca wszystko co związane z rysowaniem w SDL jest programowe, jest opcja przechowywania powierzchni w pamięci karty graficznej i wspomaganie kopiowania obszarów, ale nie wiele mi ten fakt pomógł) i już przy rysowaniu 15 prostokątów, które się obracają ilość klatek spadała do 31, a po lekkim przyspamowaniu spawnowaniem obiektów klatki spadły do 14. Tak być nie mogło, w jakiejkolwiek grze wolał bym mieć możliwość zespawnowania więcej niż 15 obiektów, więc musiałem zainteresować się renderowaniem korzystającym z akceleracji sprzętowej (karty graficznej) - czyli albo OpenGL albo DirectX. Jako, że SDL w jakiś sposób przyjaźni się z OpenGL'em, pomaga w utworzeniu okna itp. (właściwie nie wiem w czym więcej pomaga) użyłem OpenGL'a, SDL_GFX wywaliłem.

Do symulacji fizyki użyłem biblioteki Box2D, innym kandydatem była biblioteka Bullet (usłyszałem o niej przy okazji streamu z gry Grimind), jednak nie pamiętałem nawet jej nazwy aż do pisania tego tekstu, więc wypadło na Box2D, który zły nie jest, został użyty w grach takich jak Angry Birds, Limbo czy King Arthur's Gold (to gry, o których pamiętałem, Box2D został jeszcze użyty w Crayon Physics Deluxe, Rolando, Fantastic Contraption, Incredibots, Tiny Wings, Transformice i Happy Wheels - to już wyczytałem z wikipedii) więc jest zły być nie może :). Tutaj jest link gdzie można pobawić się demkiem napisanym w javascript z użyciem właśnie biblioteki Box2D http://box2d-js.sourceforge.net/index2.html.

Po dwóch dniach rozkminiania co gdzie i do czego, wyszło mi coś takiego: (filmik poniżej). Niby nic a cieszy, i jest dobrym początkiem do... zrobienia czegoś innego :D.

Komentarze