Model loader

From Fontys VR-Wiki
Jump to: navigation, search

Model loader small.png

Model_loader is een cave applicatie die .model files kan laden. Model files zijn bestanden die zeer grote modellen representeren. Het is een eigen formaat dat voornamelijk bedoeld is om grote modellen, zoals die gegenereerd kunnen worden met City Engine, behapbaar te maken. Met behapbaar wordt bedoeld, dat er simpele collision detection op kan worden toegepast. De modellen zijn in de orde van 1.000.000 polygonen.

Indien je 1.000.000 polygonen moet testen voor een botsing gaat dat natuurlijk niet (snel genoeg). In een .model file wordt er een index aangelegd die het mogelijk maakt, snel te achterhalen welke polygonen zich in de buurt bevinden van een bepaald object.

Model_Loader is te vinden op:

D:\Cave software\wouter\fontysvr\model_loader

De Model_Compiler is te vinden op:

D:\Cave software\wouter\fontysvr\model_compiler

Er is een boom indexering toegepast. In alle modellen die de compiler genereerd, heeft die boom de vorm van een "gelaagde" octree. Generiek gezien, levert de compiler een n-tree af (Dit zou voor toekomstig gebruik handig kunnen zijn).

Octrees [1]

De bladeren van de "bovenste" octree zijn kubussen. Iedere kubus (of blad) houd een lijst bij met polygonen. De polygonen zijn precies afgesneden zodat alles binnen de betreffende kubus valt. Ieder blad/kubus heeft zijn eigen coördinaten systeem. De origine van het blad is het centrum van de kubus. De assen van het kubus/blad coördinaten systeem komen overeen met de wereld assen. (Vertalen naar/van het systeem is dus gewoonweg een translatie.)

Typisch is een kubus 512x512x512 meter. Iedere kubus is ook weer onderverdeeld in een Octree. (Dit is de "onderste" octree.) In de praktijk is het een octree, maar het zou ook wel eens een n-tree kunnen worden. Dit heeft er mee te maken dat voor iedere node uit de tree, een bounding box wordt opgeslagen. Zo zou er een boom geconstrueerd kunnen worden nie op het ene niveau de boel in achten hakt, en op het andere niveau in vieren.

Een blad van de onderste octree houdt een referentie lijstje bij waar wordt gerefereerd naar alle polygonen die het betreffende blad doorkruisen. Deze set polygonen wordt momenteel niet exact bepaald, maar er wordt een overschatting gemaakt.

Wanneer er nu een object opgegeven wordt aan de root node van de bovenste laag, dan kan er een lijst worden opgesteld van polygonen die mogelijk met dat object in aanraking zouden kunnen komen. Voor ieder van deze polygonen, wordt getest of het daadwerkelijk botst (snijdt) met het object.

Momenteel worden de volgende twee operaties ondersteund.

  • Bol model intersectie
Geeft maximale penetratie terug.
  • Lijn model intersectie
Geeft eerste raakpunt terug.

Beiden procedures zouden nog gefinetuned kunnen worden. Zo is voor de lijn, de "inslag" normaal ook van belang.

Model Compiler

Zo te gebruiken: model_compiler model.obj

Ouput: model.model

Voor een betere beschrijving zie: Model Compiler.