simulator multisenzorial pentru navigarea în universuri virtuale, bazat pe tehnologiile...

Post on 15-Jan-2016

236 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Simulator multisenzorial pentru navigarea în universuri virtuale, bazat pe

tehnologiile Realităţii Virtuale

Programul CEEX, Modul I, 2006INFOSOC, Contract 130/2006

ARIA TEMATICĂ

ACRONIM: Sim-Space

TITLUL PROIECTULUISimulator multisenzorial pentru navigarea în universuri virtuale, bazat pe tehnologiile Realităţii Virtuale

ARIA TEMATICĂ 3. Tehnologii informaţionale şi de comunicaţii3.1. Piloni tehnologici ai ICT3.1.6. Dispozitive de simulare, vizualizare, interacţie şi medii combinate: dispozitive

PERIOADA DE DERULAREOctombrie 2006 - August 2008

CONSORŢIU

Proiectul este implementat de un consorţiu constituit din universităţi, institute naţionale de CDI şi firmeprivate, aflate în regiuni geografice diferite:

SSIB SA Suceava (conducător de proiect)Universitatea „Ştefan cel Mare” SuceavaUniversitatea Tehnică „Gh. Asachi” IaşiITC SA BucureştiIPA SA BucureştiSIAT SA BucureştiData Invest Iaşi

Proiectul Sim-Space propune utilizarea tehnologiilor RV (Realitate Virtuală) pentru realizarea unui simulator multisenzorial dedicat instruirii prin experiment, sub forma imersiunii în trecutul istoric.

Se implementează un pilot demonstrativ pentru simularea unor călătorii într-o cetate medievală din Moldova, utilizând tehnologiile RV (motoare de generare interactivă, asambloare de software, generatoare de medii grafice 3D, medii active, obiecte grafice sintetice) şi echipamente specifice (cască RV, tracker, mănuşă de date, scaun cu vibraţii).

OBIECTIVE

Elementele principale în conceperea şi elaborarea unui mediu virtual sunt: • componenta grafică 3D cu ajutorul căreia se realizează vizualizarea; • modelul mediului virtual împreună cu toate elementele care-l populează; • motor de control al deplasării entităţilor componente; • feedback în timp real din partea ambelor părţi participante în cadrul interacţiunii

om-calculator; • motor de simulare/control al comportamentului entităţilor sintetice şi fenomenelor

naturale desfăşurate în mediul curent

DESCRIERE

Componentele şi funcţiile principale ale unui sistem de RV sunt:• procese de intrare - controlează dispozitivele utilizate în introducerea

datelor: tastatură, mouse, trackball, joystick, trackeri de poziţie 3D & 6D (mănuşă, head tracker, costum, etc).

• procese de simulare - recunoaşte entităţile componente mediului şi intrările

care acţionează asupra lor; tratează interacţiunile, acţiunile scriptice ale obiectelor, simulările legilor fizice, reale sau imaginare, şi determină starea mediului.

• procese de randare (redare) - procesele de randare ale unei aplicaţii de RV sunt cele care creează senzaţiile cele mai intense utilizatorului.

DESCRIERE

Pentru realizarea functiunilor proiectului Simulator multisenzorial pentru navigarea în universuri virtuale, bazat pe tehnologiile Realităţii Virtuale (Sim-Space) s-a optat pentru următoarele soluţii de modelare, dezvoltare şi redare:

1. Software de modelare pentru obiecte şi scene 3D: Autodesk 3D Studio Max (datorită capacităţilor sale de modelare a obiectelor şi simulare a interacţiunii fizice între obiecte în interiorul scenei, dar şi datorită multitudinii de formate pe care le suportă, compatibilitatea între mediul de modelare şi cel de asamblare).

2. Plug-in pentru compatibilitate între mediul de modelare şi mediile de asamblare a obiectelor şi motorul de redare 3D: oFusion (permite exportul obiectelor create în 3D Studio Max către Ogre 3D în cele mai bune condiţii).

3. Pentru asamblarea obiectelor 3D: s-a optat pentru două soluţii: Blender şi Irrlicht (cele două soluţii lucrează foarte bine atât cu 3D Studio Max, cât şi cu motorul de redare Ogre 3D). Blender este un set integrat de instrumente care permit crearea unei game vaste de conţinut 3D. Irrlicht oferă posibilitatea proiectării bidimensionale pentru crearea interfeţelor utilizator şi este format dintr-un ansamblu de funcţii şi biblioteci scrise în C++.

