SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA
DIPLOMSKI RAD br. 2950
Integriranje virtualnih likova u sustav proširene stvarnosti
Vladimir Bošnjak
Zagreb, lipanj 2008.
Mentor rada: Prof. dr. sc. Igor S. Pandžić
Sadržaj Uvod........................................................................................................................................... 1
1. Sustav za proširenu stvarnost ............................................................................................. 2
1.1. Proširena stvarnost ..................................................................................................... 2
1.1.1. Miješanje slike.................................................................................................... 2
1.1.2. Poravnavanje ...................................................................................................... 4
1.2. Video miješanje.......................................................................................................... 4
1.2.1. Stereoskopska slika ............................................................................................ 5
1.3. Optičko slijeđenje....................................................................................................... 7
1.3.1. Princip rada optičkog slijeđenja korišenjem alata ARToolkit ........................... 7
1.4. AR sustav u laboratoriju............................................................................................. 9
1.4.1. Zaslon montiran na glavu (HMD)...................................................................... 9
1.4.2. Kamere ............................................................................................................. 11
1.4.3. Montiranje kamera na HMD ............................................................................ 12
1.4.4. Razvojni alat ARToolkit .................................................................................. 14
1.4.5. OpenGL............................................................................................................ 18
1.4.6. Razvoj aplikacije .............................................................................................. 19
2. Uvođenje virtualnih ljudi ................................................................................................. 25
2.1. Virtualni ljudi ........................................................................................................... 25
2.2. Visage|SDK.............................................................................................................. 26
2.3. OpenGL.................................................................................................................... 27
2.4. Realizacija ................................................................................................................ 29
2.4.1. OpenGL............................................................................................................ 29
2.4.2. Visage|SDK...................................................................................................... 30
2.4.3. Razvoj aplikacije .............................................................................................. 34
3. Proširenje sustava s više markera..................................................................................... 38
3.1. Korišetnje više markera............................................................................................ 38
3.2. Koplanarni markeri .................................................................................................. 39
3.3. Proširivanje koordinatnog sustava ........................................................................... 40
3.4. Realizacija ................................................................................................................ 41
Zaključak.................................................................................................................................. 45
Literatura .................................................................................................................................. 46
Skraćenice ................................................................................................................................ 47
Popis stranih izraza................................................................................................................... 48
Dodatak .................................................................................................................................... 50
1
Uvod
Proširena stvarnost (engl. Augmented Reality,skraćeno AR) je okruženje koje u sebi sadrži
virtualne elemente i elemente iz stvarnog svijeta. Da bi si to bolje predočili, zamislimo da
korisnik uz pomoć posebnih naočala može vidjeti stvarni prostor oko sebe, ali i računarski
generirane slike projicirane na taj prostor. Tri glavne značajke takvog okruženja su: spajanje
stvarnog i virtualnog, interaktivnost u stvarnom vremenu i percepcija tri dimenzije (Azuma,
[1997]).
Zbog nedovoljne razvijenosti tehnologije, proširena stvatnost je dugo vremena bila
zapostavljana. Naime, proširena stvarnost treba puno precizniju opremu od virtualne
stvarnosti. Čak i kod najjednostavnijih primjena uređaji koji se koriste kod virtualne
stvarnosti nisu bili dostatni. Sada, kada su računalna grafika i snaga procesiranja postigli
veliki napredak, polako i oprezno se razvijaju sustavi proširene stvarnosti. Uređaji visoke
preciznosti i kvalitete su postali pristupačni cijenom tako da su se počeli pojavljivati
entuzijasti koji daju svoj doprinos tom području. Takav je i ovaj sustav, koji omogućava
prikaz i animaciju virtualnih ljudi kakav je prije bio nevjerojatan.
Savršena proširena stvarnost je toliko vjerodostojna, da korisnik ne može raspoznati koji
dijelovi okoline jesu, a koji nisu stvarni. Takva razina realističnosti još nije postignuta.
Unatoč tome, takvi sustavi već imaju veliki broj primjena. Na (Sl. 0.1 Primjeri korišetnja
proširene stvarnosti. Svi su još u visoko eksperimentalnoj fazi) vidimo nekoliko primjera
korištenja proširene stvarnosti, za sada još uvijek u nekomercijalne svrhe.
Sl. 0.1 Primjeri korišetnja proširene stvarnosti. Svi su još u visoko eksperimentalnoj fazi
2
1. Sustav za proširenu stvarnost
1.1. Proširena stvarnost
Proširena stvarnost je dakle miješanje elemenata stvarnog i virtualnog svijeta. Cilj joj je da
korisniku pruži što jednostavniji i intuitivan prikaz virtualnih podataka u interakciji sa
stvarnim. Tri osnovna problema kod AR su: miješanje slike, poravnavanje i prikupljanje
podataka. Za njihovo rješavanje potrebna je zahtjevna tehnologija koja je danas dostupna.
Miješanje slike (engl. mixing) je prikazivanje stvarne i virtualne slike korisniku. Stvarna i
virtualna slika se prikazuju istovremeno na nekom tipu zaslona.
Poravnavanje (engl. registration) je postupak kojim dobivamo da se virtualni predmeti u
prostoru točno poravnavaju sa stvarnima. Da bi došlo do preklapanja virtualnih i stvarnih
predmeta potrebno je znati točno položaj i orijentaciju korisnika i svih bitnih elemenata scene.
Slijeđenje (engl. tracking) je skup tehnika kojima se doznaje pozicija i orijentacija korisnika i
stvarnih elemenata. Potrebna je pri poravnavanju virtualnih predmeta i pravilnom iscrtavanju
scene.
1.1.1. Miješanje slike
Glavni ulazni i izlazni uređaji AR sustava su vizualni. Zasnivaju na principu miješanja
virtualne i stvarne slike. Tako razlikujemo optičko, video i projekciono mješanje. Prilikom
optičkog i video miješanja korisnik na glavi nosi zaslon za glavu (engl. Head Mount Display,
kratica HMD). Optičko miješanje koristi polu prozirna ogledala ispred korisnika, po jedno za
svako oko, na koja se projicira slika s monitora, tzv. Optičku miješalicu (engl. Optical
combiner). Kod video miješanja se ne koristi optička miješalica, već se koriste kamere koje
snimaju stvarni svijet, a slika se miješa u računalu i šalje korisniku u svako oko na HMD. Oba
postupka imaju mane i karakteristike, koje se odnose na složenost, osvjetljenje,
vjerodostojnost itd. (Pandžić [2004]).
3
Tablica 1.1
OPTIČKO MIJEŠANJE VIDEO MIJEŠANJE
SLOŽENOST Jednostavnije Složenije
VIDLJIVOST STVARNE OKOLINE Izravna, malo zatamnjena Smanjena rezolucija i vidni
kut
SIGURNOST OK, stvarna okolina izravno i uvijek vidljiva
Pomak položaja, nema slike u slučaju kvara
MIJEŠANJE STVARNOG I VIRTULANOG
Virtualni predmeti ne mogu potpuno prekriti stvarne Potpuna fleksibilnost
VREMENSKO USKLAĐIVANJE Virtualna slika kasni Moguće usklađivanje
zadrškom stvarne slike
USKLAĐIVANJE SVJETLINE
Nije moguće Moguće
MOGUĆA ANALIZA SLIKE
Ne (ponekad se za to montiraju kamere) Da
Kod projekcionih tipova koriste se posebno konstruirani zasloni ili projektori. Primjer jednog
takvog uređaja sa smanjenom mogučnošću interakcije je Microsoft Surface (Sl. 1.1 Microsoft
Surface).
Sl. 1.1 Microsoft Surface
4
1.1.2. Poravnavanje
Poravnavanju virtualnih i stvarnih predmeta potrebno je posvetiti veliku pažnju. Čovjek može
otkriti virtualne predmete ako se pojave i male nepravilnosti . Da bi se postiglo poravnavanje
virtualna scena se konstruira s koordinatnim sustavom koji odgovara koordinatnom sustavu
stvarnog svijeta. To omogućava da se položaji stvarnih predmeta prebacuju u virtualnu scenu
i omogućuju da se virtualni predmeti postave u odnosu na njih. Za to je potreban položaj svih
stvarnih predmeta u sceni, položaj kamere (oka promatrača) u stvarnom svijetu i položaj
promatrača i drugih elemenata u virtualnom svijetu. Na taj način možemo računalno simulirati
interakciju stvarnih i virtualnih likova i dobivamo da se slike stvarne i virtualne scene točno
poklapaju.
Pri poravnavanju je potrebna velika preciznost, jer ljudsko oko detektira pomake manje od
jedne kutne minute. Stoga će i najmanja nepreciznost biti primijećena (Pandžić [2004]).
Podaci koji su potrebni za poravnavanje u AR sustavima doivaju se slijeđenjem. Slijeđenje
(engl. tracking) je postupak dobivanja položaja i orijentacije predmeta i promatrača u
stvarnom vremenu. Slijeđenje u AR sustavima rješava se na više načina. Izvedbe sustava za
slijeđenje u AR se temelje na sustavima prvobitno izvedenima za virtualnu stvarnost (engl.
Virtual Reality, kratica VR), no kod njih su manji zahtjevi za preciznost. Zbog toga postoje
različite varijante slijeđenja kod AR sustava dijelom preuzetih iz sustava za virtualnu
stvarnost, adaptiranih za AR. Neki od njih su magnetsko, ultrazvučno i mehaničko, optičko,
GPS te hibridno slijeđenje.
1.2. Video miješanje
Korisnik kod principa video miješanja koristi klasični, zatvoreni uređaj za prikaz nošen na
glavi (HMD). Slika stvarnog svijeta dolazi iz para kamera nošenih na glavi, a virtualna slika
se generira na računalu. Korisnik vidi sliku sa zaslona koja dolazi obrađena iz računala u
kojoj je pomiješana stvarna i virtualna slika. Kako su HMD i kamere spojene na računalo
kabelom, korisniku je smanjena pokretljivost. Računalo na temelju položaja izračunatog od
položaja slijednika (vizualnog, elektromagnetskog, akustičnog i sl.) generira sliku iz
odgovarajuće perspektive. Virtualna i stvarna slika kombiniraju se u video miješalici (engl.
video compositor), te tako pomiješanu sliku korisnik vidi preko para stereo zaslona. Video
5
mješalica je redovito računalo koje ima potrebnu snagu za obradu podataka koji su potrebni
za prikaz. Važno je primijetiti da u video miješalici i stvarna i virtualna slika mogu stići u
digitalnom obliku, te postoji potpuna sloboda obrade signala, što se može iskoristiti za razne
efekte. Dijagram rada video mješanja možemo vidjeti na (Sl. 1.2). Na primjer, u stvarnu video
sliku može se unijeti kašnjenje i time je sinkronizirati s virtualnom slikom (kod koje se
kašnjenje ne može izbjeći iz tehničkih razloga). Važan efekt koji se može dobiti je i potpuno
prekrivanje stvarnih predmeta virtualnima. Najbitniji dio za ovaj rad je što se stvarnu sliku
obradom i analizom može korisno upotrijebiti pri slijeđenju položaja. Ove funkcije
nedostupne su kod optičkog miješanja, te je to bio jedan od presudnih razloga za konstuiranje
modela proširene stvarnosti sa video miješanjem (Ozan Cakmakci [2006]).
Sl. 1.2 Dijagram metode video miješanja u AR
Nedostatak ovog principa mješanja je to što u slučaju kvara ili isključivanja sustava korisnik
gubi sliku stvarnog svijeta oko sebe, što može biti sigurnosni problem. Korisnik koji tako
naglo izgubi vid mogao bi se ozlijediti udarivši u neki predmet. Drugi nedostatak je to što je
fizički nemoguće postaviti kamere na točno isto mjesto gdje su i korisnikove oči, što znači da
korisnik vidi svijet iz drugačije perspektive nego što je navikao. Sve je pomaknuto, što može
biti i sigurnosni i praktičan problem (Pandžić [2004]).
1.2.1. Stereoskopska slika
Za što vjerniji prikaz slike u AR sustavu potrebna nam je i stereoskopska slika. Stereoskopska
slika je jedno od najvažnijih svojstava ljudskog oka. Ona nam omogućava trodimenzionalni
doživljaj prostora.
6
Sl. 1.3 Stereoskopski pogled
Na (Sl. 1.3) je jednostavni prikaz stereoskopskog vida. S lijeve strane su oči (očne jabučice -
pupile), koje su razmaknute za očnu distancu (engl. Interpupilary distance, IPD). Desno je
jednostavan prikaz dva trodimenzionalna objekta (valjci). Zbog razmaka među očima predmet
promatramo s dvije različite točke, što nam daje informaciju o relativnom razmaku među 3D
objektima i njihovoj udaljenosti. Nakon što dobijemo dvije slike, po jedno za svako oko, te
dvije slike mozak procesira i spaja u jednu, koja nam daje trodimenzionalan prikaz prostora.
Za dobivanje stereoskopske slike koriste se dvije vrste HMD-a s kamerama. Jedan je
biokularni (engl. biocular), a drugi binokularni (engl. binocular). U biokularnom sustavu se
prikazuje potpuno ista slika u oba ekrana pred očima. Takav način ne prikazuje pravu
stereoskopsku sliku, jer u stvarnosti su slike svakog oka pomaknute. Kod binokularnog,
prikazuju se dvije različite slike, a cilj je imitirati distancu među očima i različit kut gledanja
dva oka. AR sustav konstruiran za ovaj rad je binokularan, tj. postoje dvije razmaknute
kamere (Ozan Cakmakci [2006], Wikipedia [2008]).
Kod VST-HMD-a koriste se dvije vrste stereoskopskih slika. Prvo je stereoskopska slika
stvarnog svijeta, dobivena pomoću dvije kamere, a druga stereoskopska slika virtualnih
predmeta u sceni. Nakon što su dobivene stereoskopske slike virtualnog i stvarnog, te dvije
slike se miješaju i prikazuju na ekranima HMD-a. Lijeva kamera (engl. left camera) snima
sliku koju vidi lijevo oko, a desna kamera (engl. right camera) sliku koju vidi desno oko.
Nakon što se slika dobivena kamerama obradi sliku sa lijeve kamere se šalje u lijevi ekran, a
sa desne u desni ekran HMD-a. Pri tome se uzima dio slike ovisno o vidnom polju (FOV) i
željenom pogledu (uvećana ili umanjena slika) kako je prikazano na (Sl. 1.4)
7
Sl. 1.4 Slike dobivene kamerama za lijevo i desno oko. Unutar osvjetljenog bijelog kvadrata je vidno
polje svakog oka
Za što bolji prikaz proširene stvarnosti VST-HMD mora što vjerodostojnije imitirati ljudski
vid, tj. treba se postići stereoskopska slika što sličnija prirodnom čovjekovom vidu.
Video miješanje je nešto složenije po konceptu, ali današnji sustavi koji su temeljeni na video
miješanju su postali puno precizniji i kvalitetniji, a dobivena slika je vjerodostojnija nego kod
optičkog miješanja. Zaslon za glavu temeljen na video miješanju (engl. Video see trough
HMD, kratica VST-HMD) je izveden na zavodu. Na fakultetu se već prije za projekte i
diplomske radove koristio Visette 2 HMD (Stereo3d [2008]). Nakon razmatranja preporuka i
proučavanja specifikacija, nabavljene su i dvije usb 2.0 kamere visoke rezolucije pogodne za
ovakav sustav (Logitech Qickcam for Notebooks PRO) (TechGage [2008], Everything USB
[2008]).
1.3. Optičko slijeđenje
Optičko slijeđenje radi na principu detektiranja posebnih markera u slici koje računalo prima
iz stvarnog svijeta. Markeri mogu biti različitih oblika i boja, mogu čak biti i nevidljivi oku -
infra-crveni (u tom slučaju se koriste posebne kamere za njihovu detekciju). Slika koja se
dobije iz kamere se u računalu obrađuje i pretražuje za markere. Pomoću dobivene pozicije
markera, računalo dobija podatke o stvarnom svijetu, npr. lokaciji predmeta, promatrača i sl.
1.3.1. Princip rada optičkog slijeđenja korišenjem alata ARToolkit
Za objašnjenje rada sustava optičkog slijeđenja najbolje je opisati takav jedan sustav. Za rad
sa ARToolkit-om potrebni su kamera, marker i kvalitetno računalo s dobrom grafičkom
karticom. Markeri koji se postavljaju u prostor su ispisane slike kvadrata unutar kojeg je
8
ucrtan neki znak za raspoznavanje. (HIT laboratories [2008]). Primjeri takvih markera su na
(Sl. 1.5).
Sl. 1.5 Primjeri raznih markera
Proces rada aplikacije koja koristi napredne funkcije alata ARToolkit je slijedeći:
1. U početku kameru hvata sliku prostora i šalje sliku računalu kao struju bitova (engl. video
stream from camera).
2. Program na računalu pretražuje svaku primljenu sliku iz video stream-a za crni okvir koji
označava marker (engl. search for markers)
3. Program računa 3D poziciju i orijentaciju markera u odnosu na kameru i sprema je u
transformacijsku matricu (engl. find marker 3D position and orientation).
4. Program identificira marker tako da gleda simbol unutar crnog okvira, uspoređujući ga sa
predlošcima spremljenim u memoriji (engl. Identify markers)
5. Koristeći transformacijsku matricu za podudaranje 3D virtualnog objekta sa markerom
virtualni lik se pozicionira na marker (engl. position and orient objects)
6. Model se iscrtava iznad slike stvarnog svijeta uhvaćene kamerom, tako da se čini
zalijepljen za marker (engl. render 3D object in video frame)
7. Na kraju program šalje sliku sa virtualnim 3D modelom na ekran korisnika (engl. video
stream to the users HMD)
Proces koji obavlja program se može lakše shvatiti iz dijagrama na (Sl. 1.6).
9
Sl. 1.6 Osnovni princip rada programa koji koriste ARToolkit
Prilikom izrade AR sustava odabrano je optičko slijeđenje kao najbolje rješenje. Po cijeni je
ono najpovoljnije – potreban je samo marker, računalo obavlja ostatak posla. Danas se većina
eksperimentalnih sustava za bazira na takvom slijeđenju, ne samo zbog cijene, već i zbog
visoke preciznosti koja se postiže. Rezultat toga je uz bolje poravnavanje slike i veća
kompatibilnost sa sličnim sustavima u upotrebi.
Razmatrana je i buduća nadogradnja sustava. Ako se markeri fiksiraju na unaprijed određene
pozicije, koordinatni sustav se može proširiti da pokriva cijelu prostoriju. Za to je potrebna
povećana preciznost markera. Preciznost se može povećati (smatra se da je kalibracija
optimalno provedena) povećanjem samih markera, stavljanjem sustava markera i sl.
Jednostavnija verzija dobivanja pozicije pomoću više markera je implementirana. Razne
mogućnosti se mogu zamisliti i nadograditi na taj sustav.
Sa proširenim koordinatnim sustavom dobila bi se mogućnost poravnavanja u kojemu se
stvarne i virtualne scene točno poklapaju. U takvom sustavu mogu se modelirati svi predmeti
koji se nalaze u prostoriji i napraviti njihovo preklapanje sa stvarnima. To omogućuje bolji
prikaz proširene stvarnosti, jer tada virtualni likovi mogu biti u potpunoj interakciji sa
stvarnim predmetima u sceni.
10
1.4. AR sustav u laboratoriju
1.4.1. Zaslon montiran na glavu (HMD)
Zaslon montirani na glavu (engl. head mounted display, kratica HMD) je vizualna izlazna
jedinica, koja ima poseban zaslon ispred svakog oka. Često se koristi pri simuliranju virtualne
stvarnosti.
Najvažnija svojstva HMD-a su veličina, težina, udobnost, vidni kut, tj. vidno polje (engl.
Field Of View, FOV) i rezolucija. Vidni kut se može proširiti upotrebom odgovarajuće optike
tako da se rezolucija ne promjeni. U tom slučaju postoji problem jer se ista rezolucija, tj. isti
broj točaka, rasteže na veći prostor. Jedna točka se povećava i nastaje veća zrnatost sa
grubljom slikom.
Cilj prilikom odabira HMD-a je da bude što manji, lakši, udobniji HMD s podesivim vidnim
kutom i velikom rezolucijom. Ti kriteriji su bitni prilikom odabira HMD za bilo koju
namjenu, ali su kod ove još posebno istaknuti.
Kod većine HMD-a postoji problem sa dugotrajnim korištenjem. Kod normalnog vida oči se
po potrebi fokusiraju na predmete različite udaljenosti. Kod korišenja HMD-a fokusiraju se
uvijek na istu udaljenost (udaljenost zaslona) neovisno o tome koliko mi percipiramo da je
predmet udaljen. Zasloni su veoma blizu očiju i kod dugotrajnog korišenja oči su fokusirane
na malu udaljenost. Zbog toga dolazi do glavobolje nakon dužeg neprekidnog korištenja. Zato
se rade pauze u korištenju.
Na fakultetu se koristi Visette2 HMD, tvrtke Visette prikazan na (Sl. 1.7). Visette2 je HMD
sa visokom rezolucijom 640x480 (VGA) i sa velikim vidnim kutom (FOV) od 60 stupnjeva.
Visette Pro ima 920000 piksela po zaslonu (engl. pixel per display), podesivi razmak između
očiju 60-70 mm, 2 nezavisna kanala za koja ne treba sinkronizacija (stereo), VGA, Composite
NTSC ili PAL ulaze, ima težinu 840 g. (Stereo3d [2008]).
11
Sl. 1.7 Visette 2 zaslon za montiranje na glavu
Visette2 (Sl. 1.7) je veoma udoban za nošenje na glavi i ima ugrađene slušalice. Testiranja su
pokazala da nema nuspojava ako se Visette2 koristi 20 minuta bez prekida. Proizvođač je
zbog sigurnosti postavio preventivnu zaštitu od nuspojava, koja omogućuje da se HMD sam
isključi nakon dvadeset minuta. Za nastavak rada treba isključiti napajanje i ponovo ga
uključiti.
Sl. 1.8 Adapter za Visette2
Visette2 se na računalo spaja pomoću posebnog adaptera, koji se vidi na (Sl. 1.8). Dva
modificirana SCART kabla priključuju se na adapter. Adapter uz korištenje Visette2
omogućava i korištenje magnetskih slijednika od čijeg se korišenja za sada odustalo zbog
veće pouzdanosti video slijednika. Adapter se spaja na računalo preko 2 vga video ulaza (Sl.
1.9). Zvučni ulaz adaptera se spaja na stereo izlaz zvučne jedinice računala.
12
Sl. 1.9 Spajanje Visette 2 adaptera na izlaze iz grafičke kartice računala
1.4.2. Kamere
Za izgradnju AR sustava potrebne su dvije kamere za simulaciju stereoskopske slike. Kamere
koje se koriste za izgradnju AR sustava moraju imati nekoliko osnovnih osobina. To su male
dimenzije i težina kamere, velika brzina osvježavanja (FPS) i vidni kut kamere (FOV).
Male i lagane kamere su potrebne kako i što manje ograničavale pokretljivost korisnika i
olakšale montiranje. Brzina osvježavanja bi trebala biti minimalno 15 fps, koliko je potrebno
da se zavara ljudsko oko. Vidni kut kamere treba biti što veći - približno jednak vidnom kutu
očiju.
Razvojem kamera za kompjutore, posebno usb kamera, čija je inicijalna svrha bila
komercijalne prirode (video chat, video over IP itd.) postignut je veliki korak i za AR sustave.
Takve kamere danas imaju veliki i podesivi kut gledanja, male su i lagane, a brzina
osvježavanja im je preko 30 fps. Dobre performanse i mogućnost spajanja sa sada već gotovo
opće prihvaćenim usb portom je uvelike olakšalo izgradnju AR sustava.
U svrhu izgradnje VST-HMD sustava koriste se Logitechove QuickCam For Notebooks Pro
kamere koje se vide na (Sl. 1.10).
Sl. 1.10 Logitech QuickCam For Notebook Pro
13
Na slici lijevo vidimo kako izgleda kamera, a na slici desno je njen prikaz pokraj mobitela i
usb memory sticka. Kamere se vrlo praktične, lagane i malene. Spajaju se na računalo USB
2.0 portom, kakvog ima većina stolnih računala i notebooka. Svaka kamera ima mogućnost
snimanja video u rezoluciji do 640x480 piksela, a statičku sliku fotografira do rezolucije
1280x960 piksela. Rezolucija senzora je 1.3 megapixela, a brzina osvježavanja prilikom
snimanja videa je i do 30 fps-a. Driveri kamere dolaze sa Logitech RightLight tehnologijom
koja omogućava kvalitetno snimanje u različitim svjetlosnim uvjetima (TechGage [2008],
Everything USB [2008]).
1.4.3. Montiranje kamera na HMD
Napravljeni VST-HMD rješava problem razmaka očiju, stereoskopsku sliku i paralaksu, no ne
rješava problem razmaka oka i kamere kao ni kompleksnije probleme kao što su pomicanje
očiju ili konvergencija.
Prvo je bilo potrebno odrediti gdje će stajati kamere s obzirom na njihovu veličinu. Pri izboru
kamera pažnja je posvećena da mogu biti montirane s prednje strane HMD-a. Postolje treba
biti napravljeno od laganog ali izdržljivog materijala, koji se lagano oblikuje i dostupan je.
Kao materijal za montiranje kamera primjenjen je tvrdi stiropor zbog svojih povoljnih
karakteristika (težina, laka obrada, lako montiranje, cijena). Takav stiropor bilo je potrebno
oblikovati tako da s jedne strane mogu biti fiksne kamere, a s druge, da slijedi oblik HMD i ne
narušava njegov rad (ne blokira otvore za hlađenje) i da se može jednostavno montirati na
njega. Konačan izgled HMD-a sa montiranim kamerama može se vidjeti na (Sl. 1.11) (Sl.
1.12) (Sl. 1.13).
Sl. 1.11 Bočni prikaz VST-HMD-a
14
Sl. 1.12 Osnovni dijelovi VST-HMD-a (pogled odozgo)
Sl. 1.13 Frontalni pogled na VST-HMD
Kamere imaju vrlo kratke USB kablove, a glavni kabel HMD-a je dugačak oko dva metra. Da
bi mogle biti funkcionalno montirane na HMD, kamere je bilo nužno produžiti spojiti sa dva
produžna USB kabla dužine dva metra. Ti kablovi su zatim spojeni sa glavnim kablom HMD-
a tako da tvore cjelinu zbog funkcionalnosti.
15
1.4.4. Razvojni alat ARToolkit
ARToolkit je software library za programske jezike C i C++. Ona omogućava korisniku da
lakše razvija AR aplikacije.Jedan od najtežih djelova u razvoju AR programa je precizno
izračunavanje točke promatrača u realnom vremenu. To je potrebno da bi se virtualni objekti
mogli što preciznije poravnati sa objektima u stvarnom svijetu. ARToolkit upotrebljava
metode računalne slike kako bi izračunao poziciju i orijentaciju stvarne kamere u odnosu sa
markerom, omogučujući programeru da pozicionira virtualne objekte (HIT laboratories
[2008]).
ARToolKit je softverski alat koji se sastoji od više dijelova (engl. ToolKit). Sastoji se od
predefiniranih funkcija koje se pozivaju prilikom konstruiranja AR programa. ARToolKit
koristi OpenGL za renderiranje (engl. rendering). (Sl. 1.14) prikazuje arhitekturu ARToolKit-
a (engl. Framework) i njegovu hijerarhijsku poziciju.
Sl. 1.14 Arhitektura ARToolKita
ARToolKit library se sastoji od četiri modula:
1. AR modul – jezgra modula koja sadrži rutine za slijeđenje i prepoznavanje markera,
kalibraciju i skupljanje parametara
2. Video modul – kolekcija rutina za hvatanje ulaznih slika (engl. input frames) iz videa.
Ovaj modul je ovojnica oko standardnog SDK modula za hvatanje videa (engl. SDK
video capturing routines).
3. Gsub modul – grafičke rutine bazirane na OpenGL i GLUT library-ima
4. Gsub Lite modul – zamjenjuje Gsub modul sa kvalitetnijim kolekcijama grafičkih rutina
16
U radu se isključivo koristi Gsub Lite modul. On daje bolje performanse i potreban je za rad
sa više kamera. Hijerarhija ARToolki modula može se bolje shvatitit iz (Sl. 1.15). Ispod je
dan i prikaz protočne strukture koji se koristi u programu (Sl. 1.16)
Moduli poštuju globalnu protočnu strukturu (video->slijeđenje->prikaz) tako da korisnik
može bilo koji od modula zamijeniti s nekim drugim po svojoj želji (npr. Gsub rendering s
Open Inventor renderingom).
Sl. 1.15 Hijerarhija ARToolKit-a sa Gsub_Lite modulom
Sl. 1.16 Protočna struktura ARToolkita
ARToolKit-ov algoritam za prepoznavanje markera se temelji na prepoznavanju rubova
markera sa algoritmom za brzo izračunavanje pozicije markera u prostoru. Za bolje
razumijevanje je cijeli proces detekcije prikazan slikom (Sl. 1.17).
17
a: Originalna slika b: Tresholded image c: Spojene komponente
d: Konture e: Ekstrahirani kutovi f: Komponirani rubovi
i rubovi markera kocke Sl. 1.17 Sažetak rada ARToolkit algoritma u slikama
Taj algoritam je implementiran u ARToolkit software library (library je u ovom smislu skup
subrutina koji pomaže prilikom razvoja novih programa) te ga nije potrebno dodatno
mijenjati. Dijagram toka algoritma je na (Sl. 1.18).
18
Sl. 1.18 Dijagram toka algoritma za prepoznavanje markera
ARToolKit definira različite koordinatne sustave za algoritme računalnog vida i iscrtavanje
(engl. rendering). ArToolKit nam daje poziciju markera u koordinatnom sustavu kamere i
koristi matrični sustav OpenGL-a za pozicioniranje virtualnog objekta.
Kod prepoznavanja markera funkcije ARToolkita vraćaju koordinate markera u koordinatnom
sustavu kamere. Za poziciju kamere u koordinatnom sustavu markera, mora se napraviti
inverznu matricu. Vezu koordinatnog sustava kamere i markera se vidi na (Sl. 1.19).
19
Sl. 1.19 Koordinatni sustav kompjuterskog vida
Koordinatni sustav markera pri tom je isti kao i koordinatni sustav OpenGL-a.
1.4.5. OpenGL
OpenGL (skraćeno od Open Graphics Library) je aplikacijsko programsko sučelje (engl.
application programming interface, skarćeno API) prema grafičkom sklopovlju. OpenGL radi
sa primitivnim oblicima (engl. primitives) kao što su točka, crta, poligon, bitmap i slika, a
sastoji od funkcija koje služe za crtanje i kontrolu stanja. Sustav radi pomoću stanja. O
trenutnom stanju ovisi trenutni način rada. Stanje ovisi o parametrima koji ga opisuju (npr.
boja, matrica projekcije i sl.). Način rada se mijenja tako da se promijeni stanje u neko novo
pomoću odgovarajućih funkcija (OpenGL [2008]).
Sve OpenGL funkcije koriste istu konvenciju. Imaju prefiks gl i sufiks koji se mijenja, a
predstavlja ime funkcije i tip argumenta. OpenGL pruža pristup svim funkcijama grafičkog
protočnog sustava, kao što su:
• iscrtavanje poligona, crta i točaka,
• osnovni model kamere,
• transformacije koordinatnog sustava,
• materijali,
• svjetla,
• model osvjetljenja,
• gouraud ili plošno sjenčanje,
20
• spremnici i operacije sa spremnicima,
• dvostruki spremnik boje i alpha,
• z-spremnik,
• akumulacijski spremnik,
• spremnik predloška,
• teksturiranje,
• odabir i sl.
Također postoji i univerzalno sučelje GLUT (OpenGL Utility Toolkit) koje ima standardni
način koji omogućuje sve sistemski specifične radnje kao što su kreiranje prozora, uzimanje
podataka sa ulaznih jedinica i sl. Na taj način se može jednostavno prijeći sa jednog sustava
na drugi tako da se samo pronađe GLUT za drugi sustav.
Kod OpenGL-a postoje tri načina iscrtvanja objekata. Prvi način je da se grafičkoj kartici prije
svakog iscrtavanja šalje jedan po jedan verteks (engl. immediate mode), drugi je da se šalje
polje verteksa prije svakog iscrtavanja (engl. vertex arrays), a treći način je da se verteksi
jednom pošalju grafičkoj kartici i onda ostanu pohranjeni na njoj (engl. vertex buffer objects)
(Richard S. Wright Jr [2004], OpenGL [2008]). Prilikom programske realizacije AR sustava
korištena je treća metoda. Koristi se GLUT za operativni sustav MS Windows.
1.4.6. Razvoj aplikacije
Za razvoj programa za AR sustav korišten je MS Visual Studio 2005 i programski jezik C++.
On je odabran zbog kompatibilnosti sa svim komponentama sustava i alata koji su potrebni za
njegov razvoj.
Aplikacija koja se razvija korištenjem alata ARToolKit sasoji se od stvaranja same aplikacije i
podešavanja i isprobavanja njenih rutina sa markerima.
Glavnom kodu aplikacije sadrži korake prikazane na (Tablica 1.2).
21
Tablica 1.2 Koraci razvoja aplikacije
Inicijalizacija 1. Inicijaliziraj hvatanje struje videa i učitaj parametre i uzorke markera i kamere.
2. Hvataj ulaznu struju videa.
3. Detektiraj markere i prepoznaj uzorke na markerima u ulaznoj struji markera.
4. Izračunaj transformacije kamere relativno na detektirane uzorke markera.
Glavna petlja
5. Iscrtaj virtualne objekte nad detektiranim uzorcima markera.
Ugasi 6. Zatvori hvatanje struje videa.
Koraci od 2 do 5 iz tablice se ponavljaju sve dok se aplikacija ne završi, dok se koraci 1 i 6
vrše samo prilikom inicijalizacije i završavanja aplikacije.
Prvi korak aplikacije je inicijalizacija kamera i uzorka markera.
Parametri kamere dobiveni kalibracijom učitavaju iz datoteke camera_para.dat. Osnovni
podaci o video konfiguraciji su pohranjeni u XML datotekama zapisanih po DsVideoLib.xsd
shemi priloženoj u ARToolkit razvojnoj okolini.
Otvaraju se dva video stream-a tako da je funkciju ar2VideoOpen() potrebno pozvati za
svaku kameru. Preko podatka cameraCount prenosi se broj kamera u upotrebi. Inicijalni
podaci kamera spremljeni su u listu objekata tipa CONTEXT_INFO.
Definicija tipa CONEXT_INFO:
typedef struct { // API-specific index into an array of display contexts. int apiContextIndex; // Camera parameter. ARParam ARTCparam; // Video parameters AR2VideoParamT *ARTVideo; // Most recent image. ARUint8 *ARTImage; // Threshold for marker detection. int ARTThreshhold; // Frames received. long callCountMarkerDetect; // Marker transformation. double patt_trans[3][4]; // Whether marker transformation is valid. int patt_found; // Settings from ARGL. ARGL_CONTEXT_SETTINGS_REF arglSettings; } CONTEXT_INFO;
22
Inicijalizacija kamera:
static int setupCameras(const int cameraCount, const char *cparam_names[], char *vconfs[]){ ... /*funkcija za učitavanje podataka kalibracije kamere*/ ar2VideoOpen(vconfs); }
Datoteka sa kalibracijom markera uobičajeno počinje nazivom „patt.“ (npr. patt.hiro).
Inicijalizacija se obavlja pozivom funkcije setupMarker(). Tamo se učitava kalibracija
markera i njegove postavke se povezuju sa virtualnim likom koji se iscrtava na njegovom
mjestu.
Učitavanje datoteke sa kalibracijom markera:
static int setupMarker(const char *patt_name, int *patt_id){ ... //funkcija za učitavanje podataka kalibracije markera arLoadPatt(patt_name); }
Nakon inicijalizacije otvara se prozor za iscrtavanje pozivanjem GLUT funkcije
glutCreateWindow(). Kako je potrebno 2 prozora, funkcija se poziva dva puta. Pridodan je i
naziv svakog prozora da i se mogli razlikovati.
Slijedi registracija GLUT callback funkcija koje se koriste. Te funkcije se izvode u zasebnim
nitima ili se pozivaju po potrebi, za što se brine GLUT. U slučaju da OS nemože pridjeliti
jednake prioritete svim nitima, programer se mora sam pobrinuti za to. (Richard S. Wright Jr
[2004]) U ovom slučaju se koristi OS MS Windows koji to automatski obavlja.
Koristimo slijedeće funkcije:
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutIdleFunc(Idle);
glutKeyboardFunc(Keyboard);
Idle U njoj se obavlja korak 2, 3. i 4 korak aplikacije. Tu su standardni pozivi za hvatanje video
stream-a ARToolkita. Svaki od njih se poziva za svaku kameru zasebno. Svaka kamera ima
23
set svojih podataka u jednom članu globalne liste tipa CONTEXT_INFO što nam olakšava
pristup podacima.
Funkcija Idle, bitni djelovi koda za hvatanje slike, detekciju markera i dobivanje
transformacijske matrice:
static void Idle(void) { ... for (i = 0; i < gContextsActiveCount; i++) { // Korak 2. hvatanje video slike if ((image = ar2VideoGetImage(gContextsActive[i].ARTVideo)) != NULL) { gContextsActive[i].ARTImage = image;// Spremanje slike } ... // Detektiranje markera u video slici. if (arDetectMarkerLite(gContextsActive[i].ARTImage, gContextsActive[i].ARTThreshhold, &marker_info, &marker_num) < 0) { exit(-1); } ... // Ako postoji marker, onda se racuna transformacija izmedju markera i kamere i sprema u gPatt_trans1. arGetTransMat(&(marker_info[k]), gPatt_centre, gPatt_width, gContextsActive[i].patt_trans); gContextsActive[i].patt_found = TRUE; ... }
Datoteka sa kalibracijom markera uobičajeno počinje nazivom „patt.“ (npr. patt.hiro).
Inicijalizacija se obavlja pozivom funkcije setupMarker(). Tamo se učitava kalibracija
markera i njegove postavke se povezuju sa virtualnim likom koji se iscrtava na njegovom
mjestu.
Učitavanje datoteke sa kalibracijom markera:
static int setupMarker(const char *patt_name, int *patt_id){ ... //funkcija za učitavanje podataka kalibracije markera arLoadPatt(patt_name); }
24
Reshape Namješta veličinu GLUT prozora na onu dobivenu iz parametara koji se unose na početku
programa. Za te parametre se brine ARToolkit koji ih dobiva od korisnika prilikom pokretanja
programa.
Display Poziva funkcije za iscrtavanje i funkcije koje mijenjaju sa koje kamere se trenutačno iscrtava
slika.
Keyboard Ulaz sa tastature se koristi za mijenjanje nekih parametara i za prekid programa.
Objekt koji se iscrtava je kocka sa jednostavnim teksturama (Sl. 1.20). Sprema se na GLUT
listu (Jackie Neider et al. [1993]) koja se kasnije poziva kod iscrtavanja. Na svakom zaslonu
primjenjuje se posebno iscrtavanje zbog različitih perspekiva. Jednaka kocka je spremljena
dva puta na listu, svaki put namještena za perspektivu jedne kamere kameru (contextIndex je
indeks kamere za koju se vrši iscrtavanje).
Način spremanja naredbi za iscrtavanje na GLUT listu:
gDrawListBox[contextIndex] = glGenLists (1); glNewList(gDrawListBox[contextIndex], GL_COMPILE); glBegin (GL_QUADS); ... glEndList ();
Testiranje je pokazalo zadovoljavajuću brzinu osvježavanja slike (FPS). Virtualni objekt je
odlično pozicioniran na marker i postojan je (ne treperi zbog mogućeg gubitka lokacije
markera).
Sl. 1.20 Proširena stvarnost, prikaz sa dvije kamere, virtualni objekt kocka sa teksturom
25
Iscrtavanje kompliciranijih virtualnih objekata je sa ovim programom moguće ukoliko se
precizno modeliraju unutar koda.
Kod za obojanu kocku koja je iscrtana na slici (Jackie Neider [1993]):
for (f = 0; f < cube_num_faces; f++) for (i = 0; i < 4; i++) { glColor3f (cube_vertex_colors[cube_faces[f][i]][0], cube_vertex_colors[cube_faces[f][i]][1], cube_vertex_colors[cube_faces[f][i]][2]); glVertex3f(cube_vertices[cube_faces[f][i]][0] * fSize, cube_vertices[cube_faces[f][i]][1] * fSize, cube_vertices[cube_faces[f][i]][2] * fSize); } glEnd (); glColor3f (0.0, 0.0, 0.0); for (f = 0; f < cube_num_faces; f++) { glBegin (GL_LINE_LOOP); for (i = 0; i < 4; i++) glVertex3f(cube_vertices[cube_faces[f][i]][0] * fSize, cube_vertices[cube_faces[f][i]][1] * fSize, cube_vertices[cube_faces[f][i]][2] * fSize); glEnd (); }
Jednostavnije virtualne likove, već definirane u GLUT library je trivijalno iscrtati. Kôd kocke
zamijenimo nekim od preddefiniranih likova kao što je prikazano na (Sl. 1.21). (koristi se
GLUT funkcija glutSolidTeapot()).
Sl. 1.21 U 3D grafici uvijek popularan - čajnik
26
2. Uvođenje virtualnih ljudi
2.1. Virtualni ljudi
Virtualnim ljudima (engl. virtual characters) nazivamo simulaciju ljudi na računalu. Pri tome
se nastoji da virtualni model što više sliči i ponaša se poput čovjeka. Simulacija ljudi na
računalu se tretira kao posebna grana u računalnoj grafici (Igor S. Pandžić [2004]). To je zato
jer je simuliranje ljudskog tijela, pokreta i ponašanja puno zahtjevnija od simulacije drugih
predmeta. Zbog toga razrađujemo i simulaciju virualnih ljudi u proširenoj stvarnosti odvojeno
od ostalih računalno generiranih tijela. Kako računalni lik uklapamo u stvarni svijet oko sebe
tako mu i dajemo neki kredibilitet, imamo veći osjećaj prisutnosti nego kad je okružen
virtualnom okolinom.
Modeli virtualnih ljudi mogu biti različitih razina realističnosti, od fotorealističnih do
karikatura. Kako bi te karikaturalne likove predstavili kao virtualne ljude, moramo koristiti
pokrete i geste što sličnije ljudskima. Kod realističnih likova mora se paziti da loša imitacija
pokreta, glasa i loša „osobnost“ lika ne unište dojam koji steknemo na prvi pogled.
Sl. 2.1 Primjeri virtualnih likova različite realističnosti
Primjena Kod filma, reklama i TV programa možemo zamisliti brojne nove upotrebe i značajno
unaprijediti stare. Već se koriste jednostavniji oblici proširene stvarnosti u svim tim
područjima, tako da je napredak te tehnologije i dodavanje virtualnih ljudi neminovno.
U računalnim igrama se virtualni ljudi koriste već odavno. Skoro se svaki programer sa tog
područja susreo sa njima. Sav potreban hardware je već tu i polako se razvijaju novi programi
27
koji će iskorisiti nove ulazne i izlazne jedinice koje sada standardno dolaze sa novim igraćim
konzolama (dodaci za PS3 i Ninendo Wii).
U industriji virtualni ljudi se već sada koriste za testiranje virtualnih prototipova. Sada se to
može proširiti i na stvarne modele i upotpuniti interakciju sa korisnikom.
Najveća mogućnost primjene je naravno u komunikaciji. Prisustvo na daljinu (engl.
telepresence) o kojemu se već odavno priča se napokon počeo primjenjivati (Sl. 2.2). Pomoću
proširene stvarnosti i virtualnih ljudi telepresence se može postići sa dosad još neviđenom
realnošću. Korištenje virtualnih ljudi kod prijenosa videa je preporučen način jer se prenosi
manje podataka i manje je zagušenje mreže. Povećane brzine prijenosa podataka u mobilnim
komunikacijama, prisutstvo broadband internet veze na svakom koraku, snaga današnjih
računala i mobitela osiguravaju svu potrebnu građu sa kojom se virtualni ljudi u proširenoj
stvarnosti mogu uvesti u korištenje.
Sl. 2.2 Primjeri sadašnjeg telepresence konferencije. Rješenje firme Cisco
2.2. Visage|SDK
Do sad su se koristili jednostavniji virtualni likovi koje smo modelirali pomoću jednostavnih
OpenGL funkcija. Naravno, tako smo mogli modelirati i složenije modele, ali to bi bio
mukotrpan proces koji bi za svaku, pa i najmanju promjenu trebao promjene u kodu i
ponovno kompajliranje. Zato je bio potreban neki programski alat koji bi pojednostavio
modeliranje i iscrtavanje modela.
Visage technologies je udruga koja se specijalizirala za animaciju lica i tijela i svojim
aplikacijskim rješenjima nudi širok krug primjene. Sve Visage-ove aplikacije bazirane su na
MPEG-4 tehnologiji za animaciju tjela i lica (Visage Technologies [2008]). Već prije su za
rješavanje zadatka na FER-u bila iskorištena neka rješenja ove udruge, Visage toolkit i Visage
SDK. Visage|toolkit je skup aplikacijskog alata za izradu animacije lica i tijela za film, TV,
28
računalne igre, Internet i drugo. Omogućava nam brže i jednostavnije kreiranje animiranih
likova. Toolkit je baziran na MPEG4-fba (engl. Face and body animation) standardu.
Kompatibilan je sa drugim 3D alatima kao što su 3DS Max, Maya, SoftImage. Za porebe
ovog rada je korišen Visage|SDK (Software Development Kit).
Sl. 2.3 Primjeri likova iscrtanih korištenjem Visage-a
Visage|SDK se nametnuo kao logičan izbor za rješavanje zadatka. Ima upravo tu
funkcionalnost koja je bila potrebna za prikazivanje likova. Primjere nekih možemo vidjeti i
na (Sl. 2.3).
Postoji nekoliko glavnih prednosti Visage|SDK. Koristi se MPEG-4 standardom pri
modeliranju likova. Taj standard pruža relativno kompleksnu ali vrlo dobru aproksimaciju
ljudskog tijela i lica, te njihovih pokreta (Igor S. Pandžić et al. [2002]). Time se postiže visoka
kompatibilnost modela. Naravno, pri korišenju standardiziranih rješenja dobivamo i
zajamčenu kvalitetu. Mogu se koristiti razni modeli koji su već upotrebljavani kod nekih
drugih aplikacija razvijenih na fakultetu, a i znatno je olakšano modeliranje novih. Postojeći
likovi se lako mogu mijenjati i nadograđivati sa razvojnim alatom visage|toolkit. Visage|SDK
omogućava još jednu vrlo bitnu stvar. Sve modelirane likove možemo animirati standardnim
animacijskim funkcijama. Kako su svi modeli standardizirani, napravljene animacije se mogu
primjeniti na bilo koji model. Postoji još nekoliko naprednih animacija kao što je lip-sync
koje se mogu koristiti u suradnji sa drugim (npr. komunikacijskim) programima za dobivanje
realističnog govora i gesti lica (Tomislav Košutić et al. [2007]).
2.3. OpenGL
Razvojni alat ARtoolkit je omogućio da precizno detektiramo položaj i orijentaciju vizualnog
markera. Pomoću funkcije ARtoolkita (arGetTransMat()[ARtoolkit]) dobija se
29
transformacijska matrica koja virtualni lik pozicionira na središte markera. Sa jednostavninim
likovima nisu se koristile mogućnosti transformacija koje pruža OpenGL. Virtualni element je
bilo dovoljno iscrtati na marker transformacijom koja je dobivena od lociranja markera. Kod
virtualnih ljudi to nije dovoljno. Prije iscrtavanja virtualnog lika, moraju se napraviti dodatne
transformacije u odnosu na marker: pomak od površine markera, orijentaciju lika (da li stoji
na markeru ili gleda u smjeru od njega), veličinu lika i dr. Sve se to može postići sa
standardnim funkcijama OpenGL-a (Jackie Neider et al. [1993], OpenGL [2008]).
Transformacijski proces za dobivanje željene virtualne scene sa OpenGL-om je sličan
fotografiranju. Gruba usporedba bila bi:
• Namještanje kamere da gleda na scenu koju želimo snimiti (engl. viewing
transformation – transformacija pogleda).
• Namještanje kompozicije scene, preslagivanje objekata (engl. modeling
transformation – transformacija modela).
• Određivanje objektiva koji koristimo (engl. projection transformation – transformacija
projekcije)
• Određivanje veličine fotografije (engl. viewport transformation – transformacija
okvira slike).
OpenGL sve operacije izvršava transformacijama matrica 4x4. A redoslijed primjenjivanja
operacija na matrične koordinate objekta možemo vidjeti na (Sl. 2.4).
Sl. 2.4 Dijagram primjenjivanja transformacija na matricu sa položajem virtualnog objekta.
30
2.4. Realizacija
2.4.1. OpenGL
U radu se već koristio GLUT prilikom kreiranja prozora za iscrtavanje i podešavanja njegovih
parametara. Kod pravilnog iscrtavanja lika potrebne su nam još neke OpenGL funkcije.
Sva manipulacija virtualnog lika se radi na modelview matrici (GL_MODELVIEW – trenutni
mod matrice odabire se sa glMatrixMode() funkcijom). Prvo treba odrediti kako će virtualni
lik stajati. Ako se marker drži npr. na zidu, onda će lik biti okrenut u smjeru licem od
markera. Ako je marker na stolu ili podu virtualni lik ćemo postaviti uspravno, tj. pod kutem
od 90º na ravninu markera. To se napravi pomoću transformacije za modeliranje glRotatef()
(Sl. 2.5).
Sl. 2.5 Rotacija objekta po osima
Sljedeći korak je pozicioniranje lika u prostoru. Prvo što treba napraviti je udaljiti virtualni lik
od ravnine markera. To je potrebno da se ne bi dogodilo da lik ne „uroni“ u pod ili zid.
Ukoliko se marker drži na fiksnoj poziciji, može ga se koristiti i kao sidrište za globalne
koordinate. Tada ćemo napraviti translaciju virtualnog lika na ravninu poda prostorije. To sve
se može napraviti sa preciznim korištenjem glTranslatef() i glRotatef() funkcija (Sl. 2.5) i (Sl.
2.6).
31
Sl. 2.6 Translacija objekta
Zadnja stvar koja je potrebna je određivanje veličine lika. Modelirani likovi često nisu
napravljeni u stvarnim mjerama pa ih je potrebno povećati ili u rjeđim slučajevima smanjiti.
To se postiže sa funkcijom glScale() (Sl. 2.7).
Sl. 2.7 Skaliranje objekta po koordinatnim osima
Treba obratiti posebnu pažnju kod korištenja te funkcije jer njena upotreba smanjuje
performanse kalkulacija za osvjetljenje (Jackie Neider [2004]). Kod upotrebe u normalnim
granicama, kod ovakvog korištenja je zadovoljavajuća.
2.4.2. Visage|SDK
Visage|SDK se sastoji od nekoliko library pakea od koje svaki ima svoj set funkcija. Library
visoke razine (engl. high-level library) (Tablica 2.1) pokrivaju većinu funkcija koje su
potrebne kod uobičajenog razvijanja programa i koje programeri najčešće koriste – lip-sync,
govornu animaciju, proceduralnu animaciju, rad sa datotekama i dr.
Library niske razine (engl. low-level library) (Tablica 2.2) se najčešće netrebaju koristiti
direktno. Dostupni su kako bi omogućili pristup svim detaljima animacije virtualnog lika,
deformacija, kodiranja, pristupa datotekama i mehanizmima za iscrtavanje. Koriste se da bi
programerima kod razvijanja složenijih aplikacija pružili potpunu kontrolu (Visage
Technologies [2008]).
32
Tablica 2.1 Library visoke razine
LIBRARY KRATKI OPIS GLAVNE KLASE
visageFAPlayer Centralni library paket zadužen za animacije, spremanje animacija i dr. Integrira sve druge
komponente.
FAPlayer FbaAction
FbaFileAction
visageLipSync Lip-sync u stvarnom vremenu. VisageLipSync LipSyncEventHandler
visageSAPI5TTS Animacija lica i govora u stvarnom vremenu
pomoću aplikacije za pretvorbu teksta u govor kompatibilnog sa SAPI-5.
Visagesapi5tts Visagesapi5ttsObserver
33
Tablica 2.2 Library niske razine
visageFBAEncoder
Kodiranje slijeda
animacija prikazanih
BAP (FBAP) u ISO-standard MPEG-4 FBA
CFBAEncoder FBACodec
visageFBADecoder
Dekodiranje MPEG-4 FBA animacije za
dobivanje BAP (Body
Animation Parameters)
CFBADecoder FBAPs FAPs BAPs
FAPNames BAPNames
VisemeNames ExpressionNames
FBACodec
visagesdkAFM
Baratanje modelima za animaciju i
običnim VRML
modelima. Koristi se kod
potpunog pristupa
geometriji, animaciji,
deformaciji i učitavanju.
AFM VRMLModel
VRMLTraverser FileIO
BaseFileIO AFMDeformer
BaseAFMDeformer
SimpleAnimation
visageVRMLRenderer
Apstraktni interface koji podržava bilo koji sustav za iscrtavanje.
Sadrži OpenGL implemenaciju.
VRMLModelRenderer BaseOGLVRMLModelRenderer SimplePlayer
34
Visage technologies ima preporuku za razvijanje novih aplikacija. Dani su primjeri i kosturi
koda programa. U ovom radu oni nisu korišteni. Neke njihove funkcionalnosti nisu bile
porebne jer su već realizirane na drugi način, a neke nisu bile kompatibilne sa rješenjem za
AR.
Zato su za svrhe ovog rada su korišteni library niske razine, koji omogućavaju potpuni pristup
modelu. Tako je zadržana većina funkcionalnosti visage|SDK, a povećana je mogućnost
manipulacije virtualnim likom u kodu.
BaseOGLVRMLModelRenderer klasa Ova klasa pruža osnovnu funkcionalnost renderer-a (engl. render – iscrtati, renderer –
iscrtavač) baziranog na OpenGL-u. Preporuka u Visage|SDK je da se koristi pri iscrtavanju
lika u integraciji sa MFC-om (MFC – Microsoft Foundation Classes). To u ovom slučaju nije
bilo moguće jer library ARToolkit-a nisu kompatibilni sa MFC-om. Potrebna dodatna
funkcionalnost je realizirana na drugi način, pomoću GLUT-a i zadovoljava potrebe rada.
Konkretno u programu se koristi samo metoda RenderToScreen() koja iscrtava model, ako je
model učitan, inače očisti sliku. Osim kod iscrtavanja ova metoda se korisi i u inicijalizaciji.
Teksture modela se učitaju tek kod prvog poziva ove metode, što obično traje oko 1-2
sekunde. Da se to kašnjenje izbjegne, pozivamo metodu RenderToScreen() prilikom
inicijalizacije. To je normalni i preporučeni postupak objašnjen i u dokumenaciji visage|SDK.
FAPlayer klasa Jedna od najvažnijih klasa visage|SDK. Implementira mehanizme za animaciju tijela i lica u
stvarnom vremenu i off-line. To je klasa visoke razine, ali ima brojne metode koje nam daju
potpunu kontrolu nad virtualnim likom. Nema nikakvih konflikata pri upotrebi sa ARToolkit-
om i GLUT-om tako da se može koristiti bez ograničenja.
FAPlayer se inicijalizira učitavanjem AFM-a (engl. Animatable Face and Body Model ) iz
datoteke. Takvom modelu se mogu dodavati razne animacije i pokretati sa meodom play().
Animacije se učitavaju iz FBA datoteka metodom addTrack() i pokreću po potrebi. Moguće
je pokrenuti više animacija u isto vrijeme, kao i svaku zasebno. Animacija je u memoriji
predstavljena apstraktnom animacijskom klasom FbaAction koja je osnova za sve tipove
animacije. To omogućava vrlo moćan mehanizam za primjenjivanje raznih mehanizama
animacije, poput Visagesapi5tts (pretvara tekst u govor i animira lice i usta), VisageLipSync
(analizira audio signal i stvara animaciju lica i usta na temelju toga) već implementiranih u
visage|SDK.
35
2.4.3. Razvoj aplikacije
Program se temelji na već opisanom AR sustavu, tako da kostur ostaje nepromijenjen. Neke
funkcije će se zamijeniti (modeliranje lika i iscrtavanje), neke izbaciti, a neke samo
nadograditi.
Inicijalizacija
Prilikom iscrtavanja kocke, postoji inicijalizacija koja se sastoji od alociranja memorije
potrebne da se ona pohrani (kod jednostavnijeg modela čajnika to nije bilo potrebno). Sada se
ta pojednostavljenu inicijalizacija može zamjeniti inicijalizacijom visage modela. U funkciji
Init() učitava se AFM datoteka koja sadrži opis modela koji se koristi. Kako datoteka mora
postojati da bi program radio, doći će do prekida ako datoteka ne postoji ili se iz nekog
razloga nemože pročitati. Kod inicijalizacije se inicijalizira i instanca FAPlayera sa meodom
FAPlayera->init(). Ona je potrebna samo kod korištenja animacija na modelu. Ukoliko se ne
koriste animacije, nije ju potrebno stvarati. Inicijalizacija BaseOGLVRMLModelRenderer-a
(u ovom slučaju dvije – po jedna za svaku kameru kako bi se dva sustava iscrtavanja potpuno
odvojila) se radi sa metodom Init() klase BaseOGLVRMLModelRender.
Inicijalizacija:
static int Init( void ) { afm = new AFM(MODEL); // Učitavanje modela // Provjera da li je model učitan if(!afm->getVCModel()->initialized) return(FALSE); ... m_FAPlayer.init(afm); // Inicijalizacija FAPlayera ... // Dvije inicijalizacije BaseOGLVRMLModelRenderera BRenderer[0].Init(m_FAPlayer.getFaceModel()); BRenderer[1].Init(m_FAPlayer.getFaceModel()); }
Ukoliko se žele dodati animacije modelu, potrebno ih je učitati iz FBA datoteka. FAPlayer
ima metodu addTrack() predviđenu za tu namjenu. Moguće ih je dodati više istom modelu.
Animacije je najbolje dodati već kod inicijalizacije, ali moguće ih je dodati i kasnije. Kako
program može funkcionirati bez njihove prisutnosti, nije ga neophodno prekidati ukoliko ne
postoje ili radi drugih razloga nemogu biti učitane.
36
Animacije dodajemo na instancu FAPlayera:
m_FAPlayer.addTrack(ANIMATION1); // Dodaj animaciju 1 m_FAPlayer.addTrack(ANIMATION2); // Dodaj animaciju 2
Teksture modela se učitaju tek kod prvog poziva metode BaseOGLVRMLModelRenderer->
RenderToScreen(), što obično traje oko 1-2 sekunde. Po preporuci Visage technologies, bilo
bi dobro pozvati ju kod inicijalizacije drugih parametara. To nije moguće. Ukoliko se metoda
RenderToScreen() pozove prije stvaranja prozora za iscrtavanje pomoću GLUT-a, teksture se
svejedno neće učitati. Zbog toga je ona stavljena izvan funkcije Init(), odmah iza otvaranja
GLUT prozora.
Otvaranje prozora i učitavanje tekstura:
int main(int argc, char** argv) { ... // Kreiranje prozora if ((gContextsActive[i].apiContextIndex = glutCreateWindow(windowTitle)) < 1) { fprintf(stderr, "main(): Unable to create window.\n"); exit(-1); } // Inicijalizacija iscrtavanja, učitavanje tekstura BRenderer[i].RenderToScreen(); ... }
Iscrtavanje
Iscrtavanje virtualnog lika je izvedeno funkcijom drawVirtual(). Kako se za iscrtavanje
samog lika brine klasa visage-a BaseOGLVRMLModelRenderer, potrebno je samo dobro
pozicionirati virtualni lik. Za to se koriste OpenGL funkcije glRotatef(), glTranslatef() i
glScalef(). Pri testiranju programa, korištena su dva osnovna tipa modela: prvi sadrži glavu i
prsa (bista, poprsje), drugi cijelo tijelo. Za svaki od njih je potrebna posebna transformacija.
Kod modela cijelog tijela se koristi pozicioniranje da model „stoji“ na markeru (Sl. 2.8). Kod
biste se model postavi da gleda iz smjera markera, „polegnut“ je na marker (Sl. 2.9).
37
Sl. 2.8 Primjer kad model „leži“ na markeru
Sl. 2.9 Primjer kada model stoji na markeru
Primjer transformacija virtualnog lika:
static void drawVirtual (int contextIndex) { ... glMatrixMode(GL_MODELVIEW); if (MODEL_TYPE == "STANDING") { // Rotacija da stoji uspravno glRotatef(GLfloat (90.0), 1.0f, 0.0f, 0.0f); // Translacija da ne propadne kroz marker glTranslatef( 0.0, 0.0, 4.0 ); // Povećanje glScalef (5.0, 5.0, 5.0); }
Kod iscrtavanja virtualnih ljudi dodano je i osvjetljenje:
glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightfv(GL_LIGHT0, GL_AMBIENT, ambi); glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_flash); glMaterialfv(GL_FRONT, GL_SHININESS, mat_flash_shiny); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
38
Dodatne promjene Kod iscrtavanja slike druge kamere dolazi do usporavanja prilikom iscrtavanja. Dvije niti koje
se brinu za iscrtavanje bi trebale biti ravnopravne i jednako se puta izvršavati. Pretpostvka je
da do problema dolazi jer OS smatra jednu nit „ravnopravnijom“ od druge. Bez detaljnijeg
proučavanja problema, unešeno je kašnjenje u funkciji Display() (već je prije bila opisana)
kad se iscrtava slika sa prve kamere. To daje veću šansu drugoj niti da „dođe na red”.
Kašnjenje:
if ((contextIndex = getContextIndexForCurrentGLUTWindow()) == 0) { ms = glutGet(GLUT_ELAPSED_TIME); s_elapsed = (float)(ms - ms_prev) * 0.001; if (s_elapsed < 0.1f) return; // Don't update more often than 100 Hz. ms_prev = ms; }
U funkciju keyboard() (već opisanu prije u tekstu) moguće je dodati još nekoliko naredba za
interakciju sa virtualnim likom (npr. kojom bi pokrenuli i zaustavili animaciju ili nešto
složenije).
39
3. Proširenje sustava s više markera
3.1. Korišetnje više markera
Sustav proširene stvarnosti koji bi se koristio u svakodnevnoj primjeni treba imati brzo,
robusno i precizno praćenje. U prostoru gdje nije dostupna sofisticirana oprema mogu se
koristiti sustavi za praćenje sa markerima. U laboratorijskim uvjetima jedan manji marker je
dovoljan za praćenje neke jednostavnije scene. Kod proširenja mogućnosti takvog sustava nije
dovoljno koristiti jedan marker je pozicija dobivena iz njega nije dovoljno stabilna. Sa
pomicanjem i gubitkom vizualne slike dijela markera gubi se pozicija. Cjelokupna procjena
pozicije se može znatno poboljšati ako se koristi više markera u fiksnom odnosu jedan na
drugi. Time se osigurava bolja preciznost i smanjuje se mogućnost gubljenja markera.
Sustav sa više markera može biti koplanarni ili ne. Ako su svi markeri u jednoj ravnini, lakše
je izvesti proračune za njih. Takvi markeri povećavaju preciznost i donekle poboljšavaju
hvatanje markera u prostoru, ali za široku primjenu bi se trebali proširiti. Sam postupak
proširivanja aplikacije za rad na više ne-koplanarnih markera nije pretjerano zahtjevan. Ono
što je teže izvesti, ali je i prijeko potrebno ako bi takav sustav radio, je precizna kalibracija uz
strogo kontrolirane uvjete postavljanja markera. Ukoliko bi se markeri micali, čak i za mali
pomak, cijela kalibracija bi se trebala ponovo provesti. Mali pomak kod orijentacije markera
može značiti veliki pomak za virtualni predmet koji iscravamo. Koordinatni sustav se
određuje pomoću markera i što je predmet dalje od njega, to je pogreška veća. Isti problem se
naravno javlja i kod koplanarnih markera, ali zbog njihovih ograničenja, koristimo ih na
znatno manjem prostoru, pa je time i pogreška manja. Primjer koplanarnih markera je dan na
slici (Sl. 3.1).
40
Sl. 3.1 Primjer koplanarnog sustava markera
3.2. Koplanarni markeri
Koplanarni sustav je jednostavniji za kalibriranje. Zbog toga su rezultati dobiveni detekcijom
takih markera precizniji. Konfiguracija više markera zahtijeva da su poznati odnosi svih
markera, precizne udaljenosti i precizne transformacije između njih. Kako je sve to potrebno
izmjeriti u stvarnom svijetu i zatim još pretvoriti u mjere u virtualnom svijetu, to je dugotrajni
proces. Koplanarni markeri mogu pojednostaviti dio izračuna kod kalibracije, pa će se u ovom
radu koristiti samo takve.
Ukoliko bude dostupan program za automatsko kalibriranje sustava više markera, jednostavno
je proširiti aplikaciju da koristi i njih.
Na slici (Sl. 3.2) se vidi primjer korištenog sustava više markera tzv. multi-marker (engl.
Multi-Marker).
Sl. 3.2 Primjer multi-markera korišten na fakultetu
41
Korištenjem multi-marker sustava omoguće da detektiramo pozicije markera koje ne vidimo.
Njihova pozicija se izračuna iz pozicija poznatih markera. Osim toga, omogućuje veću
vjerojatnost da će se barem jedan od markera detektirati. Veća pokrivenost prostora i
redundantnost nam omogućuju preciznije pozicioniranje virtualnih likova. Na slici (Sl. 3.3)
vidimo primjer kada se jedan marker nije detektirao. Crvena kocka je iscrtana iako nema
podataka o markeru na kojem se nalazi.
Sl. 3.3 Primjer upotrebe multi-markera
3.3. Proširivanje koordinatnog sustava
Proširivanje koordinatnog sustava je logičan korak kod unaprjeđena AR sustava. Kako su
uvedeni virtualni ljudi, mora im se i osigurati prikladan prostor u kojemu se oni mogu kretati.
Proširenjem se virtualni lik može kretati po prostoriji poput pravog lika.Daljnja prednost je u
tome što se može postići bolja mogućnost preklapanja.
Da bi prošireni koordinatni sustav radio, bilo je potrebno povećati vjerojatnost detekcije i
precizost markera. Zato je uveden multi-marker sustav. Pozicije svih markera u prostoriji su
unaprijed poznate, kao i transformacije između njih. Ako se precizno detektira i jedan od njih,
mogu se dobiti globalne koordinate prostorije. Sa tim koordinatama se virtualni likovi mogu
42
postaviti bilo gdje u njoj. To otvara mogućnost interakcije virtualnih likova sa stvarnim
prostorom.
Postojeći sustav ne detektira elemente stvarnog svijeta kako bi mogli biti u interakciji sa
virtualnim. Elementi iz stvarnog svijeta će u svakom trenutku biti u pozadini virtualog lika,
dok ne prekrijemo marker. Da se postigne bolja interakcija, potrebno je modelirati u računalu
i stvarne elemente iz okoline. Takvi virtualni elementi, temeljeni na stvarnima bili iscrtani
„nevidljivi“. To se može postići tako da se iscrtavaju samo u z-Buffer gdje će prekriti
virtualne likove iza njih. Potrebno je i isključiti Color Buffer kako bi stvarni predmet bio
zamijenjen pozadinom. Postupak kako se uklapa u postojeće iscrtavanje:
• Očisti z-buffer
• arglDispImage(). Iscrtaj sliku sa kamere na ekran
• arglCameraFrustum(). Namjesti kameru (modelview) i osvjetljenje
• glColorMask(0,0,0,0). Isključi color buffer i iscrtaj stvarni element
• glColorMask(1,1,1,1) Ponovo uključi color buffer i iscrtaj sve virtualne elemente
Za sada je AR sustav limitiran samo na jedan multi-marker i još nije implementiran globalni
koordinatni sustav. Poteškoće su u sporosti procesa kalbiracije novih markera i modeliranju
prostorije.
3.4. Realizacija
Osnove rada i funkcionalnosti OpenGL i ARToolKit biblioteka su opisane u poglavljima
(1.4.4), (1.4.5), (2.3), (2.4.1). Nije ih potrebno detaljnije objašnjavati kod proširivanja
programa. Koristi se nekoliko novih ARToolKit funkcija koje će biti objašnjene dalje u
tekstu.
Nadogradnja za korištenje više markera se radi na postojeći AR sustav. Oprema ostaje u
potpunosti nepromijenjena. Potrebno je napraviti multi-marker koji će se koristiti. Zatim treba
kalibrirati te markere tako da se podaci o novom multi-markeru mogu učitati u program.
Nakon toga je potrebno prepraviti i kod programa da radi sa novim markerima.
Upute za dizajniranje markera Kreiranje markera je slično kreiranju jednog markera. Potrebno je uzeti predložak sa crnim
okvirom i u njemu nacrtati uzorak. Najbolji uzorci su asimetrični i bez previše detalja. Treba
napraviti nekoliko različitih markera i ispisati ih ili zalijepiti na isti papir (zbog
43
pojednostavljenja radilo se samo sa koplanarnim markerima iako je sustav lako proširiv i za
ne-koplanarne). Trebalo bi uzeti najmanje 5 različitih markera (potrebno je da se detektira
barem jedan u svakom trenutku).
Kako bi kalibracija bila što jednostavnija, dobro je uzeti markere koji su koplanarni i blizu
jedan drugoga. To pojednostavljuje mjerenje. Nije neophodno da markeri budu koplanarni,
dapače, predviđeno je da se sustav proširi sa markerima koji će obuhvaćati čitavu prostoriju.
Kada se kalibracija pojednostavni to će biti lako provesti.
Kalibracija markera Kalibracija markera je zahtjevniji dio posla. Svaki marker se mora posebno kalibrirati na
standardni način (koristeći program mkpatt.exe koji dolazi sa ARToolKit-om). Multi-markeri
imaju jednu zajedničku datoteku u kojoj su odnosi markera. Kratki opis datoteke za
konfiguraciju multi-marker sustava je na slici (Sl. 3.4).
Sl. 3.4 Datoteka sa podacima o multi-marker sustavu
Potrebno je precizno definirati veličinu markera, osnovne koordinate i na kraju
transformacijsku matricu koja će dati lokaciju središnjih koordinata. Podešavanje novih multi-
markera je dug i mukotrpan proces. Jednostavniji način bi bio automatizirati taj proces. Takva
aplikacija je već predstavljena na jednom ISMAR-u, ali nije Open Source, te se nemože
koristiti bez autorskih prava.
Redizajniranje koda Sve funkcije u aplikaciji ostaju i zadržavaju svoju prvotnu primjenu. Izmjenit će se samo
dijelovi nekih funkcija i dodati par novih globalnih varijabli.
Potrebno je uključiti u program library arMulti.h. U toj biblioteci su sadržane funkcije
potrebne za baratanje sa više markera koristeći postojeće ARToolKit funkcije. Kako je
44
promijenjena datoteka sa podacima o markeru, moramo promijeniti i naziv datoteke i način na
koji se ona učitava. Inicijalizacija markera (učitavanje podataka iz datoteke i prosljeđivanje)
se radilo pomoću funkcije setupMarker(). Za minimalnu intervenciju u kodu je najbolje
mijenjati samo nju. Provjera za pravilno učitavanje ostaje, samo se funkcija arLoadPatt()
zamijenjuje funkcijom arMultiReadConfigFile(). Za prosljeđivanje podataka o markeru
koristimo multi_config globalnu varijablu tipa ARMultiMarkerInfoT. Time je riješen prvi dio
u aplikaciji, što se tiče kalibracije.
Pri detekciji markera, hvata se slika sa video stream-a svakih nekoliko milisekundi. Ta slika
se zatim procesira i pretražuje. Ako je nađen crni okvir koji označava marker, nastavlja se
identifikacija markera. Taj dio ostaje nepromijenjen kod programa sa više markera. To je zato
jer je već omogućeno detektiranje više markera i to iz dva razloga: prvi je ako koristimo više
različitih markera da iscrtavamo poseban lik na svakom od njih; a drugi je zbog poboljšane
deekcije markera. Kod poboljšane detekcije koristi se samo jedan marker. Ako se javi greška
ili se iz nekog razloga on pojavi više puta na slici, bira se onaj sa najvećom pouzdanošću. Ta
dodatna detekcija se isključuje za ovu primjenu. Detekcija je kako slijedi:
/* detect the markers in the video frame */ if( arDetectMarkerLite(dataPtr, thresh, &marker_info, &marker_num) < 0 ) { cleanup(); exit(0); }
Ono što se razlikuje je način računanja transformacijske matrice. Kod prethodnog slučaja
računala se samo iz jednog markera, a sada se dobija iz sredine svih. Ako su u slici pronađeni
potencijalni markeri, prelazi se na njihovu identifikaciju. Nakon učitanih podataka o markeru
iz konfiguracijske datoteke, dobijemo broj markera, visibility zastavicu ako je detektiran i
transformacijsku matricu. Ako je barem jedan marker iz sustava markera detektiran, položaj
se može odrediti. Za identifikaciju se koristi:
if( (err=arMultiGetTransMat(marker_info, marker_num, multi_config)) < 0 ) { argSwapBuffers(); return; }
Parametar marker_info su podaci iz datoteke, marker_num je broj markera, a u multi_config,
koji je struktura tipa ARMultiMarkerInfoT podatke o identificiranim markerima.
45
Iz tih podataka je moguće dobiti poziciju svakog markera posebno, vidljivog ili ne. Za ovu
primjenu nam to nije potrebno, već samo središnja pozicija. Transformacijsku matricu za tu
lokaciju možemo izčitati iz multi_config->trans ako je barem jedan marker detektiran.
Provjeru detekcije vršimo pomoću:
if (multi_config->prevF){ for( int ii = 0; ii < 3; ii++) for ( int jj = 0; jj < 4; jj++) gContextsActive[i].patt_trans[ii][jj] = multi_config->trans[ii][jj]; gContextsActive[i].patt_found = TRUE;
U prevF je zastavica koja označava da je barem jedan marker pronađen. Ako je pronađen,
matricu iz multi_config->trans prebacujemo u gContextsActive[i].patt_trans gdje je i broj
konteksta u kojem je marker.
Ako je iz nekog razloga potrebna lokacija pojedinog markera, može se dobiti iz strukture tipa
ARMultiMarkerInfoT: multi_config->marker[i].trans gdje je i broj markera koji tražimo.
Sl. 3.5 Primjer prikaza lika sa multi-markerom
46
Zaključak
Proširena stvarnost kod mnogih studenata probudi interes kada se spominje. Nažalost, taj
interes splasne kada spoznaju koliko je rada još potrebno da bi se postigla proširena stvarnost.
Kolega Ivor Bakša i ja smo odlučili napraviti AR sustav na fakultetu koji će probuditi interes
budućih studenata i pomoći im ako se odluče za rad na tom području. Osnovnu aplikaciju
koju smo zajedno napravili nastavio sam nadograđivati. Postigao sam integraciju virtualnih
ljudi sa AR sustavom, korištenjem sustava Visage|SDK koji je omogućio i jednostavno
mijenjanje modela. Još bitnije, korištenje Visage je omogućilo i animaciju modela.
Virtualni ljudi su uključeni u program sa idejom interakcije, koja nažalost još nije ostvarena.
Omogućen je zato prvi korak kako bi se smjestili u prirodnu okolinu. Korištenjem multi-
markera otvorena je mogućnost proširivanja koordinatnog sistema kako bi bio vezan za
prostoriju. Time se može postići da virtualni ljudi hodaju po prostoriji, sjede, komuniciraju i
izvode različite radnje u prirodnoj veličini.
Ovaj sustav proširene stvarnosti pruža odličnu bazu za nadogradnju. Od poboljšanja samog
sustava do proširivanja sa novim sadržajima Dobar je i kao podsjetnik kod početka razvoja
potpuno novih AR sustava.
47
Literatura
[1] AZUMA, RONALD T. 1997. A Survey of Augmented Reality. Presence: Teleoperators and Virtual Environments 6
[2] IGOR S. PANDŽIĆ, 2004. Virtualna okruženja, Element
[3] IGOR S. PANDŽIĆ, ROBERT FORCHHEIMER, 2002. MPEG-4 Facial Animation – The standard, implementations and applications, John Wiley & Sons
[4] JACKIE NEIDER, TOM DAVIS, MASON WOO, 1993. OpenGL Programming Guide, Addison-Wesley Publishing Company
[5] OZAN CAKMAKCI, JANNICK ROLLAND, 2006. Head-Worn Displays: A Review journal of display technology, vol. 2, no. 3, IEEE
[6] RICHARD S. WRIGHT JR., BENJAMIN LIPCHAK, 2004. OpenGL SuperBible, Sams Publishing
[7] TOMISLAV KOŠUTIĆ, MIRAN MOŠMONDOR, MARIO WEBER, 2004. Osobni virtualni likovi u pokretnoj mreži, Rad za natječaj za dodjelu rektorove nagrade
[8] EVERYTHING USB, 2008. special interest website focusing on the latest development of Universal Serial Bus technology [http://www.everythingusb.com/logitech_quickcam_for_notebooks_pro.html]
[9] HUMAN INTERFACE TECHNOLOGY LABORATORY INTERNET FORUM 2008. [http://www.hitlabnz.org/forum/archive/index.php/]
[10] HUMAN INTERFACE TECHNOLOGY LABORATORY, UNIVERSITY OF WASHINGTON, 2008. Documentation of ARToolkit development tool [http://www.hitl.washington.edu/artoolkit/]
[11] OPENGL, 2008. OpenGL Reference Manual, inačica 1.4. [http://www.opengl.org]
[12] STEREO3D, 2008. The independent 3D and Virtual Reality resource [http://www.stereo3d.com/3dhome.htm]
[13] TECHGAGE, 2008. independent technology news site for IT professionals [http://techgage.com/article/logitech_quickcam_for_notebooks_pro/]
[14] VISAGE TECHNOLOGIES, 2008. - The Face Animation Company, [www.visagetechnologies.com]
[15] WIKIPEDIA 2008. encyclopedia [www.wikipedia.org]
48
Skraćenice
API Aplication Programming Iterface Programsko sučelje
AR Augmented Reality Proširena Stvarnost
ARToolKit Augmented Reality Tool Kit Softverski alat za izradu proširene
stvarnosti
FOV Field Of View Vidno polje
FPS Frames per second Slika po sekundi (brzina
osvježavanja slike)
HMD Head Mount Display Zaslon za glavu
IPD Interpupilary distance Očna distanca
ISMAR International Symposium on Internacionalni simpozij o miješanoj
Mixed and Augmented Reality i proširenoj stvarnosti
OpenGL Open Graphics Library Softverski API za grafičke aplikacije
OS Operating System Operativni sustav
SDK Software Development Kit skup računarskih alata
VGA Video Graphics Array Analogni računalni video standard
VST-HMD Video see trough HMD Zaslon za glavu temeljen na video
miješanju
49
Popis stranih izraza
Binarization Binarizacija
Binocular HMD Binokularni HMD
Biocular HMD Biokularni HMD
Callback povratni poziv
Computer vision Računalni vid
Device name Ime uređaja
Device id Identifikator uređaja
Framework konceptualna struktura za rješavanje problema
Hardware hardver, slopovska/strojna oprema
Library Biblioteka, kolekcija subrutina skupljenih u
jednu datoteku
Logitech QuickCam For Notebooks Pro Usb kamere marke Logitech
Mixing Miješanje
multi-marker sustav sa više markera
Open source Kod nezaštićen autorskim pravom
Optical combiner Optička mješalica, uređaj za miješanje slike
kod optičkog mješanja
pixel per display Pikseli po zaslonu
Position/orientation Položaj/orijentacija (u prostoru)
Registration Poravnavanje
Render (to Screen) Prikazivanje, izvođenje, računalstvu se koristi
za iscrtavanje (može biti na ekran ili u
memoriju grafičke kartice)
Software Programska oprema
50
Telepresence prisutstvo na daljinu
Tracking Slijeđenje
Treshold image Trashold slika (slika dobivena postupkom
binarizacije)
Video Compositor Video mješalica, Uređaj za mješanje kod video
mješanja.
Video Stream Struja videa, u računalstvu se koristi za niz
bitova koji predstavlja video zapis
51
Dodatak
Upute za instalaciju opreme Spajanje opreme se vrši u dva dijela. Prvi dio se odvija prije namještanja slike na računalu, a
drugi nakon.
Sl. 0.1 Priključci na adapteru za HMD
Potrebno je spojiti video ulaze HMD na adapter. Na slici (Sl. 0.1) je prikazan adapter i
priključci. Kablove je potrebno priključiti pravilno, postoje lijevi i desni označeni su sa L i R.
Nakon toga je potrebno spojiti kamere preko USB priključaka. Kod spajanja kamera nije
bitno koji USB priključci računala se koriste.
Drugi dio prikapčanja se odvija tek kad namjestimo sliku na monitoru. Kablovi monitora
priključeni u grafičku karticu se isključuju i zamjenjuju kablovima koji vode do HMD
adaptera. Potrebno ih je spojiti kao na slici (Sl. 0.2) koristeći adaptere za vga izlaz.
Sl. 0.2 Priključeni kablovi na grafičku karticu
Adapteri za video izlaze se moraju koristiti, inače postoje prolemi sa slikom.
52
Upute za korištenje Prvo se provede prvi korak instalacije opreme opisan ranije. Prije pokretanja programa
potreno je namjestiti sliku. Uključuju se oba monitora. U podešenjima slike potrebno je
odabrati opciju horizontal span. Rezolucija slike mora biti 1280x480 kako bi HMD mogao
raditi (HMD ima rezoluciju ekrana 640x480, za oba ekrana to je 1280x480).
Potrebno je pokrenuti jednu od verzija programa. Za obje kamere potrebno je odabrati
rezoluciju 640x480 i 30 FPS (Sl. 0.3). Nakon pokretanja dobivena su 2 prozora, po jedan za
svaku kameru. Prozor lijeve kamere potrebno je staviti na lijevi ekran, a desne na desni.
Sl. 0.3 Odabir rezolucije i FPS kamere
Sada je potrebno provesti drugi korak instalacije opreme. HMD je sada spreman za korištenje.
Marker se nalazi na kartonskom podlošku. Treba ga se postaviti na željenu lokaciju. Prilikom
pogleda na marker sa HMD-om vidjet će se virtualni lik.
Pokretanje na drugim računalima Ukoliko se program želi pokrenuti na novom računalu, prvo je potrebno provjeriti da li ima
odgovarajuću grafičku karticu. Grafička kartica mora imati barem 2 video izlaza. Mora
postojati mogućnost podešavanja rezolucije 1280x480. Moguće je da kod noviji driver za
grafičku karticu ne podržava tu rezoluciju, kao u ovom slučaju. Kod takvog slučaja potrebno
je na web-u proizvođača pronaći stariju verziju koja možda podržava tu rezoluciju.
Računalo mora imati i barem 2 usb priključka, verzije 2.0.
53
Potrebno je instalirati sav potreban software i prije pokretanja programa dobro je provesti
osnovne testove ARToolKit-a. Od instaliranih programa potrebno je imati: DirectX (verzija
9.0 ili više), Glut, library ARToolkita, library Visage|SDK.
Prilikom podešavanja datoteka za kamere (WDM_camera.xml i WDM_camera1.xml) device
id kamera može se dobiti pomoću programa Graphedit.
Ukoliko postoje problemi sa pokretanjem programa, pomoć je najbolje potražiti na web-u
ARToolKit-a ili Visage Technologies. Dobrih savjeta ima na forumu Human Interface
Technology Laboratory. Lokacije su u popisu literature.