Contributii la Dezvoltarea Plaformei 3d Upb Replica Virtuala Masiv Multiutilizator In Timp Real a Universitatii Politehnica din Bucuresti
1 Introducere
1.1 Scopul aplicației
1.2 Considerații generale
1.3 Funcțiile proiectului 3D UPB
1.4 Contextul dezvoltării aplicației
1.5 Tehnologii folosite
2 Concepte si tehnologii folosite
2.1 Realitatea virtuala
2.2 Metavers
2.3 Modelare 3D
2.4 Realitatea mixată
2.5 Baza de date
2.6 MMO
2.7 Arhitectura RESTful
2.8 Second Life
2.9 Autodesk Maya
2.10 GIMP 2
2.11 WAMP
2.12 PhpMyAdmin
2.13 OpenSim
3 Prezentarea aplicației
3.1 Arhitectura platformei 3D UPB
3.1.1 Serverul OpenSimulator
3.2 Modelarea clădirilor
3.2.1 Introducere Autodesk Maya
3.2.2 Crearea si editarea unui obiect
3.2.3 Exportarea si importarea
3.2.4 Texturare
3.3 Navigarea lumii virtuale
3.3.1 Modulul pathfiniding
3.3.2 Baza de date
3.3.3 Pagina Web
3.3.4 Introducere Pagina Web in OpenSim
3.3.5 Web API
4 Posibilitati de dezvoltare
5 Concluzii
6 Bibliografie
Secolul XXI se remarcă prin implicarea tehnologiei în cotidian prin crearea unui mediu virtual în care individul are acces la informația necesară aproape instantaneu și comunică în cadrul unor rețele de socializare care îi permit să facă schimb de informații fără a se deplasa fizic, beneficii concretizate prin eficientizarea timpului și obținerea unor rezultate complexe modelate cât mai realist.
Pornind de la această observație, proiectul 3D UPB reprezintă o soluție de construire a unui spațiu virtual ȋn interiorul căruia un utilizator poate avea cu ușurință acces virtual la procesul de ȋnvățămȃnt și cel social din campus.
Platforma 3D UPB ȋi oferă posibilitatea oricărui utilizator care are un cont, un client și conexiune la internet să facă cunoștință cu lumea virtuală imersivă a campusului Universității Politehnica București pe care acesta, ca avatar, o poate explora și manipula.
Mediul virtual al campusului Politehnicii are multiple funcții axate pe socializare, ȋnvațare, informare și navigare. Astfel, un utilizator poate participa la un curs predat de un profesor, direct din lumea virtuală prin intermediul streaming-ului de informație video, poate naviga cu ușurință spatiul virtual, prin intermediul unui sistem de navigație, poate fi localizat cu usurință, prin poziționarea cu ajutorul GPS-ului direct in lumea virtuala, și poate comunica atȃt cu alți utilizatori, cȃt și cu studenții reali, prin intermediul unui sistem de comunicare ușor și eficient.
Contribuțiile pe care aplicația prezentată ȋn această lucrare, le aduce proiectului 3D UPB sunt: crearea unui spațiu virtual imersiv, realizarea unui sistem de navigație care să ghideze utilizatorul prin interiorul lumii virtuale, crearea unei interfețe cu utilizatorul prin intermediul unei pagini web, implementarea unei baze de date complete și corecte, ce stochează toate informațiile legate de orarele grupelor și sălilor, precum și realizarea unui mijloc de comunicare ȋntre sistemul de navigație și interfața cu utilizatorul, prin intermediul unui Web API.
Introducere
Scopul aplicației
Conceptul de metavers nu este unul foarte nou, dar este unul de actualitate în ceea ce privește industria jocurilor sau cea educaționala. Acesta presupune convergența unei realități fizice exprimate virtual cu cea a unui spațiu virtual persistent, ce include suma tuturor lumilor virtuale, a realității augmentate și a internetului. Prin realizarea unui metavers i se oferă utilizatorului posibilitatea de a interacționa cu alții într-un mediu familiar acestuia.
Cu toate că implementarea de metavers-uri nu este atât de des întâlnita la ora actuală, ea are o mare utilitate în industria jocurilor, dar mai ales al procesului de învățare. Implementarea unui metavers pe plan educațional poate schimba nu doar ceea ce se învață, dar și modul în care se poate învăța. Lumea virtuală poate găzdui un sistem foarte eficient de învățare, având posibilitatea de a atinge toate domeniile și disciplinele. Diferența dintre cursurile online, care sunt utilizate de foarte mulți studenți dornici să învețe noi discipline, și un metavers este aceea că, pe lângă posibilitatea de învățare, lumea virtuală a metaversului oferă studentului posibilitatea de a interacționa în timp real, atât cu profesorii cât și cu studenții, realizându-se o comunicare similară cu cea din lumea reală. Acest lucru îi oferă studentului o implicare mult mai mare decât într-un curs online, unde comunicarea are mult de suferit din cauza distanței. Pe lângă o mai bună comunicare, un metavers îi oferă posibilitatea profesorului de a crea o diversitate mult mai mare de predare decât cea clasică a unui curs. Profesorul poate implica studentul prin lucru în echipă sau chiar jocuri relevante cursului predat. Astfel se creează o experiența de învățare captivantă, autentică și bogată în materiale și activități media.
După cum am menționat anterior, un metavers este o reprezentare a unei realități fizice exprimate virtual, astfel că, pe lângă utilizatorii care se regăsesc exclusiv virtual, există și cursanții care sunt fizic în spațiul exprimat 3D. Cursanților li se pot adăuga avatare în mediul virtual ce țin cont de poziționarea lor reală. Acest lucru permite utilizatorilor virtuali (avatare) atât participarea la un curs ținut în timp real de un profesor, cât și interacțiunea cu studenții aflați în sălile de clasă.
Pe lângă avantajele utilizatorilor virtuali și cei aflați în afara metavers-ului (cei din mediul real) pot beneficia de pe urma acestuia. O implementare în metavers, utilă pentru studenții din afara acestuia, este aceea de navigare, aceștia putând afla drumul ideal către un laborator, o sală de clasă sau chiar o facultate, prin sisteme menite să ghideze utilizatorul în mediul virtual. De asemenea un student poate avea oricând la îndemâna atât orarul grupei din care face parte, cât și orarul sălii la care intenționează să ajungă, micșorând astfel timpul necesar obținerii de informații.
Prin urmare scopul proiectului „3D UPB” este acela de a crea o replică virtuală masiv multiutilizator a campusului Universității Politehnica București, ce se dorește a integra potențialul educațional și social al metaversului. În caz particular, scopul acestei aplicații este acela de a crea un mediu virtual cât mai fidel reprezentării reale, de ajutare a navigării în interiorul acestui spațiu creat, precum și acela al facilitării accesului la informațiile necesare unui student.
Considerații generale
Aplicația ce este prezentată în această lucrare își propune crearea unei replici virtuale a clădirilor și a campusului Universității Politehnica București, integrând în aceasta, sisteme de navigație și de informare. Aplicația implementează o platformă 3D MMO Open Source care permite accesul public și ajută la integrarea informațiilor și sistemului de navigație în timp real.
Pentru a se putea utiliza această aplicație, utilizatorul are nevoie de un calculator cu conexiune la internet și un client propriu. Aceasta rulează pe majoritatea sistemelor de operare folosite la ora actuală, dintre care menționez Windows, Mac și Linux. Clientul pe care va rula aplicația trebuie descărcat și instalat. Pentru utilizarea acesteia este necesară crearea unui cont de utilizator. Întrucât majoritatea operațiilor sunt ținute pe server, utilizatorul nu trebuie să dispună de un calculator performant pentru a rula aplicația. Clientul instalat are ca funcții afișarea interfeței și interacțiunea cu utilizatorul.
Punctele cheie pentru care s-a ales implementarea platformei 3D MMO în aplicație sunt:
Portabilitate – poate fi accesată de pe orice calculator ce dispune de o conexiune la internet și permisiunea de a descărca și instala clientul;
Simplitate – interfața cu utilizatorul (user interface) intuitivă, ce oferă acestuia o gamă variată de facilitați;
Interacțiune – utilizatorii pot interacționa cu mediul 3D, pot crea și manipula diferite obiecte;
Socializare – utilizatorii pot interacționa între ei prin diferite funcții de socializare (chat, friend list).
Funcțiile proiectului 3D UPB
Proiectul a fost creat să îi ofere utilizatorului atât funcții specifice sistemelor MMO, cât funcții specifice sistemelor educaționale și de informare. Ca urmare a acestui lucru acesta permite:
Crearea de spații virtuale, de dimensiuni diferite și cu număr variabil de regiuni;
Localizarea și urmărirea avatarului;
Personalizarea funcțiilor virtuale prin scripturi;
Legarea la pagini web;
Generarea de drum ajutător (pathfindig);
Funcții de socializare;
Manipulare obiecte și modificare;
Simulare fizică și coliziuni;
Răspuns în timp real;
Accesare simultană a spațiului virtual de mai mulți utilizatori;
Protocoale diferite pentru fiecare utilizator;
Streaming direct;
Personalizarea avtarului și inventarului.
Contextul dezvoltării aplicației
Aplicația a fost dezvoltată ca parte din proiectul „3D UPB” ce reprezintă o replică virtuală masiv multiutilizator în timp real a Universității Politehnica București.
Proiectul reprezintă un concept nou de virtualizare a unui campus universitar în care se asigură atât un suport pentru procesul de învățare, cât și unul de localizare și de informare atât pentru utilizatori, cât și pentru studenții fizici.
Caracteristicile ce definesc proiectul 3D UPB sunt:
Crearea unui model 3D complet al campusului facultății în care se vor reprezenta toate clădirile, modelate cu precizie într-un software de modelare 3D;
Integrarea unei platforme MMO care să susțină un număr mare de utilizatori (de ordinul miilor) prin intermediul căreia pot accesa simultan spațiul virtual și pot interacționa cu acesta;
Proiectarea și administrarea unui server ce se ocupă cu păstrarea informațiilor legate de spațiul virtual, executarea operațiilor fizice și de coliziune, spawn-ing de utilizatori precum și API-uri care să asigure legătura între diversele aplicații (pagini web, aplicații android) și platforma MMO;
Crearea unui sistem de ghidare în mediul virtual, care ajută utilizatorul să găsească o destinație aleasă pe căi optime;
Implementarea unei baze de date în care sunt stocate informații legate de sălile de curs și de laborator, precum și informații legate de orarul fiecărei grupe;
Crearea unei pagini web care să acționeze că interfața grafică cu utilizatorul în spațiul virtual pentru informarea acestuia în legătura cu: orarul pe grupe, pe săli și cu găsirea drumului ideal către o sală aleasă;
Proiectarea unei aplicații Android care să se ocupe cu prelevarea de informații relevante Facultății de Automatică și Calculatoare (prin RSS feed), de un sistem de prezența (prin scanarea unui cod QR), de virtualizarea (trecerea în spațiul virtual) al studenților prezenți la un curs său laborator, de transmitere sau recepționare de stream de la un alt utilizator al aplicației și de gestionare al unui sistem de prieteni;
Monitorizarea traficului din interiorul campusului și generarea acestuia în spațiul virtual prin intermediul unei aplicații de tracking, cu ajutorul GPS-ului;
Simularea în interiorul spațiului virtual a condițiilor meteo din București, aceleași pentru toți utilizatorii aplicației;
Integrarea în spațiul virtual a evenimentelor ce au loc în campusul facultății la un moment dat prin indicații vizuale;
Proiectul „3D UPB” a apărut pentru prima dată ca prototip în 2009 și a fost de atunci continuu dezvoltat, ajungându-se la un stadiu beta, ce urmează a fi dat în folosința publicului din cadrul facultății.
După cum am menționat anterior, aplicația dezvoltată în această lucrare este parte a proiectului 3D UPB și are ca funcționalități crearea modelelor 3D (clădiri), integrarea acestora în platformă MMO (hartă campus, clădiri), generarea unei baze de date pentru o centralizare a orarelor, atât a grupelor, cât și a sălilor de curs sau de laborator, crearea unui modul de pathfinding pentru vă facilita localizarea sălilor în cadrul campusului, integrarea acestora într-o interfața grafică cu utilizatorul și acționarea acestora prin intermediul API-urilor.
Tehnologii folosite
O lume virtuală reprezintă un spațiu simulat cu a au loc în campusul facultății la un moment dat prin indicații vizuale;
Proiectul „3D UPB” a apărut pentru prima dată ca prototip în 2009 și a fost de atunci continuu dezvoltat, ajungându-se la un stadiu beta, ce urmează a fi dat în folosința publicului din cadrul facultății.
După cum am menționat anterior, aplicația dezvoltată în această lucrare este parte a proiectului 3D UPB și are ca funcționalități crearea modelelor 3D (clădiri), integrarea acestora în platformă MMO (hartă campus, clădiri), generarea unei baze de date pentru o centralizare a orarelor, atât a grupelor, cât și a sălilor de curs sau de laborator, crearea unui modul de pathfinding pentru vă facilita localizarea sălilor în cadrul campusului, integrarea acestora într-o interfața grafică cu utilizatorul și acționarea acestora prin intermediul API-urilor.
Tehnologii folosite
O lume virtuală reprezintă un spațiu simulat cu ajutorul computerului. Pentru ca această să fie cât mai apropiată de lumea reală, aceasta trebuie să respecte o multitudine de legi, ce sunt integrate prin intermediul numeroaselor tehnologii din care se compune. Astfel este nevoie de o îmbinare a mai multor domenii, instrumente și programe.
Integrarea platformei 3D MMO s-a realizat cu ajutorul Framework-ului OpenSimulator, iar conectarea la aceasta s-a realizat cu ajutorul clientului Second Life, Firestorm.
Pentru crearea obiectelor de mare precizie s-au folosit sisteme specializate de modelare 3D (Autodesk Maya și 3ds Max), pentru exportarea modelelor s-a utilizat un convertor într-un format de fișiere pentru aplicații 3D interactive numit COLLADA. Pentru texturarea modelelor s-au utilizat programe precum Adobe Photoshop și Gimp 2.
Crearea obiectelor simpliste s-a executat prin intermediul uneltelor clientului Firestorm, iar generarea terenului campusului s-a realizat printr-un program specializat numit L3DT.
Pentru crearea modului de navigație s-au folosit programe numeroase programe specializate. Pentru realizarea si ȋntreținerea bazei de date s-a folosit programe precum MySQL, phpMyAdmin. Pentru realizarea paginii web s-au folosit programe de scriere precum Sublime Text 2 si Notepad ++. Pentru relizarea serverului care să suporte atȃt baza de date cat și pagina web s-a folosit WAMP, pachet ce conține atȃt un server Apache configurat pentru Windows, cȃt și programe precum MySQL, și limbaje ca PHP și Pithon. Template-ul paginii web a fost creat folosind limbaje precum CSS si Java Script.
Concepte si tehnologii folosite
Realitatea virtuala
Realitatea virtuală reprezintă un mediu 3D generat cu ajutorul computerului, ce poate să simuleze prezența fizică în locuri din lumea reală [1]. Realitatea virtuală este capabilă să recreeze senzații vizuale, sonore, tactile, gustative și olfactive. Majoritatea mediilor virtuale se axează pe stimularea senzațiilor vizuale, ce sunt afișate fie prin intermediul unui ecran sau prin alte dispozitive, de obicei ecrane stereoscopice. Termenul de „realitate virtuală” este un termen compus din cuvântul „realitate”, care descrie totalitatea elementelor ce sunt observate de către o persoană prin intermediul simțurilor și din cuvântul „virtual” care reprezintă un mediu creat cu ajutorul calculatorului, modelat să imite realitatea percepută de om[2].
Fiind modelată după realitatea fizică, cea virtuală împarte multe dinte caracteristicile acesteia. Astfel, realitatea virtuală este dinamică, în permanentă interacțiune cu utilizatorul în interiorul unui spațiu 3D. Precum în realitate, utilizatorul poate interacționa direct cu obiectele ce alcătuiesc spațiul virtual pentru a crea senzația de imersiune pentru utilizator, asigurându-se astfel realismul[3].
Campusul creat pe platforma 3D OpenSim este si el un exemplu de lume virtuală deoarece este un mediu generat cu ajutorul computerului creat sa simuleze campusul Universității Politehnica București.
Metavers
Metaversul reprezintă un spațiu virtual împărțit colectiv, creat prin virtualizarea obiectelor fizice reale în interiorul unui spațiu virtual care este modelat să respecte canoanele fizice reale, ce include lumile virtuale, realități augmentate și internet. Cuvântul metavers este un portmantou și e format din prefixul grecesc „meta” (dincolo, peste) și cuvântul „univers”[4].
Termenul apare pentru prima dată în romanul SF al lui Neal Stephenson „Snow Crash”[5]. Acesta îl descrie ca fiind un succesor al internetului reprezentat într-un spațiu virtual.
Pentru a putea înțelege ce reprezintă mai exact un metavers se va executa o comparație cu lumea virtuală.
Lume virtuală reprezintă o simulare a unui spațiu tridimensional real, în care se permite interacțiunea între utilizatori, denumiți avatare. Caracteristicile principale ale lumilor virtuale sunt simplitatea utilizării, lejeritatea comunicării și colaborării și, datorită caracteristicilor 3D, o utilizare nouă și captivantă, ce face că utilizarea acestora în scopuri educaționale să fie ceva de dorit.
Pe de altă parte, un metavers reprezintă un concept mult mai complex. Descris de către Stephenson în 1992 ca o lume virtuală 3D imersivă, în care sunt incluse aspecte fizice (obiecte, actori, rețele) care interacționează cu mediile virtuale.
Conform descrierii lui Stephenson asupra metaversului, si proiectul 3D UPB este un exemplu de metavers întrucât acesta prezintă o lume virtuală a campusului Politehncii, ȋn care se regăsesc aspecte fizice precum studenți, săli sau clădiri ce pot sa interacționeze cu mediile virtuale.
Fig. 1. Reprezentare Metavers
Modelare 3D
Modelarea 3D este procesul de creare a unei reprezentări 3D a oricărei suprafețe sau tip de obiect prin manipularea de poligoane, margini și vertex într-un spațiu 3D simulat. Modelarea 3D poate fi făcută manual prin intermediul unor software-uri specializate care permit artistului să creeze și să deformeze suprafețe poligonale sau prin scanarea obiectelor reale într-un set de date ce pot fi folosite pentru a reprezenta un obiect digital [6].
Utilitatea modelării 3D este una variată, ea fiind folosită în mai multe arii de activitate precum inginerie, film, efecte vizuale, dezvoltare de jocuri sau publicitate comercială.
Rezultatele modelării 3D sunt modelele 3D. Un model 3D reprezintă un obiect 3D ce folosește o colecție de puncte din spațiul 3D, conectate prin diverse entități geometrice precum triunghiuri, linii, suprafețe curbe. Fiind o colecție de date, modelele 3D se pot obține de mână, algoritmic sau scanate [7].
Modelele 3D se împart în 2 mari categorii:
Solide – modele ce definesc volumul obiectului pe care îl reprezintă. Sunt mai realiste, dar mai dificil de creat. De asemenea sunt folosite în mod uzual pentru simulări non vizuale precum cele din medicină sau din inginerie.
Goale (Shell) – modele ce reprezintă suprafața, dar nu și volumul, mai ușor de făcut decât cele solide folosite în industria jocurilor și a filmelor.
Realitatea mixată
Realitatea mixată (realitate hibridă) se referă la fuziunea dintre lumile reale și cele virtuale cu scopul de a produce noi medii și vizualizări ȋn care obiectele fizice și cele digitale co-exista și interacționează în timp real [8]. Aceasta este un amestec de realitate, realitate augmentată, virtualitate augmentată și realitate virtuală.
În 1994 Paul Milgram și Fumio Kishino defineau realitatea mixată ca regăsindu-se „oriunde între extremele continuumului virtual” [9], unde continuumul virtual se ȋntinde de la complexitatea reală (lumea reală) până la complexitatea virtuală (lumea virtuală), avȃnd realitatea augmentată și virtualizarea augmentată între ele.
Fig. 2. Reprezentare realitate mixată
Aplicația prezentată este și ea un tip de realitate mixată, intrucȃt reprezintă o fuziune între lumea reală a campusului Politehnicii și lumea virtuală a acestuia.
Baza de date
O bază de date este o colecție persistentă de informații structurate, organizată și construită pentru facilitarea accesului și prelucrării eficiente. Un mediu de baze de date este constituit din totalitatea programelor ce permit definirea, manipularea, vizualizarea, stocarea și gestionarea accesului la date.
Bazele de date sunt folosite pentru:
Păstrare de informații – O bază de date este un tip de sistem de fișiere care depozitează informații. Funcție de bază, înlocuiește depozitarea informațiilor în fișiere și directoare fizice, o bază de date oferă stocare digitală a informațiilor.
Furnizarea de informații la utilizatori multiplii – O bază de date permite mai multor utilizatori accesul și update-ul de informație. Astfel informația va deveni instantaneu vizibilă utilizatorilor.
Managementul securității de date – Fișierele de date stocate în interiorul unei baze de date beneficiază de un grad mai mare de securitate. Este mult mai puțin probabil ca informațiile stocate într-o baza de date să fie compromise decât cele fizice.
Acces rapid la date – Un manager de bază de date permite accesul facil la informații. Datorită faptului că informațiile sunt centralizate, utilizatorul nu are nevoie să caute informația dorită prin alte aplicații sau surse.
Obținere rapidă a informației – Datorită unor serii complexe de algoritmi algebrici ce funcționează împreuna, pentru a extrage ușor o informație, interogarea unei baze de date produce un rezultat rapid [10].
Pentru a putea managera cantitatea de date ce sunt stocate într-o bază de date se folosește un limbaj de programare structurat numit SQL. Bazat inițial pe algebra relaționala și pe calcul relațional, SQL este format dint-un limbaj de definire a datelor și unul de manipulare al acestora. În sfera de acțiune a SQL-ului sunt incluse inserarea de date, interogarea, update-ul, ștergerea, crearea și modificarea schemelor și controlul de acces la date. Este un limbaj declarativ, ce conține și elemente procedurale.
Bazele de date ocupa un rol cheie in realizarea atȃt a serverului OpenSimulator pe care functionează lumea virtuală a campusului facultății, cat si a sistemului de navigație, ce ajuta avatarul/studentul să găsească un drum optim către o destinație anume.
MMO
MMO-ul este un joc video multiplayer, capabil să susțină un număr mare de jucători simultan, în una sau mai multe lumi virtuale persistente.
Un MMO presupune existența unui vast mediu virtual, în care un număr foarte mare de utilizatori pot interacționa și socializa în timp real prin intermediul avatarelor [11].
Prin urmare un MMO, fiind un tip de joc online, are ca elemente de bază un server și mai mulți clienți. Pentru a asigura funcționarea acestuia în cazul unei probleme hardware este nevoie de o bază de date dedicată, care totodată crește scalabilitatea sistemului. Datorită numărului mare de utilizatori majoritatea MMO-urilor folosesc mai multe servere dedicate precum unul de „login”, ce permite procesarea paralelă a mai multor intrări, fără a se afecta performanța celorlalte servere; un server care să se ocupe de update-uri și de patch-uri (actualizări) și un game server ce va conține datele despre lumea virtuală și despre regulile privind această. Astfel clienții se vor conecta inițial la serverul de patch-uri pentru a se asigura că aplicațiile acestora sunt cele curente, apoi se vor conecta la server-ul de „login” unde le vor fi verificate autentificările prin intermediul bazei de date. După conectarea cu succes, clientul va chestiona Game Server-ul despre sesiunea de joc. Dacă aceasta este pornită, îi va răspunde clientului cu mesajul „încerca mai târziu" în timp ce Game Server-ul curăță sesiunea, iar dacă nu este pornită nicio sesiune, se va stabili o nouă sesiune, ce îi va transmite Game Server-ului să accepte conexiunile de la client. Abia după ce acest pas a fost realizat, se va efectua conexiunea între client și Login Server. Între timp, datele sunt sincronizate între client și Game Server, iar server-ul va avea grijă să țină permanent baza de date actualizată. Trebuie menționat că serverele expuse anterior nu sunt puse neapărat pe mașini fizice dedicate, ci pot fi implementate ca aplicații de server. În cazul în care numărul de utilizatori care accesează aplicația MMO este foarte mare, iar serverul nu ar putea rula în parametrii optimi, se vor folosi mai multe servere fizice dedicate [12].
Serverul OpenSim este un exemplu de server MMO ȋntrucȃt, permite accesul simultan a mai multor utilizatori la acesta, prin intermediul unui client Second Life (Firestorm).
Fig. 3. Exemplu arhitectura server MMO
Arhitectura RESTful
Cuvântul de REST este o abreviere pentru „Representational State Transfer” (stare de transfer reprezentațional) și este o metodă de a crea, citi, modifica sau șterge informații pe un server, folosind apelări simple HTTP. REST vine ca o alternativă la mecanisme mai complexe precum SOAP, COBRA sau RPC. Un apel REST este o cerere HTTP către server.
O definiție mai abstractă a REST este aceea de un stil software arhitectural ce este constituit dintr-un set coordonat de limitări (constraints) arhitecturale, aplicate componentelor, conectorilor și a elementelor de date, ce sunt distribuiți într-un mediu hypermedia [13].
REST ignoră detaliile componentelor implementate și a sintaxei de protocol, pentru a se putea focusa pe rolurile componentelor, pe limitările ce provin din urmă interacțiunii cu alte componente și pe interpretarea acestora asupra datelor elementelor.
Precum prezintă Richardson în „Restful Web Services” [14], ideea din spatele acestui concept este aceea de a avea o arhitectură orientată pe resurse (Resource Oriented Architecture). Această arhitectură oferă numeroase avantaje:
Adresabilitatea – o resursă trebuie să fie expusă printr-un identificator uniform de resurse (URI) ce o identifică unic;
Statelessness – concept ce reprezintă modul de creare a unei cereri HTTP făcută în deplină izolare. Astfel în momentul în care un client face o cerere HTTP, aceasta include toată informația necesară serverului pentru a procesa și a răspunde.
Folosit pentru a putea implementa si oferi servicii complexe utilizatorilor proiectului 3D UPB.
Second Life
Second Life este o lume virtuală, creată de Linden Lab și lansată pentru prima dată pe data de 23 Iunie 2003. Un număr de programe-client, denumite „Viewers în Second Life”, permit utilizatorilor de „Second Life”, denumiți „rezidenți”, să interacționeze între ei prin intermediul avatarelor. Rezidenții sunt capabili să exploreze lumea (sau rețeaua), să cunoască alți rezidenți, să socializeze, să participe la activități individuale și de grup și să creeze sau să comercializeze proprietăți virtuale și servicii între ei [15].
La o primă vedere, Second Life este asemănător unui joc de pe internet, însă privit în detaliu se observă că, de fapt, reprezintă o lume virtuală imaginată [16] și creată de rezidenții ei, o lume diversificată, în care putem întâlni utilizatori de pretutindeni din lumea reală. Second Life este o rețea socială ce face parte din fenomenul numit „Web 2.0”.
Integrată în software, Second Life constituie un instrument de modelare tridimensională bazat pe geometrii simple, ce permit rezidenților să construiască obiecte virtuale. De asemenea, mai există și un limbaj de criptare numit „Linden Scripting Language” (LSL) care poate fi utilizat cu succes pentru a crea obiecte interactive precum: primitive sculptate, mese, texturi pentru haine sau alte obiecte, animații sau gesturi pot fi create folosind software-uri externe și importate [17].
Autodesk Maya
Autodesk Maya sau Maya este un software de grafică computerizată 3D, folosit pentru a crea modele și aplicații 3D interactive, incluzând jocuri video, filme animate sau efecte vizuale [18]. Utilizatorii definesc un spațiu virtual de lucru (scenă) pentru a implementa și a edita modelele pentru un proiect. Scenele pot fi salvate sub o varietate de forme, dar varianta de bază este Maya Binary (.mb). Maya expune o arhitectură grafică bazată pe noduri- elementele din scenă sunt bazate pe noduri, fiecare nod având propriile lui atribute și customizari. Astfel, reprezentarea vizuală a unei scene este creată în totalitate pe o rețea de noduri interconectate, dependente de informația oferită de la fiecare[19].
Pe lângă componentă de lucru vizuală, Maya mai este echipată cu un limbaj de scriptare, numit „Maya Embeded Language” (MEL), creat atât pentru scriptare cât și ca mod de customizare a funcționalităților de bază ale software-ului. Multe dintre instrumentele și comenzile folosite în Maya sunt scrise în acest limbaj. Codul poate fi folosit să creeze modificări „plug-ins” sau să fie rulat la „runtime”. În afară de aceste utilizări ale limbajului, interacțiunile cu utilizatorul sunt înregistrate în MEL, permițând implementarea de „subrutine”. Astfel, toate informațiile legate de scenă pot fi scrise ca Maya Ascii (.mă), editabile în orice editor de text [20].
Autodesk Maya a fost utilizat in cadrul aplicației pentru a putea crea modelele 3D necesare reprezentării campusului Politehnicii ȋntr-un mediu virtual.
GIMP 2
Programul de manipulare al imaginilor GNU (GIMP) este un editor grafic rasterizat, folosit pentru retușarea și editarea imaginilor, desenare liberă, redimensionări, tăieri, montaje foto, conversii între diferite formate de imagine și alte sarcini [21].
GIMP este dezvoltat de voluntari ca un proiect software gratuit sub semnul „GNU Project”, proiect pornit de Universitatea Berkley din California. Development-ul este făcut public pe un depozit de cod „sursă git” („git source”). Interfața cu user-ul în GIMP este proiectată de o echipă dedicată de design, formată după ce dezvoltatorii GIMP-ului au semnat fuziunea cu proiectul „OpenUsability” [22].
Caracteristici:
Culoare – există mai multe metode de selecție a culorilor incluzând: „palete”, „color choosers” și folosirea unui „instrument de picurător” pentru a selecta culoarea de pe pânza (suprafața de desen);
Selecții – există instrumente pentru crearea selecțiilor ce includ: un „instrument de selecție circular și pătrat”, „instrument de selecție liberă” și un „instrument de selecție fuzzy” (cunoscută ca „baghetă fermecată”). Alte instrumente de selecție, mai avansate, includ: „selecția după culoare” pentru selectări de regiuni de culoare contigue și un instrument de „selecție cu foarfecă”, ce creează selecții semi-automate;
Editare imagini – există multe instrumente de editare a imaginilor în GIMP, cele mai uzuale fiind: „pensula de pictat”, „creionul”, „aerograful”, „guma de șters” și „cerneala”, folosite pentru a crea pixeli noi sau amestecați.
Straturi – o imagine creată în GIMP poate să consiste din mai multe „staturi” („layers”) poziționate într-o „grămadă” („stack”). „O metodă bună de a vizualiza o imagine GIMP este de a crea un strat de transparențe (sau straturi)”. Fiecare strat este o imagine creată din mai multe canale. Ȋntr-o imagine RGB există în mod normal 3 sau 4 canale, fiecare consistând din canale roșii, verzi și albastre; cel de-al patrulea canal fiind canalul Alpha (sau masca stratului), este responsabil cu măsurarea opacității, stabilind dacă o imagine sau o parte din imagine poate fi complet vizibilă, parțial sau invizibilă.
Automatizare, scripturi și plug-ins – există aproximativ 150 de efecte și filtre standard în GIMP, precum: „picătura” („drop”), „umbre”, „blur”, „blur de mișcare” și „zgomot”. Operațiile GIMP pot fi automatizate cu ajutorul limbajelor de scriptare. Limbajul de scriptare „Fu” este în limbaj de extensie bazat pe scheme și implementat folosind TinyScheme. GIMP mai poate fi scriptat în Perl, Python sau TCL.
GEGL – „Librăria Grafică Generică” (GEGL) a fost introdusă pentru prima dată ca parte din GIMP începând cu versiunea 2.6 a acestuia. GIMP poate folosi GEGL pentru a produce operații cu colorare „high bit-depth”. Astfel se pierde mai puțină informație în momentul efectuării operațiilor de colorare.
Formate de fișiere – GIMP suportă importarea și exportarea unui număr mare de diferite formate de fișiere, formatul nativ fiind XCF, creat să stocheze toate informațiile pe care le poate conține GIMP în legătura cu o imagine [23].
Datorită numeroaselor caracteristici, a ușurinței in utilizare și a faptului că este un program de editare de imagini Open Source gratuită, pentru editarea și generarea de texturi pentru clădiri si teren s-a preferat utilizarea Gimp 2 ȋn fața unor editoare de imagini mai cunoscute precum Photoshop.
WAMP
Acronimul WAMP se referă la primele litere ale celor patru componente ale unui solution stack, un set de subsisteme sau componente software de care este nevoie pentru a îndeplini o sarcină fără alte dependențe externe, compus în întregime din software gratis Open Source. Potrivit pentru a construi web site-uri dinamice cu valabilitate mare și cu cerința mare, capabile să servească zeci de mii de request-uri simultane [24].
Semnificația acronimului WAMP depinde de componentele specifice folosite ca parte din pachet:
Windows, sistemul de operare (nu conține doar kernel-ul ci și alte componente esențiale unui sistem de operare);
Server Apache HTTP, server web;
MySQL sau MariaDB, sistemul de management de baze de date;
PHP, Perl sau Python, limbaje de scriptare (respectiv de programare) folosite pentru crearea paginilor web dinamice și pentru dezvoltare web.
PhpMyAdmin
PhpMyAdmin este o unealtă Open Source scrisă în PHP ce se ocupă cu administrarea MySQL-ului cu ajutorul unui web browser. Aceasta poate îndeplini sarcini variate precum crearea, modificarea sau ștergerea bazelor de date, a tabelelor, a câmpurilor sau rândurilor, executarea de declarații SQL sau managementul utilizatorilor și permisiunilor[25].
Caracteristici:
Interfața Web – administratorul poate accesa baza de date prin intermediul unui web browser;
Management de bază de date MySQL – administratorul poate face modificări ale bazei de date direct din phpMyAdmin;
Import de date – În cazul unei baze de date deja create, aceasta poate fi importată în phpMyAdmin. Acesta suportă mai multe formate de bază de date precum CSV și SQL;
Export de date – poate exporta într-o gamă largă de formate precum CSV, SQL, XMP, PDF, ISO/IEC 26300 (Word, Excel, LaTeX);
Administrare de servere multiple – posibilitatea administrării mai multor servere simultan;
Crearea de tabele după layout-ul bazei de date în format PDF;
Crearea de interogări complexe folosind QBE (Query by Example);
Căutare globală în baza de date și subseturile acesteia;
Transformarea de date stocate în orice format folosind un set predefinit de funcții;
Diagrame de monitorizare a activității pe serverul de MySQL [26].
OpenSim
OpenSimulator este un server aplicație, multi-platforma și multi-user 3D Open Source. Poate fi folosit pentru a crea un mediu/lume virtuală, care poate fi accesată de către clienți pe protocoale multiple. Totodată mai are o facilitate opționala („Hipergrid”) care permite utilizatorilor să viziteze alte instalații Open Simulator via web de la instalația OpenSimulator a acestora, astfel punându-se bazele unui Metavers distribuit [27].
Caracteristici:
Suportă medii multi-user 3D online de dimensiuni variate (de la un simulator la câteva mii de simulatoare);
Suportă spații virtuale 3D de dimensiuni variabile într-o singură instanța
Suportă multiple protocoale și clienți ce accesează aceiași lume
Suportă simulări fizice în timp real prin intermediul multiplelor opțiuni de engine precum Bullet și ODE
Suportă, în timp real, clienții ce creează content 3D;
Suportă scriptare în interiorul lumii virtuale folosind limbaje de scriptare ca LSL și OSSL sau limbaj de programare precum C#;
Oferă un număr nelimitat de posibilități de customizare a aplicațiilor lumilor virtuale prin intermediul unor module plugin de scenă;
Concepte OpenSimulator:
Entitate – în OpenSim entitatea este ceva se află într-o simulare 3D. Ea este determinată prin poziția ei în lumea virtuală de: rotație, viteză, etc. și este responsabilă cu oferirea unui Proxy pentru configurația fizică ce poate fi transmis prin intermediul motor de fizică (physics engine);
Primitivă – este o entitate uzuală, are formă simplă și este generată procedurale, ce are eficiență în reprezentarea serializată. Pe lângă conceptele entității, primitiva implementează și concepte specifice protocolului LLUDP și concepte generice precum script container;
Meșă – reprezintă orice entitatea ce conține informații geometrice în loc de instrucțiuni procedurale de generare geometrică. În funcție de implementare, o meșă poate sau nu să implementeze interfețe de script container sau concepte LLUDP;
Client – orice program care se conectează la OpenSim prin intermediul unei rețele;
Agent – reprezentarea clientului care se conectează la mediul virtual prin intermediul rețelei. Tipuri de agent includ:
Utilizatorul conectat prin intermediul viewer-ului;
Motorul de căutare ce achiziționează date;
Proxy-ul care controlează mai multe conexiuni;
Motorul extern ce trimite și primește date de la simulări;
Utilizator – persoană fizică care se conectează la un server de OpenSim prin intermediul unui client;
Avatar – utilizat ca reprezentare a user-ului în lumea virtuală. Avatarul interacționează cu scenele și entitățile acestora prin generări de evenimente și utilizarea celor generate de scenă. Datorită numărului ridicat de evenimente din interiorul unei scene, avatarele sunt divizate în subseturi, implementabile de către prezența scenică;
Viewer – aplicație folosită pentru vizualizarea stării simulării;
Serviciu – sistem care furnizează date către simulator/simulatoare ca de exemplu: servicii de date media ce pun la dispoziție date pentru obiecte (texturi, scripturi), servicii de inventar care asigură organizarea inventarului pentru utilizator;
Regiune – suprafața virtuală în interiorul căreia se pot stoca toate componentele 3D ce alcătuiesc spațiul virtual. Aceasta are o poziție (x și y) în rețea („Grid”) și un identificator de regiune (denumit și „region-handle”) calculat în funcție de poziția acesteia. Aceasta mai poate fi definită ca un capăt al conexiunii cu clientul pe care o stabilește viewer-ul cu regiunea respectivă. Id-ul unei regiuni se numește „Identificator Unic Universal” (UUID), schimbarea poziției regiunii nu schimbă UUID, dar schimbă region-handle-ul, acesta fiind recalculat. Regiunea conține un număr de subcomponente precum scenă și circuitele Client/Viewer;
Scenă – subcomponenta regiunii care se ocupă cu stocarea obiectelor 3D, acestea putând fi prezențe scenice sau grupuri de obiecte. Prezența scenică poate fi reprezentată de un avatar atât timp cât acesta este de tip root. Grupurile de obiecte, din clasa SceneObjectGroups, constau dintr-un număr de parți de obiecte, reprezentate de clasa SceneObjectParts;
Sesiune – denumire a conexiunii între viewer și regiune, indiferent de timpul avatarului (principal sau secundar);
Date media – totalitatea datelor care se pot atașa unui obiect creat, acestea pot fi: texturi, animații, scripturi, sunete sau notițe și pot fi transferate celorlalți utilizatori;
Rez – acțiunea de instanțiere a unui obiect în cadrul simulării. Acesta poate fi făcut direct din primitive preexistente sau dintr-un obiect deja existent stocat în inventarul utilizatorului;
Simulator – programul care se ocupă cu administrarea regiunilor;
Prezentarea aplicației
Aplicația prezentată în acest document se ocupă cu crearea și modelarea lumii virtuale ce conține campusul Universității Politehnica București împreuna cu clădirile din interiorul acestui campus. Ea mai conține configurarea și administrarea serverului de OpenSimulator, importarea obiectelor 3D create în interiorul lumii virtuale, poziționarea acestora și aplicarea datelor media necesare fiecărui obiect în parte, crearea unui script de pathfindig. Script-ul de pathfinding se aplică pe diferite obiecte, ce au funcția de waypoint-uri, și ajută la navigarea facilă prin lumea virtuală creată. Aplicația mai conține și crearea unei baze de date în care sunt stocate informații, legate de săli și grupe, și afișarea acesteia într-o pagină web ce acționează că interfața grafică cu utilizatorul în lumea virtuală. Interfața cu utilizatorul, facilitează aflarea de informații necesare acestuia. De asemenea, aplicația mai conține și un web API care se ocupă cu intermedierea dintre pagina de web și lumea virtuală.
Arhitectura platformei 3D UPB
Arhitectura campusului 3D UPB este una foarte complexă, ȋn mare parte ea este de tip client-server, bazată pe OpenSimulator (framework pentru spații virtuale și un client ce asigură accesul utilizatorului la mediul virtual). Server-ul funcționează cu o bază de date MySQL și are atașate multiple servicii ce asigură o funcționalitate complexă a spațiului virtual. Accesarea funcțiilor se face cu ajutorul unor ustensile complementare oferite de o interfață web.
Fig. 4. Arhitectura platformei 3D UPB
Serverul OpenSimulator
OpenSimulator reprezintă componentă principală a arhitecturii sistemlui și serverul central al platformei 3D UPB, ce oferă multiple funcții și servicii care stau la baza spațiului virtual.
Serverul OpenSim este compus din una sau mai multe regiuni ce sunt rulate pe simulatoarele de regiune, la care se alătură funcționabilități și servicii de date. Arhitectura serverului este una stratificată pe componente și asigură extensibilitatea sistemului. Astfel există mai multe arhitecturi de rulare: Standalone, Grid (rețea), HyperGrid.
Un sistem ce funcționează în Standalone (un singur server) rulează atȃt simulatorul de regiune, cât și toate serviciile de date dintr-un singur proces în momentul rulării OpenSim.exe. În acest mod se pot rula mai multe regiuni, dar numai pe o singură mașina.
Un sistem ce funcționează în Grid (rețea/ multi-server) nu are serviciile de date ca parte a unei regiunile de proces ale serverului. În schimb, ele rulează pe un executabil separat numit Robust.exe. Procesul Robust fie poate rula toate serviciile sau le poate împărți în mai multe instanțe Robust. Acest lucru le permite acestora să fie rulate pe o cu totul altă mașină dacă este nevoie. Ȋn acest mod, OpenSim.exe acționează doar ca server de regiune, servind una sau mai multe regiuni care comunică cu servicii de date separate. Astfel se pot rula mai multe simulatoare de regiuni OpenSim.exe pe mai multe mașini.
Rularea în modul Grid este mai complicată decȃt rularea în modul Standalone. Aceasta necesită ȋnțelegerea de UUID-uri, de locații X și Y, de handshake de servere (permite conectarea unui server la altul), domenii, proprietari și altele. Necestia o atenție mai mare și răbdare mai multă pentru configurare.
Pentru definirea arhitecturii de rulare și a parametrilor de funcționare serverul folosește fișiere de configurare .ini.
Elementele componente ale serverului OpenSim sunt module independente ce au responsabilități specifice și bine definite.
Serverul de regiune se ocupă astfel de obiectele și script-urile din scenă, fiind un simulator de fizică de obiecte, dar are și rolul de a gestiona direct comunicarea cu clientul OpenSim.
Serviciul Grid este responsabil cu autentificarea și gestionarea regiunilor. Acesta este bidimensional, regiunea avȃnd coordonate X și Y unice și totodată oferă și un server HTTP de bază ce permite comunicarea simplă cu diferite servicii externe.
Serviciul de Utilizatori se ocupă de autentificarea și gestionarea utilizatorilor, dar și de alte funcții ce suntcentrate pe utilizator. Serviciul oferă mai multe metode de autentificate ce pot fi bazate pe: OpenID, token sau utilizator și parolă.
Serviciul de Asset (denumit și servici de Active) asigură salvarea și persistența obiectelor ce se află ȋntr-o scenă. Acesta este optimizat pentru modul WFRM (scrie puține, citește multe). Serviciul de Asset nu conține o funcție de ștergere, astfel, modificările unui asset rezultă în crearea unei noi ȋnregistrări cu parametrii modificați. Varianta veche rămȃne ȋn baza de date.
Serviciul de Inventar oferă servicii de inventar pentru utilizatori. Acesta stochează mai multe date decȃt serverul de Asset și oferă atȃt funcții de adăugare și organizare ȋn dosare, precum și funcții de actualizare, mutare sau ștergere.
Serviciul de Mesaje permite comunicarea ȋntre utilizatori prin intermediul chat-ului sau mesajelor. Acesta este responsabil și cu menținerea mesajelor offline pȃna când sunt citite.
Modelarea clădirilor
Introducere Autodesk Maya
Pentru a construi o lume virtuală imersivă este nevoie ca modelele ce alcătuiesc spațiul virtual să fie cât mai precise și mai fidele realității. Astfel, pentru a asigura că modelele clădirilor facultății sunt reprezentate întocmai realității, a fost nevoie de un software specializat de modelare 3D.
Există multiple software-uri specializate pe modelarea 3D precum: Autodesk 3ds Max, Blender, Căția, ZBrush, etc. Cu toate astea, pentru modelarea clădirilor ce intră în componența campusului Politehnicii, s-a folosit Autodesk Maya 2014.
Motivele alegerii acestui software de modelare față de cele menționate anterior sunt următoarele:
Licența gratuită oferită de Autodesk pentru orice student din cadrul unei universități recunoscute;
Este ultima versiune a acestui software, oferind pe lângă o interfața cu utilizatorul mai ușor de folosit și noi funcții;
Varianta de bază a acestui software include un program de conversie a modelelor 3D în format COLLADA;
Este unul din cele mai utilizate software-uri grafice. Beneficiază de o comunitate mare de utilizatori ce au răspuns la aproape orice întrebare pe care ar putea să o aibă un utilizator de Maya;
Oferă posibilitatea de a scripta noi funcții care să faciliteze munca utilizatorului.
Modelarea propriu-zisă începe după deschiderea software-ului, care întâmpina utilizatorul cu o scenă goală, tridimensională în interiorul căreia se regăsește un Grid bidimensional (pe z și x) ce poate fi manipulat cu ajutorul unor comenzi de translație (alt + click scroll), rotație (alt+click) și zoom (scroll sau alt+click dreapta).
Pe lângă scenă, software-ul mai conține și o interfața grafică cu utilizatorul foarte bogată în funcții și foarte bine pusă la punct. Astfel pe partea stânga a ecranului utilizatorul poate găsi Toolbox-ul care oferă numeroase funcții utilizatorului și anume:
de manipulare a obiectelor din scenă:
translație
rotație
scalare
metode de selecție :
cutie
lasou
pensulă magică
moduri predefinite de vizualizare a scenei :
perspectivă
4 vederi – sus, față, profil și perspectivă;
mod texturare – Hypershade, render și perspectivă;
mod animație – perspectivă, graf;
mod efecte – Hypershade, editor noduri și perspectivă;
mod texturare animație – perspectivă, graf și hipergraf;
mod la alegere – user-ul își alege ce ecrane vor să îi apară;
Pe partea de sus a ecranului utilizatorul poate găsi meniurile și rafturile.
Meniuri:
Animații – folosit pentru crearea și editarea de animații; conține următoarele submeniuri: Animate, Geometry Cache, Create Deformers, Edit Deformers, Skeleton, Skin, Constrain, Character;
Poligoane – folosit pentru crearea și editarea de obiecte; are următoarele submeniuri: Mesh (creare și proprietăți ale mesei), Edit Mesh (editare de meșă),Proxy, Normals (manipulare normale), Color (creare și manipulare de culori), Crate UVs (creare de UV-uri și metode de mapare), Edit Uvs;
Suprafețe – folosit pentru editarea și manipularea suprafețelor; are submeniurile: Edit Curves (definire și manipulare de suprafețe curbe), Surfaces (editări de suprafețe), Edit NURBS (editare și manipulare de B-splines raționale neuniforme);
Dinamici – folosit pentru a-i oferi unui obiect creat proprietăți fizice; are următoarele submeniuri: Fluid Effects (pentru a-i oferi obiectului manifestări fluide), Fluid nCache, Fields (adăugarea de proprietăți fizice, cum ar fi rezistență cu aerul, frecarea, turbulențe), Soft/Rigid bodies (pentru setarea gradului de rigiditate al unui obiect și editarea parametrilor de rigiditate), Effects (creează efecte speciale pentru un obiect, precum foc, fum, artificii, etc), Sovlers;
Randare – folosit pentru procesul de randare al unui obiect; are următoarele submeniuri: Lightning/Shading (creare sursă de lumină și modificare parametrii), Texturing (texturare obiect), Render (alegere mod randare și a proprietăților de randare și a programului care face randarea), Toon, Stereo, Paint Effects;
nDinamici – folosit pentru crearea și editarea proprietăților fizice pentru obiecte de mici dimensiuni (particule); are următoarele submeniuri: nParticles (se ocupă cu crearea particulelor), nHair, nMesh (proprietăți și manipulare ale mesei particulelor), nConstraint, nCache, nSolver, Fields (crearea proprietăți fizice pentru particule), Effects Assests (alegere efecte particule);
Pe lângă submeniurile unicate, există și submeniuri comune tuturor meniurilor precum:
File – opțiuni ce țin de fișier (deschidere fișier, creare fișier nou, importare/exportare, etc);
Edit – comenzi comune de editare a spațiului scenei și obiectelor;
Modify – modificări de obiecte și între obiecte;
Create – utilizat pentru crearea de diferite tipuri de obiecte;
Display – editează elementele afișate utilizatorului;
Window – deschiderea de noi ferestre specializate;
Assets – creare și modificare de însușiri obiect;
Select – alegere mod de selecție a obiectului sau a componentelor acestuia;
Muscle – creare mușchi și oase pentru un obiect animabil;
Pipeline Cache – salvare și încărcare de fișiere Alembic sau GPU;
Help – oferă ajutor utilizatorului;
Sub meniuri utilizatorul poate găsi secțiunea de rafturi, acestea reprezintă zone de lucru în care sunt poziționate iconițe ale funcțiilor cel mai des utilizate pentru o anumită categorie de lucru. Astfel există următoarele rafturi: General (manipulare spațiu și funcții de bază precum ștergerea de obiecte sau modificarea acestora), Curves (cele mai folosite funcții pentru manipularea curbelor),Surfaces, Polygons, Deformations, etc. De asemenea utilizatorul poate să își creeze propriul lui raft cu funcțiile cel mai des utilizate de acesta.
Pe partea din dreapta a ecranului utilizatorul poate observa 2 câmpuri.
Chanel Box/Attribute Editor (conține informațiile despre poziționarea în spațiul scenei a unui obiect sau component al acestuia (vertex, margine, față), numele obiectului și ce input-uri are acesta. Suplimentar Attribute Editor conține diferitele atribute ale obiectului precum modificări, tip material, luminozitatea
Layer Editor – se ocupă cu crearea și afișarea de straturi (de afișare, de animație sau de randare)
Fig. 5. Afișare pe straturi din Facultatea de Automatică si Calculatoare
Crearea si editarea unui obiect
În Autodesk Maya, etapa de creare a unui obiect este una foarte simplă. Pentru început utilizatorul trebuie să cunoască ce fel de obiect intenționează să creeze, iar apoi din meniul Create, să își aleagă tipul obiectului (primitivă, lumină, cameră). În cazul clădirilor din campusul Politehnicii s-au folosit primitivele poligonale (de obicei cub sau plan).
Procesul de transformare dintr-un obiect simplu, precum un cub, într-un obiect complex, precum un peret exterior, se numește procesul de editare al unui obiect. În Autodesk Maya unealta cea mai folosită pentru a edita un obiect este cea de „Extrude” (extrudare) și presupune alegerea unei componente a unui obiect sau chiar a obiectului în sine; unealta va face mai apoi o clonă a componenței selectate, cu aceleași coordonate spațiale, iar utilizatorului i se oferă posibilitatea translatării, rotirii sau dimensionării componentei clonate. Alte unelte importante în editarea unui obiect sunt: „Unirea de vertecsi”, „Bridge” (creează o fața între 2 margini) și „Split selected edge” (împarte o margine în 2 prin crearea unui vertex suplimentar).
În interiorul unei scene pot exista mai multe obiecte. Astfel, pentru un model 3D complex precum o clădire, se preferă crearea mai multor obiecte de dimensiuni mai mici. Motivele din spatele acestui lucru sunt:
Reducerea numărului de poligoane – un obiect complex este un obiect de mari dimensiuni și greu de importat;
Reducerea greșelilor – un obiect foarte complex este mult mai predispus la greșeli din partea modelatorului (poligoane n dimensionale, fețe concave, fețe cu găuri, fețe neplanare);
Scurtarea timpului de lucru – de cele mai multe ori durata modelării unui obiect complex depășește durata efectuări mai multor obiecte de o complexitate mai mică;
Depistarea mai rapidă a problemelor de exportare – greșelile de exportare sunt mai ușor de găsit, datorită dimensiunii și complexității mai reduse (normale întoarse, fețe multiplanare sau fețe cu mai mult de 4 margini);
Fig. 6. Exemplu curățare de poligoane
Exportarea si importarea
În urma realizării modelului în Autodesk Maya, pentru a-l putea introduce în lumea virtuală este nevoie să îl exportăm. Acest lucru se face cu niște instrumente specializate de exportare care se găsesc în meniul „File” (fișier).
Alegerea formatului este foarte importantă și depinde de motorul de joc în care dorim să introducem modelul. În cazul OpenSimulator, formatul care funcționează cel mai bine este COLLADA ce are terminația .dae. Fișierul .dae nou creat este importat în OpenSimulator prin intermediul clientului (clientul ales pentru proiect este Firestorm) din meniul Import și apoi adăugare nou obiect > Upload > Model. Din fereastră Model setăm parametrii pe care îi dorim pentru obiectul creat în Maya (nivel de detaliu, dimensiune, texturabil sau nu). O dată importat, modelul este trecut în inventar de unde utilizatorul poate să îl introducă în lumea virtuală prin tragerea acestuia în scenă.
Obiectul importat nu conține texturi datorită formatului .dae care nu se ocupă decât cu stocarea informațiilor legate de trăsăturile volumetrice ale unui obiect, cu toate astea se păstrează și maparea obiectului.
Pentru a asigura o importare corectă trebuie respectate următoarele cerințe:
Exportare obiect cu obiect – se va evita exportarea mai multor obiecte simultane din Maya, datorită faptului că, o dată importate în OpenSim ele vor fi văzute ca un singur obiect (este un singur fișier .dae), astfel se vor evita problemele de texturare. Excepție fac obiectele clonă (scaune, ferestre, bare);
Mapare obiecte înaintea exportării – este foarte important ca mapare obiectelor să fie făcută înainte exportării lor din Maya. O mapare făcută corect duce la o texturare făcută corect;
Verificare curățenie model – înainte exportării obiectelor acestea trebuie verificate să nu conțină fețe cu mai mult de 4 margini, sau fețe concave sau cu gaură în interior, precum este important să ne asigurăm că obiectul are toate normalele poziționate corect (trebuie să iasă din fața vizibilă a obiectului). Nerespectarea acestui pas duce la importări greșite (se vede prin obiect, obiectul nu are forma corespunzătoare cu cea din software-ul 3D) sau chiar erori de importare;
Mărime redusă, complexitate redusă – este de dorit să avem un obiect de dimensiuni mici sau cu complexitate redusă datorită unor restricții tehnice ale OpenSimulator ce vor fi expuse în paginile ce urmează.
Fig. 7. Exemplu verificare normale
Texturare
Texturarea sau maparea texturii este o metodă prin care se adaugă detaliu, culoare, sau suprafața texturată (bitmap sau imagine rasterizata) unui model 3D generat prin intermediul calculatorului. A fost introdusă pentru prima dată în 1974 de Edwin Catmull.
UV-maparea este procesul de modelare, al creării unei imagini de reprezentare 2D a unei suprafețe 3D. Acest proces proiectează harta texturii pe un obiect 3D. Literele U și V denotă axele texturii 2D. Texturarea UV permite poligoanelor care creează un obiect 3D să poată fi desenate cu culoarea de la o imagine. Imaginea se numește hartă de textură UV.
Fig. 8. Exemplu UV Map
Spre deosebire de texturarea într-un software specializat 3D cum e Maya sau alte motoare de joc, în OpenSimulator există niște restricții destul de drastice în ceea ce privește dimensiunea texturii, aceasta având un maxim de 2048×2048 pixeli. Acest lucru face ca obiectele mari să fie greu de texturat .
Este important ca maparea să fie făcută manual pentru fiecare obiect în parte pentru a ușura procesul de texturare. O dată terminată maparea din fereastră de UV Editor (Window >>UV Texture Editor) din meniul Polygons se alege UV Snapshot (fotografierea UV-ului). Această „fotografie” este apoi salvată în unul din formatele de imagine alese (preferabil png sau alt format care suportă transparență). Această imagine este apoi deschisă cu un editor de imagine (s-a folosit GIMP 2), apoi se vor selecta texturile potrivite fiecărei grupe de UV-uri și vor fi introduse cu ajutorul găletușei (Bucket Fill Tool) prin opțiunea de „Pattern fill” (astfel se va crea o repetiție a texturii cât mai precisă). După ce texturile au fost puse corect pe fiecare UV în parte, se va exporta imaginea finală în unul din formatele de ce pot fi citite de către OpenSim (.bmp, .png, .jpg, .tga).
Fig. 9. Exemplu texturare UV Map
Noua imagine va fi apoi importată în OpenSim prin intermediul clientului din Inventory>>Add New>>Upload>>Image și adresa în care se găsește noua textură. După upload aceasta va fi trecută în inventar, iar utilizatorul va putea să aplice noua textură, personalizată, modelului dorit din Instrumente de construcție>>Textură>>Adaugă Textura, unde v-a fi întâmpinat de o nouă fereastră ce va conține toate texturile ce se găsesc în inventar.
Fig. 10. Model Facultate Automatica și Calculatoare, corp ED ȋn Autodesk Maya
Fig. 11. Model Facultate Automatica și Calculatoare corp ED ȋn mediul virtual
Navigarea lumii virtuale
Modulul pathfinding
După finalizarea populării lumii virtuale cu modele 3D, aceasta ajunge să fie o replică virtuală a campusului Universtatii Politehnica București. Dimensiunea mare a campusului, numărul mare de clădiri și denumirea ambiguă a sălilor fac navigarea atât prin campusul virtual, cât și cel real, să reprezinte o adevărată problemă pentru utilizatorii/studenții noi. Pentru a evita întârzierea la cursuri sau laboratoare (din mediu real cât și virtual), un sistem de eficientizare a găsirii sălilor de curs sau de laborator a trebuit implementat.
După cum am precizat în capitolul de concepte și tehnologii folosite, OpenSim are integrat un limbaj de scriptare numit LSL. Folosind acest limbaj, am conceput un modul de pathfinding care să ajute utilizatorul să găsească drumul optim către o destinație dorită.
Modulul de pathfind reprezintă o extensie a OpenSim-ului și are următoarele functionalțități:
Ghidarea avatarului până la un punct de interes (sală, facultate);
Posibilitatea de adăugare a noi puncte de interes sau noduri;
Se folosește de o bază de date pentru a stoca informațiile necesare legate de punctele de interes sau de noduri;
Ruta este implementată și calculată folosind algoritmul A*.
A* reprezintă cel mai cunoscut algoritm de căutare euristică, folosit în pathfinding și în traversarea grafurilor, recunoscut pentru performanța și acuratețea sa [28].
A* folosește o politică de căutare Best-First. Aceasta reprezintă un algoritm de căutare ce explorează graful prin expansiunea celui mai promițător nod, ales în conformitate cu o regulă specificată.
Algoritmul A* are definită ca funcție de evaluare:
f(n) = g(n) + h(n), pentru oricare n aparține Nodurilor
Astfel, pentru un nod oarecare (notat n), costul estimat al soluției optime ce trece prin nod este reprezentat de f(n), iar g(n) și h(n) reprezintă notațiile pentru distanța cunoscută de la nodul sursă (avatarul) la nodul curent, respectiv estimata euristică a distanței de la un nod n la punctul de interes (sală). H(n) trebuie să fie euristic atmisibilă, adică să nu supraestimeze distanța până la punctul de interes. Astfel pentru modulul de navigație, h(x) reprezintă distanța ȋn linie dreaptă către punctul de interes, datorită faptului că linia reprezintă cea mai mică distanță ȋntre 2 puncte sau noduri.
Modulul de pathfind este compus din mai multe clase și anume:
Pathfinder.cs – reprezintă clasă care implementează algoritmul necesar pentru a crea drumul între poziția avatarului și punctul de interes din lumea virtuală. „Pathfinder.cs” are două clase primare: clasa „Node” și clasa „Pathfinder”. Clasa „Node” ce conține poziția nodului și a vecinilor lui. Poziția nodului este stocată într-un vector „pos”, ȋn timp ce vecinii nodului sunt stocați ȋntr-o listă („neighbours”). Clasa „Pathfinder” calculează drumurile dintre noduri și conține drumurile calculate pȃna cȃnd avatarul, ce a cerut găsirea unui drum, ajunge la destinație. „Pathfinder” calculează drumul de la un nod de start până la unul de destinație. Drumul va fi folosit pentru a-i permite unui avatar, ce are un id UUID, să navigheze pană la destinație. Drumul v-a fi salvat ȋntr-un dicționar de variante de drumuri pentru o folosire ulterioară. Algoritmul folosit pentru a calcula drumul este un algoritm A* standard;
Commander.lsl – reprezintă scriptul folosit de programator pentru a manipula punctele de referință (waypoint), trimite și încarcă datele din baza de date;
Node.lsl – este scriptul folosit pentru punctul de referință. Acest script are următoarele funcționalități:
Trimite datele la modul în momentul în care primește mesajul de trimitere de date sau dacă primitivă este atinsă de un avatar;
Activează/dezactivează atributul „Fantomă” al primitivei ce conține acest script când primește mesajul „Set phantom”/”Unset phantom”;
Face obiectul invizibil în momentul în care acesta primește mesajul de „Hâde”;
Face obiectul vizibil în momentul în care acesta primește mesajul „Show”;
Anunță modulul în momentul în care avatarul se ciocnește (atinge obiectul) cu un obiect;
Pentru a folosi acest script ca punct de referință, numele primitivei ce conține acest script trebuie să fie indexul punctului de referință, iar câmpul de descriere al primitivei trebuie să aibă următorul format <Nume grup nod><vecin1><vecin2>…<vecinn>. Atributele care conțin câmpul de descriere trebuie să fie separate printr-un spațiu. Spre exemplu configurarea a două noduri se face în următorul fel:
Prim name: 1
Prim description: Reg1 2
Prim name: 2
Prim description: Reg1 1 3
Prim name: 3
Prim description: Reg1 2
Pentru a putea folosi modulul de pathfind s-a folosit următoarea implementare:
Adăugarea primitivelor folosind uneltele clientului Firestorm (din fereastră Build și opțiunea de Cube);
Adăugarea unui script nou – realizată folsind submeniul content și opțiunea New Script;
Modificarea script-ului – pentru a modifica script-ul nou creat (nume default New Script) se folosește opțiunea Open;
Adăugarea script-ului Nod.lsl – din fereastră de editare de script se alege varianta „Load a script from your Hard Disk” (1) și se alege (2) și se confirmă (3) locația în care se găsește script-ul ales;
Redenumirea script-ului – realizată folosind opțiunea Rename;
Alegerea corectă a numelui – conform descrierii script-urilor nodul trebuie redenumit corespunzător din submeniul General și schimbarea cȃmpurilor de nume și descriere (Name și Description);
Crearea Commander-ului, se implementează la fel ca la Nod, dar se ȋncarcă Commander.lsl de pe Hard Disk.
Pentru a putea implementa un traseu de navigare precis și eficient, este nevoie de multiple primitive de nod. Datele privind poziționarea fiecărui nod în lumea virtuală sunt stocate ȋntr-o bază de date. Pentru a reînnoi baza de date cu privire la poziționarea unui nod nou sau mutării unui altui nod este nevoie ca primitiva nod să fie atinsă. Din primitiva Commander, administratorul setează caracteristicile fizice ale primitivelor nodului, pot fi făcute vizibile/invizibile sau fantome/reale (adică să se poată trece prin ele sau nu). De asemenea din primitivă de Commander se poate trimite datele către baza de date, precum și să se reȋncarce datele din baza de date. Atât primitivele Noduri cȃt și Commander nu pot fi modificate de către ușerii care nu au cont de administrator.
Baza de date
O altă parte importantă a navigării prin campusul Politehncii (vritual și real) este reprezentată de informațiile către locul spre care se dorește să se ajungă. Astfel, utilizatorul poate beneficia de informații precum numele cursului ținut în sală sau numele sălii la care acesta trebuie să ajungă într-un anumit interval orar.
Pentru a rezolva aceste probleme, am creat o bază de date în care sunt stocate informații legate de săli, grupe, cursuri și profesori. Pentru crearea bazei de date am folosit o unealtă specializată phpMyAdmin, în care am utilizat tab-ul de „Baze de date” și am creat o nouă bază de date intitulată „orar”.
Bazei de date „orar” i s-au introdus 3 tabele specializate prin intermediul butonului „Create Table”. Aceste tabele sunt următoarele:
Grupe: – tabelul „grupe” este format din:
id_grupă – reprezintă cheia primară a acestui tabel, id_grupă este un câmp de tip integer creat să fie auto-incrementabil și obligatoriu;
facultate – câmp de tip SET, în care au fost setate trei valori privind tipul facultății la care studiază sau este înregistrat utilizatorul și anume: Calculatoare, Ingineria Sistemelor și Master, acest câmp are ca valoare inițială facultatea de Calculatoare și la fel ca id_grupă este un câmp obligatoriu;
an – reprezintă anul de studiu în care se regăsește user-ul. Precum facultate, este un câmp de tip SET, ce are patru valori și anume I ,ÎI, III, IV și este obligatoriu;
nume grupă – reprezintă numele grupei și este un câmp de tip varchar de dimensiuni reduse (10 de caractere), obligatoriu;
Sală: – tabelul „săli” are următoarea structură:
Nr_crt – reprezintă cheia primară a tabelului, ține ordinea de introducere a datelor din tabel, este autoincrementata și obligatorie;
Id_sală – este o cheie străină ce leagă tabelul „săli” de „iduri-sala”, reprezintă id-ul unicat al fiecărei săli în parte. Este un câmp de tip integer, obligatoriu;
Zi_săptămână – un câmp de tip set în care sunt stocate numele zilelor săptămânii (cele de lucru), acesta are următoarele valori: Luni, Marți, Miercuri, Joi și Vineri. Setată ca valoare inițială este aceea a zilei de Luni. Zi_săptămână este un câmp obligatoriu;
Interval – face referire la intervalul orar al unui anumit curs său laborator. Precizează ora începerii cursului/laboratorului și ora sfârșirii acestui curs. Interval este un câmp de tip varchar, obigatoriu;
Nume_curs – reprezintă numele cursului, este un câmp de tip varchar de mari dimensiuni (50 de caractere), obligatoriu;
Profesor – câmp ce reprezintă numele profesorului, de tip varchar de 50 de caractere, obligatoriu;
Id_grupă – cheie străină, face legătura dintre tabelul „sală” și „grupe”, reprezintă id-ul unicat pentru fiecare grupă. Id_grupă este un câmp de tip integer, obligatoriu;
Iduri_săli: tabelul „id-uri săli” este structurat astfel:
Id_sală: cheia primară a acestui tabel, unicata pentru fiecare intrare, obligatorie, responsabilă cu ordonarea datelor intrate prin autoincrementare;
Nume_sală: câmp care stochează numele sălii introduse, este un câmp de tip varchar de 15 caractere și reprezintă un câmp obligatoriu la inserarea de date;
Clădire – câmp de tip set, oferă utilizatorului posibilitatea de alegere a clădirii în care se găsește o anumită sală. Are ca valori următoarele: EC-uri, EG-uri, ED-uri, AN/BN-uri, Leu ce reprezintă clădirile găsite în interiorul campusului și totodată clădirile în care studiază studenții de la facultatea de Automatică și Calculatoare. Valoarea intiala a câmpului este cea de EC-uri; „clădire” este un câmp obligatoriu de completat;
Cod_waypoint – este un câmp ce stochează codul de localizare în spațiu virtual al unui waypoint, este un câmp de tip varchar de mari dimensiuni (100 de caractere) ce este obligatoriu de completat.
După finalizarea creării tabelelor ce formează baza de date, acestea au fost populate cu diferite informații. Ca date de referință pentru completarea bazei de date s-au folosit informațiile oferite de orarele descărcate de pe site-ul facultății de Automatică și Calculatoare. Astfel au fost introduse toate datele privind sălile, cursurile, profesorii, intervalele orare și zilele săptămânii ale celor 99 de grupe de Automatică și Calculatoare, împreună cu cele 6 subgrupe de la cele 3 Maștere din cadrul Facultății de Automatică și Calculatoare. De menționat că pentru grupele de Master s-au creat abrevieri, întrucât acestea nu erau menționate în orarele descărcate de pe site-ul oficial al facultății. Astfel, subgrupele de la masterul de Grafică, Multimedia și realitate virtuală au fost redenumite ca S1GMRV și S2GMRV, cele de la Sisteme Inteligente de conducere au fost redenumite ca S1SIC respectiv S2SIC, iar semigrupele de la masterul de PCSAM au fost redenumite ca S1PCSAM și S2PCSAM.
În concluzie, datele introduse în baza de date sunt complete pentru grupele facultății de Automatică și Calculatoare.
Pagina Web
Lumea virtuală creată cu ajutorul motorului MMO OpenSim prezintă multe avantaje față de majoritatea motoarelor de joc asemănătoare, dar și o serie de dezavantaje. Un dezavantaj al OpenSimului este imposibilitatea creări de obiecte tip HUD (acronim pentru „head-up display” sau bară de status). Acestea sunt utilizate de majoritatea producătorilor de jocuri sau media pentru a adăuga informații utilizatorului ca parte a interfeței grafice cu utilizatorul. Pentru a compensa acest neajuns, s-a recurs la o nouă soluție de afișare a informațiilor. Afișarea a fost făcută sub forma unor panouri informative așezate în poziții strategice. Construite ca niște primitive în OpenSim, aceste panouri pot afișa numeroase elemente vizuale precum poze, tabele sau pagini web. Astfel a fost creată o pagină web care să suplinească rolul de HUD și să îi ofere utilizatorului acces la informațiile necesare acestuia.
Pentru crearea paginii web, s-a folosit un „solution stack” (a fost utilizat WAMP) care să ajute dezvoltatorul cu toate instrumentele necesare creări site-ului. Pentru început, s-a creat un fișier cu numele „Orare” în directorul www din WAMP. Prin deschiderea „wampmanager.exe” se pornește aplicația WAMP, ce acționează ca un centru de comandă pentru toate componentele acestuia. Prin deschiderea localhost-ului se pot observa toate configurațiile serverului și anume: versiunea serverului Apache, versiunea PHP, extensiile încărcate precum și versiunea MySQL-ului. În afară de configurația serverului, localhost-ul mai conține și o categorie de unelte (phpinfo și phpmyadmin), o categorie de proiecte (cele puse în directorul www), o categorie cu gazdele virtuale și una cu alias-ul utilizatorului (phpmyadmin, sqlbuddy sau webgrind). Pentru rularea și verificarea fișierelor .php sau .html utilizatorul trebuie să intre în directorul cu numele proiectului curent din localhost. Se va deschide o pagină ce va conține un index cu toate fișierele ce se regăsesc în acel proiect. Acesta afisaza, pe lângă numele fiecărui fișier în parte, ultima modificare și dimensiunea acestuia.
După crearea directorului în care se va stoca informația legată de pagină web, se va începe crearea propriu-zisă a paginii web, ce a fost constituită din următorii pași:
Creare orar.php – este responsabil cu crearea legăturii între baza de date „orar” și localhost;
Vizualizare_orar.php – acesta conține urmatarele elemente:
Titlu – introdus prin intermediul html, prin introducerea unui antet de tip h1;
Selector facultate – are două componente: una de etichetă ce este folosită pentru denumirea câmpului „facultate” și un meniu de tip selector ce conține toate tipurile de facultăți introduse în baza de date cu care se face legătura (orar). Pentru obținerea meniului de selecție, am folosit un element de tip fieldset. Acesta a fost ulterior populat cu datele din baza de date prin intermediul unei interogări făcute în PHP, ce alege valorile distincte ale câmpului „facultate” din tabelul de grupe;
Selector an – și acesta este format din două componente: – componenta „an”, ce apare înaintea meniului și este o etichetă și meniul de tip selector, ce conține toți anii introduși în baza de date. Meniul de selecție este creat prin intermediul elementului html, fieldset, iar acest meniu este populat folosind interogarea făcută în PHP prin care se aleg toate aparițiile distincte din câmpul „an” din tabelul de grupe;
Primul buton „OK” – este responsabil cu transmiterea informațiilor dobândite de la selecțiile făcute de către utilizator de la cei doi selectori. În momentul în care este apăsat, butonul trimite valoarea de „submitted” a primului formular. Acest proces este mediat prin intermediul unei funcții create în Ajax care previne revenirea meniurilor de selecții la valorile inițiale, posterior apăsării butonului ,și de asemenea, trimite un mesaj de tip „post” în fișierul „selecție_grupe.php”. Fișierul „selecție_grupe.php” începe să fie rulat în momentul în care butonul este apăsat și primește ca valoare trimisă de la primul formular (form1) răspunsul, care să confirme apăsarea butonului (submitted1). În interiorul unei bucle if ce funcționează doar pentru valoarea de „submitted1” a formularului1, se face legătura cu baza de date (orar) și se execută o interogare ce selectează numele grupei (nume_grupă) din tabelul de grupe al bazei de date „orar”, doar pentru valorile selectate de utilizator din cele două meniuri de selecție (adică atunci când câmpul „facultate” are valoarea aleasă de utilizator din „selectorul Facultate”, respectiv atunci când câmpul „an” are valoarea aleasă de utilizator din „selectorul An”). Rezultatul obținut este mai apoi extras din baza de date și afișat prin intermediul unei funcții echo. Dacă interogarea a fost executată corect și s-a obținut un răspuns, atunci ea este întoarsă în Ajax-ul menționat anterior, iar răspunsul este stocat într-o nouă variabilă (grupe_sel_ajax);
Selector grupe: – în afară de eticheta de grupă, meniul de selecție este de această dată populat folosind rezultatul obținut din „selecție_grupe.php” și stocat în „grupe_sel_ajax”. Astfel, meniul va fi populat doar cu grupele ce se regăsesc în anul și facultatea alese de utilizator;
Selector zi săptămână: – acest selector este creat pentru a evita suprapopularea orarului creat în urma completării formularelor și pentru a face navigarea prin orar cât mai facilă pentru utilizator;
Al doilea buton OK – creat pentru a valida selecțiile făcute în formularul 2, acesta trimite valoarea de „submitted”, ce este mediată de către o funcție ajax care previne revenirea la valorile inițiale ale câmpurilor de selecție și care transmite un mesaj de tip post în fișierul „generare_tabel.php”. „generare_tabel.php” se ocupă de popularea tabelului, ce are ca valori de intrare valorile introduse de utilizator (adică va afișa orarul grupei selectate de utilizator în ziua aleasă de acesta). Programul începe să ruleze numai dacă a fost completat formularul 2 și trimisă valoarea submitted a butonului 2. Programul face legătura cu baza de date (orar), iar apoi execută o interogare în care se selectează câmpurile de „interval”, „profesor” și „nume_curs” din tabelul „sală”, câmpurile „cod_waypoint” și „nume_sală” din tabelul „id_grupă”, precum și „nume_grupă” din tabelul „grupe”, pentru valorile de „nume_grupă” și „zi_săptămână” alese de utilizator. Tabelele sunt interconectate prin intermediul cheilor străine și ordonate crescător, după intervalul de timp. Rezultatul obținut este extras din baza de date și afișat sub forma de tabel prin funcția echo. Dacă interogarea a fost executată corect, iar răspunsul afișat este întocmai bazei de date, atunci ea este returnată în Ajax care va stoca rezultatul obținut într-o nouă variabilă denumită „tabel_body_ajax”;
Tabelul: – tabelul afișat este creat în html folosind funcția de „table”. După crearea antetului tabelului, corpul tabelului este completat folosind valorile obținute și stocate în „tabel_body_ajax”.
Program_Săli.php: – este compus din următoarele elemete:
Titlu – titlul „Vizualizare Orar Săli” este introdus ca antet h1 folosind cod html;
Selector clădire – format din două componente: numele selectorului, care este creat cu ajutorul unei etichete în html și meniul de selecție, care conține valorile distincte ale clădirilor introduse în baza de date;
Primul buton OK – este cel care validează finalizarea selecției din primul formular (alegerea clădirii). În momentul apăsării acesta transmite valoarea de „submitted”, care este interceptată și mediată de o funcție Ajax, ce previne revenirea la valoarea inițială după ce butonul a fost apăsat și care transmite un mesaj de tip post la fișierul „selecție_săli.php”. „Selecție_săli.php” se ocupă de selectarea numelor de săli, ce se găsesc în clădirea selectată de utilizator. Programul rulează în momentul în care formularul 1 a fost completat, iar butonul a transmis valoarea de „submitted”, prin intermediul funcției Ajax. Programul face legătura cu baza de date (orar) după care execută o interogare SQL prin care să selecteze numele sălii (nume_sală) din tabelul „iduri_săli”, doar pentru valorile din câmpul „clădire”, selectate de către utilizator. Răspunsul obținut este apoi afișat prin intermediul funcției echo. Dacă răspunsul a fost executat corect, conform bazei de date, acesta este returnat în funcția Ajax și stocat într-o variabilă denumită „săli_sel_ajax”;
Selector săli: – compus dintr-o etichetă cu numele de „săli” și un meniu de selecții ce va fi populat cu rezolvările stocate în variablia „săli_sel_ajax”;
Selector zi săptămână: – creat pentru a micșora gradul de complexitate al tabelului precum și pentru a facilita obținerea de informații pentru utilizator. Este compus dintr-o etichetă cu numele „Zi Săptămână” și un meniu de selctii ce conține valorile distincte ale câmpului „zi_săptămână” din tabelul „sală”.
Al doilea buton OK – validează finalizarea selecțiilor din cel de-al doilea formular (alegere săli, alegere zi săptămână). După apăsare, formularul 2 trece în starea de „submitted”, care este apoi transmisă funcției Ajax, care asigură păstrarea selecțiilor făcute și după apăsarea butonului OK și care transmite un mesaj de tip „post” către un fișier numit „generare_tabel_săli.php”. Acest fișier, după cum îi spune și numele, este folosit pentru a genera și popula tabelul corespunzător alegerilor făcute de utilizator. Programul își începe execuția în momentul în care primește de la buton starea de „submitted”, prin intermediul funcției Ajax și după ce cel de-al doilea formular a fost completat. Pentru început, programul se va conecta la baza de date (orar), iar apoi va execută o interogare SQL, care va selecta valorile distincte ale intervalului din tabelul „săli”, precum și selecția profesorului și a numelui cursului din tabelul „săli”, dar și câmpul „nume_sală” din tabelul „iduri_săli” pentru câmpurile „nume_sală” și „zi_săptămână”, ale căror valori sunt cele alese de utilizator. Rezultatul este mai apoi verificat și afișat sub forma unui tabel. După obținerea răspunsului, acesta este returnat funcției ajax și stocată într-o variabilă numită „tabel_body_ajax”;
Tabelul – creat prin intermediul funcției table și are ca antet datele necesare cunoașterii unui orar de sală și anume: numele sălii, intervalul orar la care acesta este ocupată, numele cursului ce este ținut în acea sală, precum și numele profesorului ce susține cursul. Corpul tabelului este completat folosind valorile obținute și stocate în „tabel_body_ajax”.
Home.php – reprezintă pagina de start cu care este întâmpinat utilizatorul și are următoarele elemente:
Titlul – este introdus prin intermediul unui antet de tip h1;
Buton Orar Grupe – buton ce trimite navigarea la pagina vizualizare_orar.php;
Buton Program Săli – buton ce trimite navigarea la pagina program_săli.php.
După finalizarea acestor pași, s-a obținut o pagină web funcțională și stabilă, prin care utilizatorul poate naviga cu ușurință pentru a găsi informatile necesare acestuia. Adititional la cele menționate anterior, pentru a obține aspectul actual al site-ului, s-a folosit un pachet ce conține șabloane pentru fiecare tip de element dintr-o pagină web (butoane, tabel, antet, submeniuri, nota de subsol, etc.). Acest pachet cu șabloane a fost folosit cu scopul de a atrage utilizatorul și de a crea un aspect uniform și curat al paginii web. De asemenea, fiecărei săli (nume de sală) afișată în tabel, i-a fost atașat un link către Web API-ul responsabil cu crearea unei legături între pagină web și lumea virtuală din OpenSim. Fiecare link are extensia dată de „cod_waypoint”, care reprezintă codul locației destinație pentru fiecare sală în parte. Astfel, în momentul în care utilizatorul apăsă link-ul cu numele sălii, va începe rularea modulului de „pathfinding”, care îi va permite acestuia să găsească drumul cel mai scrut către sala dorită. Acest proces de informare (cu privire la orarul grupei pe zile sau al sălilor) și de navigare (ghidarea utilizatorului pe drumul cel mai scrut) va putea fi folosit atât de către utilizatorii din lumea virtuală, ce nu se află fizic în campusul Politehnicii, cât și studenții prezenți în mediul real, ce vor putea afla cu ușurință care sunt orele de curs din ziua căutată de acesta, precum și găsirea rapidă a sălii dorite, întrucât lumea virtuală a fost creată să fie o replică a lumii reale.
Introducere Pagina Web in OpenSim
După finalizarea paginii web, aceasta va fi introdusă în lumea virtuală prin intermediul unor primitive create în OpenSim, utilizând uneltele de construcție de primitive deja existente în clientul Firestorm. Astfel se vor crea niște primitive (obiecte 3D) pe care se vor afișa paginile web create pentru a ghida și informă user-ul.
Acestea se realizează astfel:
Crearea unui obiect 3D – ce se face din meniul Build (contruieste) și opțiunea Build sau folosind scurtatura Ctrl. + B, ce va deschide o fereastră în OpenSim care din care se va alege unul din tipurile de primitive ce vor fi introduse în scena virtuală (cub, cilindru, piramidă, sferă, torus, etc).
Modificarea primitivei – o dată aleasă o primitivă, aceasta va apărea în scenă și va putea fi modificată folosind combinația de taste Ctrl + Shift, putând altera forma prin operațiunea de tragere de anumite secțiuni (colț – mărește/micșorează uniform obiectul, fețe – alterează doar pe o singură direcție)
Selectarea feței afișaj – După ce se obține forma dorită, se va selecta fața pe care se dorește să se afisieze pagină web (din meniul Edit (modificare) al ferestrei Build (construire)) folosind opțiunea Select Face (selectează fata primitivei), iar pentru alegerea acesteia se va face click pe fața dorită.
Iluminarea feței afișaj – Următorul pas este cel de a lumina fața afișată pentru ca utilizatorul să poată vedea pagină web întocmai cum arată și nu iluminată din surse externe. Pentru a realiza acest lucru se va selecta opțiunea Full Bright (iluminare maximă) din submeniul Texture (textură) al ferestrei de construcție
Adăugarea unui conținut media – O pagină web reprezintă un conținut multimedia deoarece cuprinde o combinație de forme de conținut precum text, audio, imagini, animații, video și interacțiune, astfel pentru a putea imprima o pagină web pe primitiva creată este nevoie să o adăugăm primitivei sub forma unui conținut media. Pentru a realiza acest lucru se va selecta Media din meniul selector ce are ca valoare inițială Materials (materiale) din submeniul Texture (textură).
Pentru adăugarea propriu-zisă a paginii se va apăsa butonul Choose (alege) (1), apărut în urma selecției de media, acesta va deschide o nouă fereastră care va cere url-ul (localizator uniform de resurse) de Home Page(pagina afișată/pagina de acasă) (2). O dată introdus, în fereastra preview va apărea pagină web selectată. Pentru ca experiența să fie cât mai imersiva, este recomandat selectarea opțiunii de Auto Zoom (focalizare automată) (3) ce va încadra pagină web utilizatorului astfel încât să ocupe cât mai mult spațiu dincampul vizual al acestuia. De asemenea este recomandat să fie selectate și opțiunile de Auto Play Media (pronire automată a informației media) precum și Auto Scale Media on Face (scalare automată a informației media pe fața aleasă), acest lucru este recomandat pentru a nu se crea un efect de aplatizare sau alungire a unei pagini web.
Accesarea conținutului media – pentru a putea accesa pagină web introdusă este nevoie să se închidă fereastra de editare (cea de construcție) și să se atingă suprafața cu conținut media (click stânga)
Web API
Nevoia de a intergra și atașa servicii și dispozititve externe spațiului virtual a dus la necesitatea implementării unei interfețe ușoare de comunicare între aceste servicii și serverul OpenSim.
Realizat pe o tehnologie REST, aceasta oferă un API standardizat în care se pot intergra ușor servicii externe. Datele trimise prin intermediul acestor cereri s-au implementat folosind un format serializat în obiecte de tip JSON (Java Script Object Notation).
Astfel, pentru ca OpenSim să poată comunica cu diverse servicii externe, este nevoie atât de existența unor script-uri dedicate penru acest lucru în mediul virtual, cât și de o interfață ce poate ști cum să comunice cu aceste script-uri.
Procedura presupune publicarea unei resurse din mediul virtual folosind script-uri și funcții dedicate precum cele explicate la principiul REST menționat anterior.
Din acest motiv, o primitivă sau obiect oarecare numește un URÎ (identificator uniform de resurse) care îl idenifica unic. La inițializare, URI-ul este trimis către API pentru a fi înregistrat în baza de date pentru operațiile ulterioare. Apoi, API-ul pateu trimite cereri directe către acesta.
Adititional, acest script OpenSim trebuie să înregistreze și un listener (proces separat ce există pe un server, servește la primirea de cereri de conexiuni din partea clientului și managereaza traficul acestor cereri până la server) pentru a putea primi cererile către adresa publicată. Listener-ul implementat respectă principiile REST, astfel putând fi trimise cereri de tip GET, POST, PUT sau DELETE. Astfel se păstrează o arhitectură compatibilă și pe aceleași principii cu API-ul.
Singura limitare apare datorită dificultății de deserializare a datelor din cadrul unui LSL, astfel că datele trebuie procesate și formatate cât mai simplist într-un API, prin intermediul delimitatorilor simpli.
Pentru comunicarea paginii web cu OpenSim s-au făcut următorii pași:
S-a aplicat scriptul LS pe unul dintre obiecte, denumit waypoint, fiecare waypoint în parte a fost denumit diferit și fiecare waypoint reprezintă una din sălile aflate în lumea virtuală
Folosind datele de localizare din OpenSim, s-a găsit și copiat codul de poziționare al waypoint-ului
Codul copiat a fost rescris în interiorul bazei de date „orar” în tabelul „iduri_săli” la câmpul „cod_waypoint”
Codul a fost introdus în pagină web prin intermediul unui link ce are ca URL adresa Web API-ului și terminația cod-ului de waypoint. Link-ul a fost aplicat peste fiecare nume de sală ce este afisata în tabelele din pagină Web (atât la orarul grupelor, cât și la orarul sălilor)
O dată apăsat, link-ul lansează API-ul care trimite mai departe în OpenSim cereri de tip GET
OpenSim-ul răspunde prin activarea modului de navigație, și indicarea drumului către sala selectată.
Fig. 12. Comunicare API cu OpenSim
Posibilitati de dezvoltare
Atât proiectul 3DUPB cât și aplicația prezentată în acest document se află într-un stagiu incipient de dezvoltare, ce vor putea fi extinse considerabil în anii ce urmează.
O primă modificare ce va putea fi adusă proiectului va fi aceea de folosire a unui alt motor de joc MMO. Deși OpenSim oferă atât utilizatorului cât și dezvoltatorului o vastă gamă de unelte și multiple avantaje, acesta are și numeroase limitări în ceea ce privește aspectul, motorul fizic (probleme cu coliziunile, fizică ireală), animații imprecise, dimensiuni reduse ale imaginilor de textură (2048×2048), neacceptare format .fbx pentru modele 3D (păstrează texturile în timpul exportării), iluminat static, etc. Aceste limitări scad nivelul de imersiune al utilizatorului în lumea virtuală. Variante de motoare de joc ce ar putea îmbunătății performanțele lumii virtuale sunt Unity, Unreal Engine sau Cry Engine, dintre care Unity beneficiază de avantajul de a fi gratis și open source. Dar, pentru a putea fi implementată pe unul din motoarele de joc menționate trebuie creat un server multiuser capabil să susțină o multitudine de utilizatori simultan și tot o dată să fie capabil se ocupe de fizică din lumea virtuală.
Lumea virtuală a campusului universitar conține majoritatea clădirilor ce se află în interiorul campusului, dar numai Facultatea de Automatică și Calculatoare și Rectoratul au fost create folosind un software specializat de modelare 3D, restul clădirilor fiind obținute prin fotogrametrie ce presupune pozarea unei clădiri din mai multe unghiuri, iar pe baza pozelor, crearea unui model 3D utilizând un program specializat. Deși, în sine idea de a fotogrametria un model 3D pare bună la început această nu este întocmai așa. Un model obținut prin fotogrametrie este de cele mai multe ori modelat necorespunzător (fețe ce conțin mai mult de 4 margini, fețe care nu se alipesc corespunzător cu vecinele lor, fețe neplanare sau fețe concave) ce duc la numeroase probleme de imporare în interiorul unei lumi virtuale. Astfel, până la apariția unui soft mai eficient de construire a unui obiect 3D din poze, se va recomanda crearea clădirilor manual într-un software specializat de modelare, în urma unor măsurători riguroase. Pe lângă modul de modelare al obiectelor 3D, ar mai trebui adăugat, pentru clădirile obținute prin fotogrametrie, un nivel mai mare de detaliere (interior clădiri + clase).
O altă îmbunătățire va trebui adusă modululi de navigare (pathfinding + bază de date + pagină web). Aceasta presupune modelarea apriori în detaliu a clădirilor din interiorul campusului Universității Politehnică București și crearea de drumuri pentru fiecare clasă în parte din orice clădire ce se regăsește în campus.
Pentru generarea unui sistem de informare cu privire la orare ale grupelor și sălilor mai complet pentru întreaga universitate, va fi nevoie de introducere a datelor privind toate facultatiile din campusul universitar, nu doar a datelor Facultății de Automatică și Calculatoare.
O altă îmbunătățire ce s-ar putea aduce aplicației, posterior schimabrii motorului de joc MMO este schimbarea interfeței grafice cu utilizatorul, prin introducerea paginii web creată ca HUD (head-up display), astfel încât fiecare utilizator să poată dispune de propria-i interfață (nu va trebui împărțită cu altcineva) oricând (poate fi accesată oricând, din orice loc).
O posibilitate de dezvoltare este a metaversului creat este de creare de clase virtuale, în care profesorii (ca utilizator) pot să predea utilizatorilor virtuali diverse materii ce vor fi susținute în sălile goale într-un moment dat. Astfel se va putea crea o eficientizare a spațiilor din interiorul facultăților, precum și o creștere a numărului de studenți ai facultății.
Concluzii
Crearea unei clase virtuale nu reprezintă ceva unicat în ziua de azi, însă crearea unui campus universitar virtual este un pas pe care încă nimeni nu a îndrăznit să îl facă. Datorită complexității mari, a volumului mare de muncă și al numeroaselor cunoștințe necesare pentru gestionarea conexiunilor cu spațiul virtual, majoritatea proiectelor, care au incercat să implementeze un spațiu virtual de asemenea proporții, nu au fost terminate niciodată.
Proiectul 3D UPB a pornit ca o idee in 2009. De atunci mai multe generații de studenți ambițioși și hotărȃți au reușit să materializeze această idee ȋn ceva real. Astăzi, proiectul 3D UPB ajunge in stadiul beta de dezvoltare. Acesta cuprinde acum un mediu virtual ce conține Facultatea de Automatică și Calculatoare și Rectoratul Universității Politehnica București, modelate cu precizie după clădirile reale. De asemenea harta campusului a fost creată să reprezinte cu fidelitate terenul campusului. Toate componentele ce formează lumea virtuală sunt parte al unui server OpenSim, ce ruleaza ȋn mod grid și la care fiecare student al Facultății de Automatică și Calculatoare se va putea conecta prin intermediul unui client ce va putea fi descărcat de pe site-ul facultății. Varianta beta a proiectului 3D UPB conține pe langa cele menționate și un sistem de navigație ȋn mediul virtual, o aplicație Android care permite streaming video între 2 utilizatori, un sistem de prezentă în mediul virtual, precum și un program de localizare gps în interiorul campusului virtual.
Potențialul proiectului 3D UPB ȋncă nu a fost exploatat in totalitate, dar pe viitor acestuia i se vor adăuga funcționalități suplimentare precum și extinderea celor deja oferite.
Ȋn concluzie, Proiectul 3D UPB uimește prin complexitatea lui și reușește să ȋmbunatățească semnificativ calitatea și experiența educațională prin intermediul serviciilor si mijlocelor complementare oferite.
Consider că, pe parcursul ultimilor doi ani de facultate, am adus contribuții semnificative ce au dus la extinderea proiectului 3D UPB prin replicarea cȃt mai precisă a mediului real ȋn spatiul virtual, precum si prin integrarea unui sistem de navigație care să poată fi folosit atȃt de studenții din mediul real cat și cei din lumea virtuală.
Bibliografie
[1] http://ro.wikipedia.org/wiki/Realitate_virtual%C4%83
[2] Marin VLADA, Mircea POPOVICI, Realitatea Virtuală (Virtual Reality), tehnologie modernă a informaticii aplicate, CNIV-2004, VIRTUAL LEARNING – Conferința Națională de Învățământ Virtual, Ediția a II-a , 29-31 oct. 2004
[3] C. Manetta, R. Blade, Glossary of Virtual Reality Terminology, International Journal of Virtual Reality, Vol.1 Nr.2, 1995.
[4] Smart, J. M, Cascio, J. și Paffendorf, J., Metaverse Roadmap Revizie ediție 2007, 23.09.2010.
[5] Neil Stephenson, Snow Crash, Leda, 2010, ISBN 973-102-302-1.
[6] Ding, H., Hong, Y. (2003), NURBS curve controlled modeling for facial animation, Computers and Graphics, 27(3):373-385.
[7] de Souza e Silva, Adriana; Sutko, Daniel M. (2009). Digital Cityscapes: merging digital and urban playspaces. New York: Peter Lang Publishing, Inc.
[8] P. Milgram and A. F. Kishino (1994). "Taxonomy of Mixed Reality Visual Displays". IEICE Transactions on Information and Systems. pp. 1321–1329.
[9] Milgram, Takemura, Utsumi și Kishino, Virtuality Continuum, 1994.
[10] Jeffrey Ullman 1997: First course in database systems, Prentice–Hall Inc., Simon & Schuster, Page 1, ISBN 0-13-861337-0.
[11] What is Massively Multiplayer Online Game (MMOG)? – Definiție din Techopedia.
[12] http://www.ibm.com/developerworks/architecture/library/ar-powerup1/
[13] http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
[14] Fielding, Roy T.; Taylor, Richard N. (May 2002), "Principled Design of the Modern Web Architecture”.
[15] Terms of Service, Second Life.
[16] Third Party Viewer Directory – Second Life Wiki
[17] http://secondlife.com
[18] http://ro.wikipedia.org/wiki/Programe_de_grafic%C4%83_3D
[19] "History". Din cărțile de Maya
[20] Sharpe, Jason; Lumsden, Charles J; Woolridge, Nicholas (2008), In silico: 3D animation and simulation of cell biology with Maya and MEL, Morgan Kaufmann Martin, p. 263,ISBN 0-12-373655-2
[21] Kimball, Spencer; Mattis, Peter (11 February 1996)."readme"
[22] GIMP — Prehistory — before GIMP 0.54". GIMP history. Peter Mattis. 29 July 1995.
[23] Akkana Peck – Beginning GIMP: From Novice to Professional, Mai 2006, ISBN 1-59059-587-4
[24] http://en.wikipedia.org/wiki/WAMP#Variants_and_equivalents_on_other_platforms
[25] "phpMyAdmin – About". Echipa de dezvoltare phpMyAdmin.
[26] Delisle, Marc (2010). Mastering phpMyAdmin 3.3.x for Effective MySQL Management. Packt Publishing. p. 359. ISBN 978-1-84951-354-8.
[27] http://opensimulator.org/
[28] S. Russel, P. Norvig – Artificial Intelligence: A Modern Approach – Prentice Hall, 2nd Edition – cap. 4
Bibliografie
[1] http://ro.wikipedia.org/wiki/Realitate_virtual%C4%83
[2] Marin VLADA, Mircea POPOVICI, Realitatea Virtuală (Virtual Reality), tehnologie modernă a informaticii aplicate, CNIV-2004, VIRTUAL LEARNING – Conferința Națională de Învățământ Virtual, Ediția a II-a , 29-31 oct. 2004
[3] C. Manetta, R. Blade, Glossary of Virtual Reality Terminology, International Journal of Virtual Reality, Vol.1 Nr.2, 1995.
[4] Smart, J. M, Cascio, J. și Paffendorf, J., Metaverse Roadmap Revizie ediție 2007, 23.09.2010.
[5] Neil Stephenson, Snow Crash, Leda, 2010, ISBN 973-102-302-1.
[6] Ding, H., Hong, Y. (2003), NURBS curve controlled modeling for facial animation, Computers and Graphics, 27(3):373-385.
[7] de Souza e Silva, Adriana; Sutko, Daniel M. (2009). Digital Cityscapes: merging digital and urban playspaces. New York: Peter Lang Publishing, Inc.
[8] P. Milgram and A. F. Kishino (1994). "Taxonomy of Mixed Reality Visual Displays". IEICE Transactions on Information and Systems. pp. 1321–1329.
[9] Milgram, Takemura, Utsumi și Kishino, Virtuality Continuum, 1994.
[10] Jeffrey Ullman 1997: First course in database systems, Prentice–Hall Inc., Simon & Schuster, Page 1, ISBN 0-13-861337-0.
[11] What is Massively Multiplayer Online Game (MMOG)? – Definiție din Techopedia.
[12] http://www.ibm.com/developerworks/architecture/library/ar-powerup1/
[13] http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
[14] Fielding, Roy T.; Taylor, Richard N. (May 2002), "Principled Design of the Modern Web Architecture”.
[15] Terms of Service, Second Life.
[16] Third Party Viewer Directory – Second Life Wiki
[17] http://secondlife.com
[18] http://ro.wikipedia.org/wiki/Programe_de_grafic%C4%83_3D
[19] "History". Din cărțile de Maya
[20] Sharpe, Jason; Lumsden, Charles J; Woolridge, Nicholas (2008), In silico: 3D animation and simulation of cell biology with Maya and MEL, Morgan Kaufmann Martin, p. 263,ISBN 0-12-373655-2
[21] Kimball, Spencer; Mattis, Peter (11 February 1996)."readme"
[22] GIMP — Prehistory — before GIMP 0.54". GIMP history. Peter Mattis. 29 July 1995.
[23] Akkana Peck – Beginning GIMP: From Novice to Professional, Mai 2006, ISBN 1-59059-587-4
[24] http://en.wikipedia.org/wiki/WAMP#Variants_and_equivalents_on_other_platforms
[25] "phpMyAdmin – About". Echipa de dezvoltare phpMyAdmin.
[26] Delisle, Marc (2010). Mastering phpMyAdmin 3.3.x for Effective MySQL Management. Packt Publishing. p. 359. ISBN 978-1-84951-354-8.
[27] http://opensimulator.org/
[28] S. Russel, P. Norvig – Artificial Intelligence: A Modern Approach – Prentice Hall, 2nd Edition – cap. 4
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Contributii la Dezvoltarea Plaformei 3d Upb Replica Virtuala Masiv Multiutilizator In Timp Real a Universitatii Politehnica din Bucuresti (ID: 162217)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