4. Pentru motorul de redare 3D: Ogre 3D (Object-Oriented Graphics Rendering Engine - Motor de Redare Grafică Orientat pe Obiect). Ogre 3D este un motor de redare 3D orientat spre scenă şi foarte flexibil.

DESCRIERE

DESCRIERE

Echipa de implementare a proiectului Sim-Space a realizat modelul experimental al pilotului demonstrativ, sub forma unui sistem integrat hardware&software, pentru simularea unor călătorii în cetatea virtuală medievală: Cetatea de Scaun medievală de la Suceava. Sistemul proiectat se adresează percepţiei subiectului, oferă acestuia accesul la o lume imaginară, sintetică, guvernată de legi şi reguli implementate prin algoritmii, modulele şi rutinele proiectului.

S-au integrat în sistem fluxurile, interfeţele şi algoritmii conceptualizaţi în cadrul Etapei 2. Au fost elaborate tehnic şi conceptual funcţionalităţile care să asigure simularea unei călătorii virtuale în Cetatea medievală de la Suceava, configurată în timp în perioada domniei lui Ştefan cel Mare.

Utilizarea tehnologiei GIS pentru reconstrucţia virtuală

Au fost realizate două aplicaţii GIS bazate pe platforma NetSET proprie partenerului DATA Invest Iaşi, una referitoare la planul bidimensional al Cetăţii de Scaun a Sucevei conform unei schiţe arheologice realizate de arhitectul Romstorfer şi cea de-a a doua referitoare la relieful din zona înconjurătoare cetăţii, de asemenea în conformitate cu o schiţă a aceluiaşi arhitect austriac.

Modelele 2D şi 3D obţinute pot fi utilizate pentru calibrarea dimensională a variantei de cetate reconstituită în spaţiul realităţii virtuale. Modelul 3D poate fi deocamdată exportat doar în format DXF.

Utilizarea tehnologiei GIS pentru reconstrucţia virtuală

Utilizarea tehnologiei GIS pentru reconstrucţia virtuală

Clasa Aplicaţie

Clasa aplicaţie constituie punctul de pornire al oricărui proiect OGRE 3DOGRE 3D. Trebuie să conţină un constructor şi un destructor care vor iniţializa, respectiv distruge cei doi membri esenţiali ai aplicaţiei, membrii RootRoot – punctul de pornire al unei aplicaţii şi FrameListenerFrameListener - elementul de interfaţare utilizat pentru a recepţiona evenimentele ce apar la fiecare cadru: modificarea poziţiei sau orientării camerei, evenimente declanşate de maus sau tastatură etc. Toate elementele iniţializate prin constructor trebuie tratate la apelarea destructorului pentru a elibera spaţiul de memorie ocupat de acestea.

Alături de RootRoot şi FrameListenerFrameListener, membrii de bază ai unei clase aplicaţie sunt CameraCamera, SceneMangerSceneManger şi WindowWindow.

Membrul RootRoot constituie punctul de plecare al oricărei aplicaţii client şi prin intermediul său o aplicaţie primeşte acces către fundamentele sistemului, şi anume: sistemul de redare disponibil, managementul configuraţiilor salvate, fişiere de tip jurnal (logging) şi să acceseze alte clase ale sistemului. Funcţionează ca o „centrală” prin care toate celelalte obiecte pot fi apelate. O instanţă de RootRoot trebuie creată înainte ca orice altă operaţie OGRE să fie apelată. Este o clasă de faţadă şi oferă un punct convenabil de acces către toate subsistemele unei aplicaţii OGRE. Membrii clasei FrameListenerFrameListener, sunt singura modalitate prin care se poate apela propriul cod în timpul buclei de redare a OGRE atunci când este folosit un mod de redare continuă, cum ar fi de exemplu metoda startRendering().

Membrii Clasei Aplicaţie

Pentru a putea vizualiza conţinutul unei scene este esenţial să dispunem o cameră. CameraCamera constituie punctul de vedere din care scena va fi redată. Camerele OGRE suportă atât proiecţia de tip perspectivă (obiectele devin din ce în ce mai mici pe măsură ce camera se îndepărtează de ele; este implicită), cât şi cea de tip ortografică (stilul schiţă, blueprint, mărimea rămâne aceeaşi indiferent de distanţă). Camerele au diferite moduri de redare (de exemplu texturat, wireframe), câmp de vedere, distanţe de redare etc., permiţându-ne vederi complexe multi-fereastră, dacă acest lucru este dorit, permiţând şi împărţirea ecranului sau vederi de tip Picture-in-Picture (imagine în imagine). Camerele menţin propriile puncte de vedere, rata aspectelor şi sisteme de coordonate într-un spaţiu măsurat între -1 şi 1 pentru coordonatele x şi y şi 0 şi 1 pentru coordonata z. În timpul redării, camera va reda către un punct de vedere care va translata aceste coordonate parametrice în coordonate ecran. Este recomandat ca atât camera cât şi punctul de vedere care realizează translaţia să aibă aceeaşi rată a aspectului (de exemplu 4:3). De asemenea obiectele de tip cameră pot fi ataşate unor noduri din scenă, fapt ce se poate dovedi extrem de util pentru evitarea obiectelor dintr-un spaţiu ce comportă o geometrie.

Membrii Clasei Aplicaţie

Scenă redată în modul PM_POINTS

Scenă redată în modul PM_WIREFRAME

Scenă redată în modul PM_SOLID

Membrii Clasei AplicaţieMembrul SceneManagerSceneManager permite administrarea unei

scene, adică elemente precum obiectele şi potenţialele elemente de geometrie a scenei. Pentru a putea reda unul sau mai multe obiecte, primul dintre acestea trebuie ataşat managerului de scenă. Ulterior, celelalte obiecte pot fi ataşate fie unui alt obiect, creându-se o relaţie părinte-copil între cele două obiecte, fie direct managerului de scenă, rezultând o structură te tip arborescent în care managerul de scenă este nodul părinte. OGRE suportă managere de scenă simultane, camera decizând să afişeze scena aparţinând managerului de scenă care a instanţiat-o. Deşi majoritatea aplicaţiilor creează şi utilizează un singur manager de scenă la un anumit moment dat, utilizarea instanţelor multiple de manager de scenă se poate dovedi utilă, mai ales în momentul în care se doreşte optimizarea procesului de redare a unei scene mari şi încărcate, împărţind-o la mai multe managere de scenă, în funcţie de zonele care ar pute fi vizibile la un anumit moment dat.

Tipuri de manager de scenă

• ST_GENERICST_GENERIC

• ST_INTERIORST_INTERIOR

• ST_EXTERIOR_CLOSEST_EXTERIOR_CLOSE

• ST_EXTERIOR_FARST_EXTERIOR_FAR

• ST_EXTERIOR_REAL FARST_EXTERIOR_REAL FAR

Hărţile şi texturile necesare terenului

Harta de înălţimeHarta de înălţime Textura terenuluiTextura terenului Textura detaliatăTextura detaliată

Exemplu de fişier de configurare# Textura de bază pentru teren# Textura de bază pentru terenWorldTexture=Iarba3.jpgWorldTexture=Iarba3.jpg# Textura detaliată# Textura detaliatăDetailTexture=Iarba2.jpgDetailTexture=Iarba2.jpg# În câte subdiviziuni de textură care intră într-o subdiviziune de teren# În câte subdiviziuni de textură care intră într-o subdiviziune de terenDetailTile=3DetailTile=3# Sursa hărţii de înălţime# Sursa hărţii de înălţimePageSource=HeightmapPageSource=Heightmap# Textura hărţii de înălţime# Textura hărţii de înălţimeHeightmap.image=teren.pngHeightmap.image=teren.png# Mărimea unei pagini în puncte# Mărimea unei pagini în punctePageSize=1025PageSize=1025# Mărimea subdiviziunilor# Mărimea subdiviziunilorTileSize=65TileSize=65# Mărimea unei pagini e teren în unităţi ale lumii# Mărimea unei pagini e teren în unităţi ale lumiiPageWorldX=14000PageWorldX=14000PageWorldZ=14000PageWorldZ=14000# Înălţimea maximă a terenului # Înălţimea maximă a terenului MaxHeight=200MaxHeight=200

Scenă ce utilizează managerul de scenă de tip Teren, utilizând elementele prezentate anterior

Membrii Clasei Aplicaţie

Membrul WindowWindow este parte esenţială în procesul de redare şi va fi instanţiat la începutul acestuia. Reprezintă suportul, „pânza” pe care se realizează redarea. Este o clasă abstractă, iar relaţia instanţelor acestei clase faţă de un sistem de redare care controlează redarea unei scene este de timp mai mulţi la unul, astfel încât mai multe ferestre pot fi implicate în redarea acestuia. De asemenea într-o fereastră pot exista mai multe puncte de vedere (viewports).

Metodele Clasei Aplicaţie

Metodele de bază ale clasei aplicaţie sunt:•go()go();;•setup()setup();;•setupResources()setupResources();;•chooseSceneManager()chooseSceneManager();;•createCamera()createCamera();;•createViewports()createViewports();;•loadResources()loadResources();;•createScene()createScene();;•createFrameListener()createFrameListener()..

Metodele Clasei Aplicaţie

Crearea scenei o vom realiza prin apelarea metodei createScene()createScene(). În interiorul acesteia vom pune la punct ultimele detalii legate de scenă (lumini, ceaţă, SkyBoxSkyBox sau SkyDomeSkyDome).

// Culoarea fundalului // Culoarea fundalului mSceneMgr->setAmbientLight( ColourValue( 1, 1, 1 ) );mSceneMgr->setAmbientLight( ColourValue( 1, 1, 1 ) ); // Ceaţa// Ceaţa ColourValue fadeColour(0.95, 0.9, 0.85);ColourValue fadeColour(0.95, 0.9, 0.85); mWindow->getViewport(0)->setBackgroundColour(fadeColour);mWindow->getViewport(0)->setBackgroundColour(fadeColour);mSceneMgr->setFog(FOG_LINEAR, fadeColour, 0.0, 5000, 20000);mSceneMgr->setFog(FOG_LINEAR, fadeColour, 0.0, 5000, 20000);

// SkyDome// SkyDomemSceneMgr->setSkyDome(mSceneMgr->setSkyDome(truetrue, "Examples/CloudySky", 5, 8);, "Examples/CloudySky", 5, 8);

Metodele Clasei Aplicaţie

După ce toate aceste detalii vor fi puse la punct se vor încărca obiectele în scenă. Prezentăm un scurt exemplu de cod necesar încărcării unui obiect în scenă alături de ilustrarea procesului de redare al acestuia.

Entity *teren = mSceneMgr->createEntity( "Teren",Entity *teren = mSceneMgr->createEntity( "Teren", "Teren.mesh" );"Teren.mesh" );

SceneNode *nodteren = mSceneMgr->SceneNode *nodteren = mSceneMgr->

getRootSceneNode()-:createChildSceneNode( "Teren" );getRootSceneNode()-:createChildSceneNode( "Teren" );

nodteren->attachObject( teren );nodteren->attachObject( teren );

nodteren->scale( 50.0, 1.0, 50.0);nodteren->scale( 50.0, 1.0, 50.0);

De la modelare la asamblarea în scenă

În urma procesului de modelare cu ajutorul 3D Studio Max, obiectele vor fi salvate în fişiere de tip MAX. Pentru a putea fi încărcate în scena creată utilizând OGRE 3D, vom utiliza exporterul oFusion. Acesta va crea un fişier de tip mesh şi unul de tip material pentru fiecare mesh exportat. Utilizarea unor denumiri sugestive pentru obiectele MAX sau părţile lor componente este recomandată pentru a uşura

gestionarea obiectelor.

De la modelare la asamblarea în scenă

Fereastra exporterului oFusionFereastra exporterului oFusion

De la modelare la asamblarea în scenă

Să luăm ca exemplu zidurile cetăţii. Scena conţine nu mai puţin de 314 mesh-uri. Pe lângă numărul mare de linii de cod şi gestiunea foarte dificilă a obiectelor încărcate, apare o problemă şi mai mare: poziţionarea acestora în scenă. În plus, trebuie să ţinem cont că aceste obiecte constituie doar o parte a scenei şi multe alte mesh-uri vor trebui încărcate.

Pentru a evita astfel de probleme legate încărcarea unui număr mare de mesh-uri, lucru care ar necesita scrierea de cod suplimentar şi o gestionare foarte riguroasă a tuturor obiectelor sau de poziţionarea şi orientarea în scenă a acestora, vom ataşa (Edit mesh –> Edit Geometry –> Attach) toate mesh-urile obiectelor imobile ale scenei la un plan orizontal.

De la modelare la asamblarea în scenă

Scena Scena Zidurile Cetăţii Zidurile Cetăţii – 314 mesh-uri– 314 mesh-uri

De la modelare la asamblarea în scenă

Scena Scena Zidurile Cetăţii Zidurile Cetăţii – după ataşare– după ataşare

De la modelare la asamblarea în scenă

Planul trebuie desenat într-o poziţie inferioară pe axa y celui mai de jos obiect ce va fi redat în scenă. De asemenea la poziţionarea pe axa y va trebui să ţinem cont de terenul ce va fi redat, astfel încât suprafaţa planului şi cea a terenului să nu se intersecteze şi în urma procesului de redare planul adiţional să apară în scenă. Astfel toate obiectele modelate individual vor se vor regăsi în aceeaşi poziţie relativă faţă de plan ca şi în faza de modelare, operaţiile de scalare, rotire sau mutare afectând întregul ansamblu ca pe un singur obiect. Ele vor constitui un tot unitar, aceste operaţii fiind aplicate tuturor obiectelor conţinute în mesh-ul comun.

De la modelare la asamblarea în scenăPentru obiectele ce conţin texturi de reliefare (bump) vom

avea nevoie de o linie suplimentară, introdusă manual, întrucât oFusion CE nu „exportă” (copie) decât fişierul imagine ce va reprezenta harta de reliefare, fără a o asocia în fişierul material: colour_op replacecolour_op replace. În plus, pentru reliefare se pot utiliza mai multe texturi, având însă grijă ca ultima textură definită în cadrul respectivului material să fie textura de suprafaţă. În cazul în care dorim să utilizăm o textură pe subdiviziuni ale unei suprafeţe (tiling), putem utiliza instrucţiunea scale, parametrii fiind 1/n şi 1/m, unde n reprezintă numărul de subdiviziuni pe axa x, iar m numărul de

subdiviziuni pe axa y. În cazul în care fişierul resources.cfg nu este modificat, fişierele obţinute în urma exportului cu oFusion vor trebui copiate după cum urmează: fişierele mesh în directorul OgreSDK\OgreSDK\media\modelsmedia\models, fişierele material în directorul OgreSDK\media\OgreSDK\media\materialsmaterials\\scriptsscripts, iar fişierele pentru texturare în directorul OgreSDK\media\materialsOgreSDK\media\materials\\texturestextures.

De la modelare la asamblarea în scenăBootstrap]Bootstrap]Zip=../../media/packs/OgreCore.zipZip=../../media/packs/OgreCore.zip[General][General]FileSystem=../../mediaFileSystem=../../mediaFileSystem=../../media/fontsFileSystem=../../media/fontsFileSystem=../../media/materials/programsFileSystem=../../media/materials/programsFileSystem=../../media/materials/scriptsFileSystem=../../media/materials/scriptsFileSystem=../../media/materials/texturesFileSystem=../../media/materials/texturesFileSystem=../../media/modelsFileSystem=../../media/modelsFileSystem=../../media/overlaysFileSystem=../../media/overlaysFileSystem=../../media/particleFileSystem=../../media/particleFileSystem=../../media/guiFileSystem=../../media/guiFileSystem=../../media/DeferredShadingMediaFileSystem=../../media/DeferredShadingMediaZip=../../media/packs/cubemap.zipZip=../../media/packs/cubemap.zipZip=../../media/packs/cubemapsJS.zipZip=../../media/packs/cubemapsJS.zipZip=../../media/packs/dragon.zipZip=../../media/packs/dragon.zipZip=../../media/packs/fresneldemo.zipZip=../../media/packs/fresneldemo.zipZip=../../media/packs/ogretestmap.zipZip=../../media/packs/ogretestmap.zipZip=../../media/packs/skybox.zipZip=../../media/packs/skybox.zip

CONTACT

S.C. Software şi Sisteme Informatice Bucovina S.A.

Suceava, Str. Nicolae Bălcescu, Nr. 1, CP:720066

Telefon/Fax: +40 230 523810

E-mail: office@ssi-bucovina.ro

Web: http://www.ssi-bucovina.ro/simspace_ro.html

top related