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

Similar Posts