lørdag, september 15, 2007

Fix i SDLInput og bedre OBJ loader

Efter at have fået nogle tips på mail listen omkring SDLInput og have tænkt lidt selv, blev vi enige om at have en mouse state inde i SDLInput og update den hver gang der kom et MouseMoved event, dette gør så at GetState() giver den korrekte mouse state hver gang!
Samtidig med dette blev der også lavet nogle små updates af koden!

Den anden store bedrift er at have en fungerende OBJ loader (eller det mener vi at vi har). Vi har brugt boost::algorithm::string::trim og boost::algorithm::string::split til at kunne klippe lidt i tekst strenge. Vi synes allesammen at gøre det ved hjælp af sscanf var en smule for ikke intuitivt så derfor ville vi gå efter en måde at klippe os frem til det.

Når man læser en OBJ fil, får det hele ud på at lave en Face ud fra nogle vertices, texture coordinates og nogle normals. Som det kan ses nedenfor har vi brugt nogle indbyggede klasser i OE for at gøre dette lettere.

vector< Vector<3,float> > vertices;
vector< Vector<3,float> > texture_coords;
vector< Vector<3,float> > normals;


Ved at bruge boost::algorithm::string::split og trim er det ikke sværere at klippe en tekst i stykker end at skrive.

in->getline(buf,255);
string str(buf);
vector<string> tokens;
// remove whitespaces from string
trim(str);
// populate tokens with the bits from str seperated by " "
split(tokens, str, is_any_of(" "));


Det var lettere i test of debug fasen at bruge en mindre OBJ fil som ind-put til loaderen. Der kunne måske godt have været udleveret en simpel model som en Cube beskrevet med de dele af OBJ formatet som vi skulle læse. Derved have vi noget simpelt som stadig skulle have det hele i sving.

Ingen kommentarer: