tirsdag, oktober 09, 2007

RigidBox noget af vejen...

I denne uge skulle vi implementare fysikken i vores spil, hertil fik vi udleveret en RigidBox klasse som vi skulle implementere. Vi fik hurtigt loaded SmallLevel og lavet en simpel bane så vores hybrid quad og bsp træ ikke tager så lang tid at lave.

Vi fik relativt hurtigt implementeret Verlet ud fra artiklen (med en mindre fejl). I den forbindelse lavede vi en inner class i RigidBox som hedder Constraint som modellerer et constraint mellem 2 partikler. Her i gemmer vi de pointers til de 2 punkter og deres ideal afstand. Derved kan man lave en simpel metode SatisfyMe på hvert enkelt constraint. Koden til det ses nedenfor.


class Constraint {

private:
float length;
Vector<3, float>& p1;
Vector<3, float>& p2;

public:

Constraint(Vector<3, float>& point1, Vector<3, float>& point2) : p1(point1), p2(point2) {
this->length = p1.Distance(p2);
};

float getLength() {
return length;
};

Vector<3, float>& getP1() {
return this->p1;
};

Vector<3, float>& getP2() {
return this->p2;
};

void SatisfyMe() {
Vector<3, float> delta = p1 - p2;
float deltalength = p1.Distance(p2);
float diff = (deltalength - length) / deltalength;
p1 = p1 - delta * 0.5 * diff;
p2 = p2 + delta * 0.5 * diff;

};

};



Vi implementerede også på baggrund af Frustum den måde at tegne vores constraints. Nedenfor ses vores første eksperiment med dette.



Her ses det at vores model ligger ovenpå centrum af vores rigidbox, derfor var vi nød til at indføre et offset så vi kan translatere den ned så modellen ligger korrekt indenfor denne boks. Men desværre er der ikke alle modeller der er ens....



Dette kan vi ikke lige svare på, men har valg en model FutureTank hvor denne relation passer.

Vi er desværre ikke blevet færdig med ugens opgave med at få alle dele af fysikken til at virke. Vi har en gravity som trækker nedaf og dette virker. Vi kan også påvirke de enkelte partikler med en kraft og derved sætte objektet i bevægelse. Vi har ikke nogen form for kollisions detection med banen endnu..

Nedenfor ses et sjov billed af vores bil som roterer frit gennem rummet og er .. tja.. lidt ude af kontrol ;-)

Ingen kommentarer: