Aplikacija na kraju prikazuje kocku kojoj se rotira i kojoj je svaki vrh druga boja, te pomoću menu-a se može pogledati drugi primjer vjetromjera. Proći ću samo kroz najvažnije stvari koje sam radio u projektu, te kroz one koje su mi stvarali probleme prilikom izrade i za koje i nema previše primjera na internetu.
Kreiranje aplikacije u IDE-u, u ovome slučaju se koristi Eclipse:
- New Project -> Android -> Android Application Project te se popune prazna polja. Pod minimal sdk se stavi 2.3.3. jer je to prva verzija Androida koja potpuno podržava OpenGL ES 2.0 -> npr. kao na slici
- Na sve ostalo se može ostati kako je predložene i kliktati Next do kraja
Dvije su fundamentalne klase u Android framework-u koja nam dopuštaju kreiranje i manipuliranje grafikom pomoću OpenGL ES API-a:
- GlSurfaceView: je View klasa u kojoj možemo crtati i manipulirati objektima koristeći OpenGL API pozive. Pomoću ove klase konfiguriramo i renderiramo display i slično. Koristi se tako da se napravi instanca ove klase i poveže sa Renderer instancom.
- GlSurfaceView.Renderer: sučelje koje definira metode potrebne za crtanje grafike u GlSurfaceView. Potrebno je implementirati ovo sučelje u odvojenoj klasi i onda ju povezati sa GlSurfaceView pomoću metode GlSurfaceView.setRenderer()
. Tri su metode koje je potrebno implementirati:
-> onSurfaceCreated(): poziva se jednom kada se kreira GLSurfaceView.
-> onDrawFrame(): poziva se prilikom svakog iscrtavanja GLSurfaceView.
-> onSurfaceChanged(): poziva se kada se promijeni geometrija GLSurfaceView-a, kao što su promjene u veličini GLSurfaceViewa ili promjena orijentacije ekrana uređaja.
Dodavanje u AndroidManifest.xml koju verziju OpenGL ES API-a će podržavati aplikacija. Pa će tako za ES 2.0 biti potrebno dodati sljedeće:
Crtanje određenog objekta zahtijeva iznenađujuće puno koda, jer se mora pružiti jako puno detalja za grafičko renderiranje cjevovoda. Moramo definirati sljedeće:
- Vertex Shader: kod za renderiranje vrhova objekta
- Fragment Shader: kod za renderiranje boje i tekstura za objekt
- Program: objekt koji sadrži shader-e koji se žele koristiti za crtanje objekata
U nastavku slijedi primjer osnovnih shader-a:
Kreiranje objekata i nije takom jednostavno kako se čini, ali proći ću kroz neke glavne dijelove. Svaki vrh trebamo definirati u jednom polju koje ćemo naknadno predati programu kako bi ih mogao nacrtati. Za neke objekte za koje znamo koliko nam treba vrhova to nije problem, jer odmah znamo koliko nam veliko polje treba biti. Dok za neke objekte kao što je valjak, ipak ne znamo koliko će nam vrhova trebati da ga nacrtamo. U nastavku ću pokazati kako sam punio vrhove za bazu valjka.


Kako OpenGL ES 2.0 koristi shader-e za renderiranje objekata, to se može iskoristiti kako bi svakome vrhu dodijelili posebnu boju koje interpolira sa susjednom bojom. I to radimo tako da svaku boju dodamo također u jedno polje koje kasnije predajemo programu kako bi znao što iscrtati. Na gotovo isti nači kao što zna di su pozicije vrhova. Ali krenimo redom. Prve preinake su na vertex shader-u.

Još jedna vrlo važna stvar je ostala ne pojašnjena, a to je projekcija objekta. Točnije matrice projekcije i transformacije koje utječu na objekt. Kao što ste već mogli vidjeti u vertex shaer-u je definirana jedna martica:
Bilo bi dobro navesti koje je stvari (dobro) potrebno imati u onDrawFrame metodi u Rendereru. A to su pozivi metoda glClear i postavljanje pozcije kamere sa setLookAtM: