BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr....

29
BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen Gert Heiremans Wim van Aarle Jan Vlegels

Transcript of BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr....

Page 1: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

BrainStorm

Jaarproject 1e licentie informaticaUniversiteit Antwerpen2004-2005

Promotor: Prof. dr. ir. Tom DhaeneBegeleider: Wouter Hendrickx

Bram DerkinderenGert HeiremansWim van AarleJan Vlegels

Page 2: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Opgave

• Visualisatie van modellen opgebouwd uit legoblokken.

• Onderzoek naar de mogelijkheden met betrekking tot realtime animatie van deze modellen.

Page 3: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Overzicht

Page 4: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

DatParser

• Zorgt voor de omzetting van een .ldr of .dat file naar een goede brickstructuur.

• Voegt voor elke brick de connectoren toe die gevonden worden in de database.

• Zorgt ervoor dat de kleuren van de lijnen en vlakken correct zijn.

• Optimalisatie: elk blokje wordt slechts 1 maal geparsed en wordt nadien bewaard in een map

Page 5: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.
Page 6: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

LCDManager (1)

• Beheert de Ldraw Connection Database– De ingegeven lijnstructuur van bepaalde

connectorTypes.– Een weloverwogen selectie van bricks met hun

connectoren samen met de relatieve positie en richting van de connectoren.

– Een lijst van connectorTypes die op elkaar passen.

Page 7: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

LCDManager (2)

• Maakt mogelijk om de lijnstuctuur van een bepaald connectorType in te geven met behulp van het “klikalgoritme” en om deze lijnstructuur op te slaan.

• Zoekt aan de hand van de manueel ingegeven lijnstructuren van de connectoren, deze connectoren terug in een reeks gegeven bricks.

Page 8: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

LCDManager (3)

• Het procede dat gebruikt wordt om de connectoren in de bricks terug te vinden werkt goed, maar er zijn ook nadelen:– Vraagt veel rekentijd.– Er zijn in Lego enorm veel connectoren die zeer

weinig voorkomen, en dus is het niet de moeite om de lijnen secuur te gaan aanklikken en deze connector in alle bricks te gaan zoeken.

Page 9: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Ldraw Connection Database

Page 10: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

DatLinker (1)

• Sorteert de Bricks van de geparste Bricklijst in containers: de BigBricks.

• Alle Bricks in een zelfde BigBrick vormen samen een geheel van vast geconnecteerde Bricks.

• De BigBricks in een consistent model zijn onderling verbonden door middel van LooseConnections.

Page 11: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

DatLinker (2)

• Checkt met behulp van de database, gegeneerd door LCDManager, of er tussen 2 Bricks een connectie bestaat, hetzij een vaste, hetzij een losse connectie.

• Op basis van het resultaat van bovenstaande checks verdeelt het DatLinker-algoritme de Bricks over de correcte BigBricks.

Page 12: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

DatLinker (3)

• Probleem 1: Vele queries op de database zijn noodzakelijk, met zéér zware gevolgen voor de prestaties. Enkele optimalisaties werden toegepast.

• Probleem 2: Doordat de lijst met geparste Bricks 1 voor 1 doorlopen wordt moet er gemerged worden. Overhead is door optimalisaties grotendeels weggewerkt.

Page 13: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.
Page 14: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Abstract Brick Structure (ABS)

• ModelManager: voorziet alle functies nodig om een model te parsen en te linken. Bevat tevens verwijzingen naar de DatParser en de DatLinker.

• Model: brengt alle gegenereerde informatie over een model bijeen. De lijst met geparste Bricks, de lijst met BigBricks en de lijst met motoren.

Page 15: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Abstract Brick Structure (ABS)

• BigBrick: een container van Bricks die een vast geconnecteerd geheel vormen. BigBricks zijn onderling verbonden door LooseConnections.

• Brick: de basisentiteit van Brainstorm. Alle informatie over een enkele legoblok wordt erin opgeslagen.

• LooseConnection: Informatie over de losse connecties tussen 2 BigBricks.

Page 16: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Connector

LCDManager

Brick

LooseConnection

BigBrick

Model

DatParser

DatLinker

ModelManager

Animator Private: - DatLinker fDatLinker; - DatParser fDatParser; - List<Model*> fModels; - List<Brick*> fLCDBricks;

Public: - void ParseModel (string); - void ParseAndLinkModel(string, bool); - void ParseLCD(string); - void DrawModels(); - void DrawLCDBrick();

Private: - int fId; - string fName; - Vector4<float> fCenter; - Vector4<float> fDirection;

Public: - void Transformation(Matrix44<float>);

Private: - list<Brick*>* fBrickList; - list<Brick*>* fConnectorList; - list<Brick*>* get_connectors_from_db(); - Vector4<float> calculate_center

(list<Normal_line*>); - Matrix44<float> calculate_transformationmatrix

(Normal_line, Normal_line); - void PrintTable(string);

Public: - void saveConnectors(Brick* conn, string name); - void analyseBricks(list<Brick*>* brickList); - void PrintLCD();

Private: - int fId; - string fSize; - string fType; - string fFileName; - list<Brick*> fIncBricks; - list<Backface_line> fBFLines; - list<Normal_line> fNLines; - list<Triangle> fTriangles; - list<Quadrilateral> fQuads; - list<Normal_line> fSelected; - list<Connector*> fConnectors; - Matrix44<float> fTransformation; - BigBrick* fBigBrick; //OpenGL-stuff

Public: - void sortLines(); - void transformation(Matrix44<float>); - void transform_connectors(); - void initdraw(); - void draw(); - void fixColours();

Private: - Brick* fBrick1; - Brick* fBrick2; - Connector* fConnector1; - Connector* fConnector2; - int fRotationStep; - int fTranslationStep; - dJointID fJointId; - bool fMotor; - dJointID fMotorId; - Vector3<float> fPosition; - Vector3<float> fDirection;

Public: - void animation_update();

Private: - int fId; - list<Brick*> fBricks; - list<LooseConnection*> fLooseConnections; - dBodyId fBodyId; - Vector3<float> fPosition; - pair<float,Vector3<float>> fRotation;

Public: - void animation_update(); - void initdraw(); - void draw();

Private: - ModelManager fM; - dWorldID fWorld;

Public: - void init(ModelManager m); - void animate(double speed); - void reset(); - void destroy();

Private: - map<string, Brick> fDatMap; - Brick* parse_brick(string, float); - float fProgress; - void print_map();

Public: - void parse(Model*);

Private: - Database fDatabase; - void colour_bigBricks(); - void print_bigBricks(list<BigBrick*>*);

Public: - void link(Model*);

Private: - string fName; - list<Brick*> fParsedModel; - list<BigBrick*> fLinkedModel; - list<Brick*> fMotorBases;

Public: - void colour_linkedModel(); - void initdraw(); - void draw();

Page 17: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Animator (1)

• Animatie van de modellen met behulp van Open Dynamics Engine. Redenen:– De structuur gelijkt erg op onze geavanceerde

brickstructuur.– Leek op het eerste gezicht duidelijk

gedocumenteerd.– Er zijn enkele mooie voorbeelden van

programma’s die ODE gebruiken.

Page 18: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Animator (2)

• We werken tijdens de animatie met relatieve coordinaten: we houden steeds de originele positie van de bricks bij en laten ODE een relatieve positie berekenen bij elke animatiestap. Dit voorkomt het exploderen van afrondingsfouten.

Page 19: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Animator - Errorcorrectie

• We passen momenteel een zeer grote errorcorrectie toe, namelijk 0,9:– Dit is nodig om alle afrondingsfouten uit ODE

te kunnen opvangen.– Dit levert momenteel nergens problemen op in

verband met opgeslokte animatiestappen.

Page 20: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Visualisatie

• OpenGL

– windowmanager: GLUT

• Optimalisaties

– gl*Pointers– Objecten met relatieve posities

Page 21: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Visualisatie (2)

• GUI

– GlUI

– nieuwe elementen + texturesupport

• Menu

• Console

• ProgressBar

• PopupBox

• ...

Page 22: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.
Page 23: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Link met animatie

• Na elke update van het de animatiemodule– van elke BigBrick de positie t en rotatie r

(quaternion) opvragen uit ODE

• Bij elke frame– glRotate(r) en glTranslate(t) voor het tekenen

van de BigBrick

– glRotate(-r) en glTranslate(-t) na het tekenen van de BigBrick

Page 24: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Link met LCDManager

• 3D picking– vraag diepte-waarde uit de buffer van OpenGL op

een bepaald punt

– onprojecteer punt naar x,y,z waarde

– controleer of het punt in een face zit

– zoja: bereken zwaartepunt van de face en selecteer de gepaste rechte

– op vraag van de gebruiker alle data doorsturen naar de LCDManager

Page 25: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Problemen - DAT

• DAT formaat bevat geen connectieinformatie => LCDManager.

• Inconsistentie bij het opgeven van vertices. • Backfacelines zijn ongeschikt voor real-

time gebruik.• Floats soms in wetenschappelijke notatie

opgegeven, soms in fixed-point notatie.

Page 26: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Problemen - LCDmanager

• Er bestaan zeer veel speciale Legoblokjes => veel moeten extra hard coden in de LCDManager.

• LCDManager is zeer rekenintesief. Duurt enkele dagen om de 96 blokjes, die momenteel ondersteund worden, op te nemen in de database.

• SQLite: ondersteunt enkele features niet waardoor query's opstellen en debuggen een tijdrovende zaak wordt.

Page 27: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Problemen - ODE

• Motoren in ODE staan in de doc's, maar blijken niet te werken op de manier zoals wij ze nodig hebben– alternatieve oplossingen bestaan, maar staan

slecht gedocumenteerd

• Doch: nog altijd beter dan alles zelf te schrijven– andere animatielibrary had misschien beter

geweest, maar dit bleek niet uit de documentatie en de voorbeelden van ODE

Page 28: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Toekomstbeeld

• LCDManager optimaliseren door opgave van de te zoeken connectoren.

• LCD uitbreiden met nieuwe blokken en connectoren.

• Gelinkte modellen op schijf opslaan.

• MLCad verbeteren aan de hand van de Ldraw Connection Database.

Page 29: BrainStorm Jaarproject 1e licentie informatica Universiteit Antwerpen 2004-2005 Promotor: Prof. dr. ir. Tom Dhaene Begeleider: Wouter Hendrickx Bram Derkinderen.

Bram Derkinderen

Gert Heiremans

Wim van Aarle

Jan Vlegels

Creators: