Tuesday, January 27, 2009

Postępy

No więc projekt oddany no i zaliczony :] a więc do przodu. Niestety albo stety podczas prac nad nim zmuszony byłem naruszyć kod zajmujący się grafiką 2D która teraz nie działa w 100% poprawnie. Dlatego postanowiłem, że dla równowagi na chwilę obecną będę główną wagę przyładał właśnie to tej części silnika. W końcu jakby nie patrzeć to w niej ma on swój początek i to ona na chwilę obecna jest podstawową jego częścią (najbardziej rozbudowaną). 

No ale koniec ględzenia a czas co nieco o pisaniu, ostatnio podczas gdy przeglądałem funkcje bulleta natrafiłem na ciekawy fragmencik kodu ( btBoxShape::getVertex(...) ) służący do pobierania wierzchołków sześcianu. Nic by nie było wtym dziwnego gdyby nie to, że zastosowano tam fajną sztuczkę z bitami. Wzorując się trochę na niej napisałem pobieranie wierzchołków BBox'ów w moim silniku. ogólnie zasada jest prosta mamy 8 wierzchołków ponumerowanych {0,1,..,7 } wykorzystuję fakt że zapis bitowy tych liczb to kolejno {0000,1000,0100,1100,0010,1010,0110,1110} a więc mamy tutaj wszystkie permutacje pierwszych 3 miejsc dla {0,1}. 

Korzystajac z tego przyjmuje, że bierwszy bit (bX) odpowiada za X , drógi bit (bY) za Y a trzeci (bZ) za Z apisujemy funkcje:

if (bX == 0 ) minX else maxX;
if (bY == 0 ) minY else maxY;
if (bZ == 0 ) minZ else maxZ;

Prosto krótko i jednocześnie wygodnie. U mnie kod wykorzystujący ten trik wygląda tak:

inline CVector3f &getPoint(IN unsigned int a_uiIndex)
{
return CVector3f((a_uiIndex&1 > 0)?max.getX():min.getX(),
(a_uiIndex&2 > 0)?max.getY():min.getY(),
(a_uiIndex&4 > 0)?max.getZ():min.getZ());
}

Sunday, January 25, 2009

Filmik z Tank'ów

No więc jako, że dzisiaj muszę wysłać projekt, bo niestety czas się skończył, to załączam filmik jak projekt wygląda na chwilę obecną :

video

Saturday, January 17, 2009

Zmiany w silniku i Fizyki Cd.

Ostatni czas upłynął pod znakiem zmian i dobrych nowin.

Tanki stały się moim zaliczeniem na jeden z przedmiotów na studiach a więc dzięki temu nie będę musiał się za bardzo odrywać od ich tworzenia przez najbliższy czas.

Jak widać w temacie nastąpiły również pewne zmiany w moim silniku. Z powodu, że silnik się rozrusł a nie wszystkie jego elementy będą potrzebne we wszystkich projektach na nim opartych. Zdecydowałem się na rozbicie go na moduły z których każdy jest oddzielną biblioteką. Podział ten można obejrzeć poniżej.  


Dodatkowo w ostatnim czasie rozwinąłem fizykę. Wcześniejsze problemy z bulletem powoli się rozwiązują a ja utwierdzam w przekonaniu, że dokonałem dobrego wyboru decydując się tą właśnie bibliotekę. Podczas pisania fizyki skupiam się głównie na elementach potrzebnych do Tanków gdyż terminy gonią:] (w końcu jakiś deadline:]) a do zrobienia jest dość sporo. 

Podczas pisania staram się też o wygodę użycia fizyki, starając się przy tym nie ograniczać możliwości oferowanych przez bulleta.  A niestety okazuje się, że nie jest to takie proste jak by się wydawało i pewnie jeszcze w trakcie pisania dość sporo się zmieni. 

Kolejną nowinką jest to, że projekt dorabia się powoli porządnego UML'a oraz dokumentacji. Najpierw będą to moduły zajmujące się grafiką3D i fizyką a potem będę starał się uzupełniać braki w pozostałych projektach.