tirsdag, november 13, 2007

Design af skeletsystem, porte

Vi er nu nået til at arbejde med en konkret pythonimplementering af vores led, men først vil vi gerne snakke lidt om hvordan vores design flasker sig.

I den forbindelse har vi lavet en masse designarbejde, hvoraf jeg vil forsøge at gøre rede for noget af det her.

I pyhton er vores vigtigste mål, at producere et bibliotek med led og skeletdele, der kan sættes sammen på kryds og tværs af hinanden. Det gør vi objektorientere. Det vil sige, at hver skeletdel består af skeletdele eller er defineret ved hjælp af et basis.

Det eneste openengine er i stand til at forstå, er i øjeblikket partikler og constraints, så vores pythonobjekter skal nødvendigvis bestå af disse dele for at openengine kan forholde sig til dem. Med andre ord er vores basis: partikler og constraints.

For at producere et bibliotek med led og skeletdele må vi starte et sted, og da vi på sigt er interesseret i at vores bibliotek skal anvendes til ragdollfunktionalitet er det med ledene vi starter.
Men for overhovedet at producere led må vi være klar over hvordan vi har tænkt os, de forskellige skeletdele skal sættes sammen.

Vi har valgt at anvende en port-abstraktion. En port er i vores model 4 partikler der har constraints til hinanden. Hvis man er bekendt med geometrisk triangulering ved man, at et punkt defineret ved een afstand til et fast punkt kan ligge hvor som helst på en kugleskal, et punkt defineret ved afstande til 2 punkter gør at punktet kan ligge hvorsomhelst på en cirkelkant, hvorimod et punkt defineret ved afstande til 3 punkter nødvendigvis må ligge på eet bestemt sted.

For at integrere to systemer fast i forhold til hinanden i vores system, der kun har partikler og afstande, må de to systemer nødvendigvis være fælles om 4 punkter, der er defineret med afstande i forhold til hinaden. Fordi vi ønsker at vores led skal vende rigtigt i forhold til hinanden og kun klistrer sammen på bestemte steder er porte den bedste abstraktion vi har adgang til. Porte har, derudover, en universel form, således at vi kan optimere ved at kombinere to porte der er sat sammmen til 4 punkter uden at skulle forholde os til form, men kan nøjes med at kigge på størrelse. Vores porte ser ca. sådan her ud:


Så det gælder altså, at alle vores led og senere også vores knogler kommer til at anvende porte.

Vi har ikke besluttet om vores porte også skal have een universel størrelse endnu, men det kan godt være det viser sig at være lettest. Vi har endnu ikke forholdt os præcist til, hvordan vi ønsker at kunne skallere vores skeletter og lignende, men det gælder utvetrydigt, at hvis alle afstande i alle contraints bliver ganget med samme konstant vil systemet skalere, så det er kun relevant hvis vi ønsker forskelle i portstørrelse inden for samme figur. Indtil videre går vi ikke ud fra at vi har en universel størrelse, kun en universel form.

Ingen kommentarer: