TEMA – PROIECTAREA ȘI REALIZAREA UNEI APLICAȚII ANDROID NATIVE [302907]
[anonimizat] a studiilor a student: [anonimizat]
1). Tema lucrării de finalizare a studiilor:
PROIECTAREA ȘI REALIZAREA UNEI APLICAȚII ANDROID NATIVE
2). Termenul pentru predarea lucrării 27.06.2014
3). Elemente inițiale pentru elaborarea lucrării de finalizare a [anonimizat], XML, lucru cu baza de date SQLite.
4). Conținutul lucrării de finalizare a studiilor
Descrierea tehnologiilor și aplicațiilor folosite pentru dezvoltarea aplicației și modul în care acestea au fost utilizate. Descrierea arhitecturii aplicației. Prezentarea modului de utilizare al aplicației. Concluzii și dezvoltări ulterioare.
5). Material grafic:
[anonimizat].
6). Locul de documentare pentru elaborarea lucrării:
Internet, [anonimizat].
7). Data emiterii temei 30.10.2013
Coordonator științific
CONF. DR. ING GIANINA GABOR
UNIVERSITATEA DIN ORADEA
FACULTATEA DE INGINERIE ELECTRICĂ ȘI
TEHNOLOGIA INFORMAȚIEI
DOMENIUL / PROGRAMUL DE STUDIU:
TEHNOLOGIA INFORMAȚIEI
FORMA DE ÎNVĂȚĂMÂNT ZI
PROIECT DE DIPLOMĂ
COORDONATOR ȘTIINȚIFIC:
CONF. DR. ING GIANINA GABOR
ABSOLVENT: [anonimizat]
2014
UNIVERSITATEA DIN ORADEA
FACULTATEA DE INGINERIE ELECTRICĂ ȘI
TEHNOLOGIA INFORMAȚIEI
DOMENIUL / PROGRAMUL DE STUDIU:
TEHNOLOGIA INFORMAȚIEI
FORMA DE ÎNVĂȚĂMÂNT ZI
PROIECTAREA ȘI REALIZAREA UNEI APLICAȚII ANDROID NATIVE
COORDONATOR ȘTIINȚIFIC:
CONF. DR. ING GIANINA GABOR
ABSOLVENT: [anonimizat]
2014
Cuprins
CAPITOLUL I. Introducere 5
CAPITOLUL II. TEHNOLOGII UTILIZATE 6
2.1 Sistemul de operare iOS 6
2.1.1 Arhitectura iOS 6
2.1.2 Aplicații iOS 7
2.2 Swift 7
2.3 OpenGL 7
2.4 Metal 7
CAPITOLUL III. Dinamica Fluidelor 7
3. Dinamica computerizată a fluidelor 7
3.1 [anonimizat] 7
CAPITOLUL VI. Studiu comparativ 8
4.1 Aplicațiile CPU 8
4.1.1 Algoritm 8
4.2 Aplicațiile GPU 10
4.2.1 Algoritm 10
4.2 Aplicația OpenGL 15
4.3 Aplicația Metal 16
4.4 OpenGL vs Metal 17
CAPITOLUL vI. cONCLUZII 20
Bibliografie 21
CAPITOLUL I. Introducere
Tema aleasă pentru lucrarea de diplomă reprezintă o [anonimizat] (iPhone, iPad, iPod). Pentru a realiza comparația am creat câte două aplicații pentru fiecare API disponibil pe dispozitivele iOS: OpenGL și Metal. Aplicațiile prezintă o simulare de lichid/[anonimizat]-Stokes.
Am ales această tema datorită familiarității mele cu platforma mobilă iOS, o [anonimizat], cât și datorită interesului meu față de dezvoltarea aplicațiilor grafice.
[anonimizat], [anonimizat].
Despre fiecare tehnologie în parte voi vorbi de-a [anonimizat], cât și prin exemple simple și sugestive.
Capitolul II prezintă pe scurt tehnologiile ce stau la baza proiectării aplicațiilor iOS. Acest capitol poate avea atât rolul de a familiariza cititorul cu tehnologiile utilizate cât și de a fi o [anonimizat]ele prezentate.
Capitolul III detaliază ecuația Navier-Stokes pentru lichide incompresibile utilizată în dezvoltarea simulărilor.
Capitolul VI prezintă realizarea efectivă a aplicațiilor, cât și compararea de performanță a celor doua API-uri utilizate.
CAPITOLUL II. TEHNOLOGII UTILIZATE
2.1 Sistemul de operare iOS
Platforma iOS
2.1.1 Arhitectura iOS
Arhitectura sistemului de operare iOS este similară cu cea a diferitelor sisteme de operare existente pe alte platforme mobile sau pe PC-uri. Aceasta este împărțită pe diferite straturi, asemănător unei stive, fiecare strat oferind anumite funcționalități cât și un nivel de abstractizare asupra straturilor mai joase. [1]
Figura 2.1.1 ilustrează la un nivel înalt principalele straturi ale sistemului de operare. Straturile superioare oferă diferite abstractizări pentru funcționalitățile de baza cum ar fi interceptarea de gesturi pe ecranul dispozitivului, sau funcționalitate de redare a unui video, pe când straturile inferioare oferă acces direct la funcționalitățile hardware cum ar fi geolocație, comunicare cu dispozitive Bluetooth, sau acces la primitivele sistemului de operare cum ar fi semafoarele sau funcții de sistem pentru redare audio folosind PCM (Pulse Code Modulation) [2]. De asemenea straturile inferioare oferă toate funcționalitățile de la nivelurile superioare, dar fără abstractizarea acestora.
Un exemplu de abstractizare în cazul funcționalităților pentru procesare grafică îl putem întalni la framework-urile SpriteKit și Metal. SpriteKit oferă un API simplu de utilizat specializat pentru dezvoltarea jocurilor care se bazează pe funcționalitatea oferită de Metal, în schimb Metal este un API la nivel mai jos care permite atât dezvoltarea de jocuri cât și a altor aplicații ce utilizează procesorul grafic.
2.1.2 Aplicații iOS
În acest capitol
2.2 Swift
În acest capitol
2.3 OpenGL
În acest capitol
2.4 Metal
În acest capitol
CAPITOLUL III. Dinamica Fluidelor
3. Dinamica computerizată a fluidelor
3.1 Ecuația Navier-Stokes
CAPITOLUL VI. Studiu comparativ
În acest capitol voi prezenta pe scurt părțile esențiale ale dezvoltării aplicațiilor cât și comparația din punct de vedere al performanței acestora.
Am creat câte două aplicații pentru fiecare API: una care sa utilizeze mai mult procesorul și una care își execută majoritatea funcționalității pe unitatea grafică.
4.1 Aplicațiile CPU
Primul set de aplicații utilizează în principal procesorul. Acestea au ca scop desenarea unui număr mare de obiecte simple pe ecran și aplicarea unor rotații pentru fiecare obiect desenat, astfel încât obiectele să se rotească în jurul axei Y proprii.
Pentru realizarea aplicațiilor s-au utilizat capabilitățile specifice fiecărui API pentru a asigura o performanță ridicată. Pentru OpenGL s-au utilizat Vertex Array Objects și Vertex Buffer Objects pentru memorarea pozițiilor și a stării pipeline-ului grafic.
În cazul API-ului Metal, am utilizat capabilitățile acestuia de codificare a comenzilor grafice pe mai multe fire de execuție.
4.1.1 Algoritm
Algoritmul în cazul ambelor aplicații este foarte simplu. La inițializarea aplicațiilor se creează un număr de obiecte 3D, în cazul acesta cuburi, și se asignează o poziție în coordonatele spațiului cât și o culoare pentru a putea distinge diferitele obiecte.
În momentul în care obiectele urmează să fie desenate pe ecran, se generează o matrice de rotație cât si o matrice de proiecție care sunt apoi trimise către unitatea grafică. În cadrul programelor grafice se execută înmulțirea matricelor pentru determinarea poziției și rotației finale ale obiectului cât și aplicarea culorii. Toate valorile pentru poziția, rotația și culoarea obiectelor sunt generate aleatoriu. Un exemplu al acestor aplicații poate fi văzut în figura 4.1.1.1.
4.2 Aplicațiile GPU
Cel de-al doilea set de aplicații are ca scop utilizarea intensă a unității grafice, minimizând drastic nevoia de a executa instrucțiuni pe procesor. Ambele aplicații folosesc același algoritm pentru a produce efectul grafic dorit.
Printre cele mai intense operații grafice se numără simulările, astfel pentru acest set de aplicații am ales să creez o simulare de lichid și fum.
4.2.1 Algoritm
Pornind de la ecuația Navier-Stokes pentru fluide incompresibile, putem crea o serie de metode care să genereze o simulare cât mai realistă din punct de vedere fizic.
Deoarece operațiile sunt executate pe procesorul grafic, toată funcționalitatea va fi implementată folosind limbajul de programare al procesorului grafic specific fiecărui API, GLSL pentru OpenGL si Metal Shading Language pentru Metal. Toate exemplele prezentate în continuare vor fi specifice API-ului Metal.
În cadrul programelor ce rulează pe procesorul grafic nu există spații de stocare a informației între execuții, cum ar fi: variabile globale, vectori sau obiecte, dar pentru persistarea informațiilor pot fi utilizate texturile. Toate texturile utilizate sunt bidimensionale și folosesc formatul RG, iar fiecare texel din textură este de tipul Float16. Această configurare permite stocarea de informație în intervalul [-1, 1] pentru fiecare texel din textura. Astfel se poate salva informația cu referire la direcția în care se deplasează o particulă în canalele RG sub forma unui vector. Din motive de performanță, nu au fost utilizate texturi în formatul RGBA deoarece canalele BA ar fi rămas neutilizate în majoritatea programelor, ar fi mărit cantitatea de memorie rezervată și ar fi avut un impact negativ asupra vitezei de scriere în textură.
O altă problemă întâmpinată este faptul ca nu se pot executa operații de citire și scriere in același timp pe aceeași textură. Asta înseamnă că pentru fiecare suprafață utilizată vor exista câte două texturi, care după fiecare operație de scriere vor fi interschimbate.
Pentru realizarea simulării se folosesc atât câmpuri scalare, cum ar fi în cazul presiunii sau a densității, cât și câmpuri vectoriale, ca de exemplu viteza.
Primul pas cât și cel mai simplu este aplicarea de forțe externe. Dacă eliminam toate celălalte shadere, shaderul de aplicare a forțelor externe ar acționa ca un program de desenare. Acesta pas defapt setează valorile de direcție în textura de viteză, iar pentru textura de densitate, acest pas setează culoarea, “cerneala” care urmează sa fie afectată de câmpul de viteză. Modul de funcționare al acestui pas îl putem vizualiza în figura 4.2.1.1.
Următorul pas este cel de mișcare a cantităților, cum ar fi câmpul de viteză sau densitatea. Pentru a realiza acest pas trebuie ținut cont de limitările procesorului grafic. Un procesor grafic efectuează multe instrucțiuni simple simultan, astfel nu putem merge pe varianta intuitivă de a muta o particulă din poziția curentă în altă poziție determinată, deoarece poziția în care o mutăm e posibil să fie citită de o altă instanță a programului în același timp. Această implementare ar produce efecte neașteptate și nedorite. Modul de rezolvare al problemei este defapt să calculăm poziția precedentă pentru texelul curent și să copiem valoarea interpolată.
Cel mai costisitor pas este cel de calculare a presiunii. Acest pas a fost separat în trei programe diferite: calcularea divergenței, scăderea gradientului și calcularea difuziei. Primele doua programe sunt executate o singură dată fără să utilizeze multe resurse.
Programul pentru calcularea difuziei în schimb, se bazează pe o metodă iterativă de relaxare pentru aproximarea unor ecuații Poisson, numită tehnica iterativă Jacobi, ceea ce înseamnă că acest program trebuie executat de un număr de ori pană converge la o soluție. Un număr ideal de iterații este intre 20 și 80.
După toți acești pași simularea de lichid este completă și poate fi vizualizată. Figura 4.2.1.2 ilustrează câmpul de densitate cât și cel de viteză în cadrul unor simulări. Un lucru important de observat în figură sunt vorticele, acele efecte de rotație, care se obțin datorită iterațiilor Jacobi. Acest efect este bun pentru un lichid însă în cazul unui gaz, efectul ar trebui să fie mai pronunțat.
Pentru a obține efectul dorit am adăugat un pas in plus, alcătuit din două metode. Prima metodă calculează câmpul de vorticitate pe baza câmpului de viteză existent, iar cea de-a doua metodă aplică efectul asupra câmpului de viteză. Figurile 4.2.1.3 și 4.2.1.4 ilustrează texturile pentru densitate, presiune, viteză cât si cea pentru vorticitate după aplicarea acestui pas adițional.
4.2 Aplicația OpenGL
Aplicația OpenGL a fost dezvoltată astfel încât să utilizeze cele mai recente funcționalități ale API-ului. Majoritatea funcțiilor folosite au fost încapsulate in clase si structuri ajutatoare. Un astfel de exemplu este clasa “Surface” care încapsulează funcționalitatea de creare a unor texturi pe baza dimensiunilor specificate cât și o metodă de a goli conținutul unor texturi.
Pentru fiecare shader am creat câte o metodă care e responsabilă pentru configurarea variabilelor necesare rulării shader-ului cât și pentru stabilirea destinației de desenare conform tehnicii prezentate în subcapitolul anterior.
4.3 Aplicația Metal
În acest capitol voi prezenta pe scurt părțile esentiale ale dezvoltării aplicațiilor cât si comparația din punct de vedere al performanței acestora.
4.4 OpenGL vs Metal
Toate testele au fost efectuate pe urmatoarele dispozitive:
iPhone 7 – procesor Apple A10 Fusion 2.34 GHz quad-core, procesor grafic PowerVR Series7XT Plus (six-core graphics), 2GB RAM, rezoluție 750×1334 pixeli, iOS 10.3.1
iPhone 5S – procesor Apple A7 1.3Ghz dual-core, procesor grafic PowerVR G6430 (quad-core graphics), 1GB RAM, rezoluție 640×1136 pixels, iOS 10.3.1
iPad Air 2 – procesor Apple A8X 1.5Ghz triple-core, procesor grafic PowerVR GXA6850 (octa-core graphics), 1GB RAM, rezoluție 1536×2048 pixels, iOS 10.3.1
CAPITOLUL vI. cONCLUZII
Pe parcursul lucrării au fost prezentate cele mai importante elemente necesare dezvoltării unei simulări de lichid sau fum pe platforma iOS folosind OpenGL și Metal. De asemenea a fost prezentată și o comparație a celor doua implementări aratând avantajele cât și dezavantajele acestora.
În majoritatea situațiilor Metal a avut o performanță mai bună, însă această performanță a necesitat multă optimizare din partea programatorului. Diferența de performanță pentru operații pur grafice este neglijabilă față de OpenGL. În cazul prezentat, OpenGL a avut o performanță aproape egală cu Metal, fară ca programatorul sa petreacă mult timp la optimizarea codului.
Pe viitor, aplicațiile pot fi îmbunătățite prin ajustarea dimensiunilor texturilor astfel încât texturile să aibe dimensiunile egale cu jumatate din dimensiunile ecranului. Rezultatul ar fi o performanță mai bună însă această mișcare ar afecta calitatea imaginii finale. Pentru a rezolva problema calității s-ar putea adăuga un pas care să execute un blur gaussian pe imagine pentru a asigura o tranziție mai bună între pixeli.
De asemenea poate fi implementată logica pentru a adauga obiecte fixe sau mobile care să interacționeze cu lichidul, sau s-ar putea trece de la 2D la 3D.
Bibliografie
[1] About the iOS Technologies, https://developer.apple.com/library/content/documentation/Miscellaneous/Conceptual/iPhoneOSTechOverview/Introduction/Introduction.html, Consultat la 10.07.2017
[2]What is Core Audio, https://developer.apple.com/library/content/documentation/MusicAudio/Conceptual/CoreAudioOverview/WhatisCoreAudio/WhatisCoreAudio.html, Consultat la 10.07.2017
[] Fast fluid dynamics simulation on the GPU, http://developer.download.nvidia.com/books/HTML/gpugems/gpugems_ch38.html, Consultat la 10.07.2017
[] Navier-Stokes equations, https://en.wikipedia.org/wiki/Navier–Stokes_equations, Consultat la 20.07.2017
[] Lengyel E., (2012): Mathematics for 3D Game Programming and Computer Graphics Third Eddition, Cengage Learning, Boston, pp. 1-9.
DECLARAȚIE DE AUTENTICITATE
A
LUCRĂRII DE FINALIZARE A STUDIILOR
Titlul lucrării: PROIECTAREA ȘI REALIZAREA UNEI APLICAȚII ANDROID NATIVE.
Autorul lucrării: PIȚIȘ ANDREI-SERGIU
Lucrarea de finalizare a studiilor este elaborată în vederea susținerii examenului de finalizare a studiilor organizat de către Facultatea de Inginerie Electrica și Tehnologia Informației din cadrul Universității din Oradea, sesiunea iulie 2014 a anului universitar 2013/2014.
Prin prezenta, subsemnatul PIȚIȘ ANDREI-SERGIU, 1910623055081, declar pe proprie răspundere că această lucrare a fost scrisă de către mine, fără nici un ajutor neautorizat și că nici o parte a lucrării nu conține aplicații sau studii de caz publicate de alți autori.
Declar, de asemenea, că în lucrare nu există idei, tabele, grafice, hârți sau alte surse folosite fără respectarea legii române și a convențiilor internaționale privind drepturile de autor.
Oradea,
Data Semnătura
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: TEMA – PROIECTAREA ȘI REALIZAREA UNEI APLICAȚII ANDROID NATIVE [302907] (ID: 302907)
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.
