SVEUČILIŠTE U ZAGREBU

FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA



RAZVOJ APLIKACIJA ZA OSTVARIVANJE VIRTUALNE STVARNOSTI

Diplomski
rad

Autor:
Krešimir Prcela

Zagreb,
rujan 2002.

 

Snimi izvorni kod aplikacije (VR_ver223_source.zip)
Snimi izvršni kod aplikacije (VR_ver223_release.zip)


SADRŽAJ


1. Virtualna stvarnost
2. Cilj diplomskog rada
3. Uređaji za ostvarivanje virtualne stvarnosti
3.1. Ulazni uređaji
3.2. Izlazni uređaji
3.3. Virtualni sustavi
3.4. Uređaji korišteni u aplikaciji
4. Realizacija virtualne scene
4.1. Matematički opis virtualne scene
4.2. Pogreška praćenja mete
4.3. Programsko ostvarenje virtualne scene
5. Korisnik i aplikacija virtualne stvarnosti
6. Povezanost aplikacije i sklopovlja
6.1. Povezanost aplikacije sa grafičkim sklopovljem
6.2. Povezanost aplikacije sa davačem orijentacije
6.2.1. Detektiranje davača orijentacije
6.2.2. Očitavanje orijentacije
6.2.3. Prekid komunikacije
7. Korištenje aplikacije
8. Dijagram toka programa
9. Opis ulaznih i izlaznih datoteka
9.1. Ulazne datoteke
9.2. Izlazne datoteke
10. Rezultati
10.1. Kašnjenje
10.2. Pogreška praćenja mete
11. Primjena virtualne stvarnosti
12. Daljnji razvoj aplikacije
13. Zaključak
14. Literatura
Dodatak A.
Dodatak B.
Dodatak C.
Dodatak D.



1. VIRTUALNA STVARNOST

Jedna od definicija virtualne stvarnosti glasi:

"Virtualna stvarnost je način na koji ljudi vizualiziraju stvarnost, upravljaju i komuniciraju sa računalom i vrlo složenim podacima".

Već od razvoja prvih računala čovjek je pokušavao stvoriti virtualnu sliku svijeta kojeg bi na jednak način, kao i stvarni svijet, mogao doživjeti svim osjetilima i u kojem bi mogao svojom virtualnom prisutnošću sudjelovati u procesima koji ga mijenjaju i oblikuju. Iako još nije u potpunosti ostvarena, ova ideja zajedno sa tehnologijom, polako, u dugom nizu godina pretvara se u stvarnost i postiže sve veću primjenu u mnogim područjima ljudske djelatnosti.

Osnovna uloga koju ima virtualna stvarnost je pojednostavljenje upravljanja složenim procesima, tako da virtualna stvarnost bude na višoj razini od samog računala. Čovjeku je prirodnije upravljati nekim procesom boraveći u virtualnoj okolini nego da upravlja računalom. Upravo ta činjenica čini virtualnu stvarnost toliko zanimljivom i privlačnom za istraživanje.

Virtualni svijet može biti računalno oblikovan trodimenzionalni tehnički ili arhitektonski model, znanstvena simulacija ili npr. pogled u bazu podataka. Razvijeni su mnogi programski alati za dizajniranje virtualnih svjetova koji ne moraju biti samo kopija realnog svijeta, nego i objekti iz mašte kojima dajemo realne fizikalne ili psihičke osobine.

Izrađeni su različiti uređaji koji u komunikaciji sa računalom omogućuju čovjeku interakciju i percepciju virtualnog svijeta. Uređaji za percepciju nazivaju se još i izlazni jer im računalo šalje generirane informacije o slici, zvuku, sili, mirisu, temperaturi, o svemu onome što čovjek može percipirati, a sama svrha tih uređaja je pretvoriti te informacije u oblik koji je prilagođen čovjekovim osjetilima. Uređaji za interakciju ili ulazni uređaji, šalju računalu pretvorene informacije o ljudskim pokretima, ljudskom govoru, pulsu i slično. Svi uređaji nastoje se što bolje objediniti u jedan virtualni sustav kako bi čovjek što potpunije percipirao i interaktirao u virtualnom svijetu.

U ovom radu pokušao sam se što bolje upoznati sa ovim uređajima, i pokušao sam ostvariti virtualnu scenu. Također sam želio izvesti mjerenja s kojima bi ispitao koliko je korisnik virtualno prisutan i koji sve tehnički uvjeti moraju biti ispunjeni da bi se uopće moglo govoriti o nekakvom ostvarenju virtualne stvarnosti.



2. CILJ DIPLOMSKOG RADA

Cilj diplomskog rada je pobliže upoznavanje sa pojmom virtualne stvarnosti i njeno praktično ostvarenje. Da bi ostvario ovaj cilj morao sam najprije proučiti programske alate za izradu aplikacija koje bi simulirale virtualnu stvarnost i koje bi omogućile komunikaciju sa virtualnim uređajima. Za programsku realizaciju trodimenzionalnih sustava danas se najviše koriste DirectX i OpenGL. Teško je reći koji je od ova dva grafička alata napredniji. Oba alata se iz verzije u verziju unapređuju i postaju sve jednostavniji za upotrebu. Njihove biblioteke integriraju se u programske jezike kao što su Microsoft Visual C++, Visual Basic, Borland C++ Builder i drugi. Zbog ranijeg iskustva i zbog činjenice da je programski jezik C++ Builder na višoj razini od programskog jezika Microsoft Visual C++, te i time jednostavniji za programiranje, odlučio sam se za pisanje koda u C++ Builderu u kojem sam koristio OpenGL biblioteke. Da bi povezao razne virtualne uređaje sa aplikacijom proučio sam gotove programe i biblioteke koje dolaze sa samim uređajima.

Sa izrađenom aplikacijom konačni cilj bio je i snimanje korisnika koji se nalazi u dinamičnoj virtualnoj sceni. Na glavu korisnika se postavi virtualni uređaj HMD (Head Mounted Display - kaciga sa ugrađenim davačem orijentacije i LCD zaslonima) i korisnik treba pokretima glave pratiti metu koja se kreće po virtualnoj sceni. Za vrijeme simulacije mjeri se koliku je prosječnu grešku korisnik radio napravio pri različitim uvjetima, te sam matematičkom analizom tih podataka želio vidjeti koliko je korisnik brzo i točno mogao pratiti metu, te koji tehnički uvjeti moraju biti zadovoljeni, da bi promatrač bio što manje ometan i prisutan u virtualnoj stvarnosti.



3. UREĐAJI ZA OSTVARIVANJE VIRTUALNE STVARNOSTI

Uređaji za ostvarivanje virtualne stvarnosti mogu se po načinu komunikacije sa računalom podijeliti na ulazne i izlazne. Ulazni uređaji omogućavaju nam interakciju, a izlazni percepciju virtualne stvarnosti.

3.1. ULAZNI UREĐAJI

- 3D miševi (spacemouse) i prostorne kugle (spaceball) - služe za precizno kretanje i izmjenu virtualne scene.

- 3D digitalni davač koordinata (digitizer) - daje koordinate točke u stvarnom prostoru. Koristi se za izgradnju virtualne scene.

Slika 3.1. 3D miš

Slika 3.2. Prostorna kugla


- davači orijentacije (tracker ili tracking device) - daju informacije o orijentaciji. Imaju 3 stupnja slobode , tj. daju 3 kuta (azimut, elevacija i kut inklinacije). Neki bolji modeli daju i informaciju poziciji (koordinate položaja). Davači orijentacije mogu biti: elektromagnetski, mehanički, optički, akustički, infracrveni i inercijalni.

Slika 3.3. Digitalni davač koordinata - digitizer

Slika 3.4. Davač pozicije - tracker


- davači pozicije oka - prate poziciju centra vidnog polja (fovea) na retini. Na temelju smjera gledanja mogu se obavljati razne akcije: promjena virtualne scene, navigacija itd.

- rukavica (cyber glove) - rukavica daje informaciju o položaju čovjekove šake.

- mehanička ruka - pričvrsti se za čovjekovu ruku i daje informaciju o njenom položaju. Jednim dijelom ovo je i izlazni uređaj jer prima iz računala povratnu informaciju o sili i sa tom silom djeluje na ruku.

Slika 3.5. Rukavica - Cyber glove

Slika 3.6. Mehanička ruka


- kibernetičko odijelo (cyber suite) - odijelo koje bežičnim načinom šalje informacije o položajima zglobova ljudskog tijela. NASA ga koristi za testiranje biomehanike astronauta za vrijeme svemirskih letova.

Slika 3.7. Kibernetičko odijelo - cyber suite

 

3.2. IZLAZNI UREĐAJI

- stereo naočale (stereo glasses) - naočale sa LCD zaslonima koji prikazuju različite slike za lijevo i desno oko što daje percepciju trodimenzionalnosti . Sinhroniziraju se sa monitorom tako da se na monitoru naizmjenično prikazuju slika lijevog i slika desnog oka. Moguće je ostvariti brzine do 140 slika po sekundi.

Slika 3.8. Stereo naočale


- head mounted display - HMD - kaciga sa ugrađenim zaslonima ispred svakog oka, slušalicama i davačem pozicije i orijentacije. Postoji HMD sa potpunom i miješanom virtualnom stvarnosti. Kod izvedbe HMD-a sa potpunom virtualnom stvarnosti korisnik vidi na zaslonu samo sliku virtualnog svijeta, dok kod HMD-a sa miješanom stvarnosti korisnik kroz polu prozirni zaslon vidi sliku pravog svijeta, dok se na samom zaslonu prikazuje virtualna slika. Najčešće ta virtualna slika predstavlja informaciju o realnom svijetu. Npr. tu izvedbu HMD-a koriste piloti kojima se npr. na zaslonu daju informacije o pravom položaju mete.

Slika 3.9. HMD sa potpunom virtualnom stvarnosti

Slika 3.10. HMD sa miješanom virtualnom stvarnosti


- cyber dodir (cyber touch) - osim što davaju položaj informaciju o položaju prstiju, ove rukavice imaju ugrađene na vrhu svakog prsta vibracijske stimulatore koji služe za prenošenje osjeta opipa.

Slika 3.11. Cyber touch


- uređaji za generiranje 3D zvuka - korisnik može locirati odakle dolazi zvuk. Danas su vrlo rašireni i cijenom pristupačni. Besplatan alat za generiranje trodimenzionalnog zvuka koji se može integrirati u C++ aplikacije je Open Audio Library.

- uređaji za generiranje mirisa, temperature

- uređaji za generiranje sile - različiti tipovi uređaja koji se uglavnom koriste za zabavu

Slika 3.11.a. Igraća palica sa povratnom silom (force feedback joystick)

Slika 3.11.b. Stolica sa ugrađenim mehanizmom za povratnu silu

Slika 3.11.c. Odijelo sa povratnom silom (simulacija borilačkih sportova)




3.3. VIRTUALNI SUSTAVI

Uz pomoć ovih uređaja izgrađeni su razni virtualni sustavi (VR systems). Jedan od takvih sustava je CAVE (pećina, spilja) izrađen na sveučilištu u Chicagu. To je prostor veličine sobe u kojoj je na zidove i na strop projicirana stereo slika virtualnog svijeta. U tom prostoru može se istovremeno nalaziti više korisnika sa stereo naočalama. Korisnici imaju podijeljene uloge u virtualnom svijetu. Prostor je ujedno i trodimenzionalno ozvučen. Korisnici se po virtualnoj sceni kreću sa malim štapićem (wand) kojeg drže u ruci. Na štapiću je integriran davač pozicije (tracker) koji omogućava usmjereno kretanje. Unutar tog prostora korisnici se mogu i normalno kretati.


Slika 3.12. Model virtualnog sustava CAVE


Slika 3.13. Virtualni sustav CAVE

Zanimljivi su i distribuirani virtualni sustavi koji se sastoje od više umreženih računala i jednog zajedničkog virtualnog svijeta. Korisnici mogu biti i fizički vrlo udaljeni. Na ovaj način moguće je raditi složene simulacije sa više učesnika i sa njihovom interakcijom. Ovakvi distribuirani virtualni sustavi pogodni su za vojne svrhe. Jedini problem kod ovakvih sustava je međusobna sinhronizacija različitih računala.

Još jedan oblik virtualnih sustava je i teleprisutnost ili virtualna prisutnost (telepresence, virtual presence). Svrha ovakvih sustava je virtualna prisutnost osobe na udaljenoj lokaciji od stvarne fizičke prisutnosti. Ovakav sustav koristi se u medicini. Kirurg koji je fizički udaljen od pacijenta virtualno može upravljati operacijskim uređajima. Jedan od uvjeta za izvedivost ovakve simulacije u realnom vremenu je brza komunikacijska mreža. NASA koristi telerobotiku za istraživanje svemira. Robot ima ugrađene kamere, može se bežično upravljati i ima ostali pribor za kopanje po svemirskim površinama.


3.4. UREĐAJI KORIŠTENI U APLIKACIJI

Jedan od uređaja za prikaz virtualne stvarnosti koji se može detektirati u ovoj aplikaciji je VFX 3D HMD. Ovaj uređaj ima ugrađen davač orijentacije koji daje orijentaciju glave i ima dva zaslona koji služe za adekvatan prikaz scene ovisno o orijentaciji glave.

Slika 3.14. VFX 3D HMD

Slika 3.15. VFX 3D HMD sa adekvatnom opremom

Tehničke karakteristike ovog uređaja:
2 LCD zaslona dijagonale 0.7", 16 bitna boja, širina vidnog polja 35°. LCD zasloni imaju izvod koji se zajedno sa monitorom spaja na izlaz iz grafičke kartice. Mogu raditi i u stereo načinu.
Davač orijentacije ima 3 senzora: rotacija lijevo/desno (Yaw - kut oko Y osi, 360°, preciznost ±0.1°), rotacija gore/dole (Pitch - kut oko X osi, ±70°, preciznost ±0.1°) i naginjanje lijevo/desno (Roll - kut oko Z osi, ±70°, preciznost ±0.1°). Sve 3 vrijednosti su u 12 bitnom formatu. Komunicira preko serijskog ulaza (porta). Također ima ugrađene slušalice koje se spajaju na izlaz iz zvučne kartice (Line Out).

Aplikacija prepoznaje i neke davače orijentacije serije Intersense. To su IS-300, IS-600, IS-900, IS-1200, InertiaCube2 i sve verzije InterTrax-a. Uz te davače orijentacije dolaze i biblioteke koje se lako integriraju u programski kod.

Davač orijentacije IS-300 testiran je sa ovom aplikacijom. Daje vrijednosti za 3 prostorna kuta, spaja se na serijski ulaz i može raditi brzinom prijenosa do 115,200 kb/s, maksimalna osjetljivost na kutnu brzinu je 1,2°/ms, kutna rezolucija je 0.02° i kutna točnost je ±1.0°. Modeli IS-600 i IS-900 su slični ovom modelu, dok model IS-1200 je specifičan po tome što ima 6 stupnjeva slobode.


Slika 3.16. Davač orijentacije IS-300

Još jedan zanimljiv model koji je testiran je i davač orijentacije Intertrax2. Ima tri stupnja slobode (Pitch ±80°, Yaw ±180°, Roll ±90°), kašnjenje oko 4 ms, kutna preciznost mu je ±0.02°, maksimalna osjetljivost na kutnu brzinu je 0,72°/ms.

Slika 3.17. Davač orijentacije InterTrax2

Slika 3.18. Naočale i-glasses SVGA

Naočale koje sam testirao uz ovaj davač orijentacije (i-glasses SVGA) imaju širinu vidnog polja od 26,5°, mogu raditi u rezoluciji 640x480 i 800x600 pri frekvencijama od 56-100Hz, sa 18 bitnom bojom.


4. REALIZACIJA VIRTUALNE SCENE

4.1. MATEMATIČKI OPIS VIRTUALNE SCENE

Virtualni promatrač nalazi se u trodimenzionalnoj virtualnoj sceni. Svi objekti na sceni sastavljeni su od vrhova koji imaju svoje koordinate u globalnom koordinatnom sustavu scene. Položaj promatrača u globalnom koordinatnom sustavu određen je jednom točkom i s tri prostorna kuta.

Slika 4.1. Promatrač u virtualnom sustavu


Nakon što promatrača translatiramo u neku točku virtualne scene (slika 4.2.), koju ćemo označiti sa O'(tx,ty,tz), trebamo ga još rotirati za vrijednosti kutova za koje je promatrač okrenuo glavu, tj. one kutove koje očitamo sa davača orijentacije. Davač orijentacije daje tri kuta koje ćemo označiti sa a, b i g. Kut g predstavlja prvu inklinaciju ili rotaciju promatračeve glave u pozitivnom smjeru oko njegove osi z' (Slika 4.3.). Pozitivni smjer rotacije određen je pravilom desne ruke.

Slika 4.2. Translacija promatrača iz ishodišta sustava scene

Slika 4.3. Rotacija promatrača oko vlastite osi z'

Sada pravimo drugu rotaciju promatrača koja predstavlja elevaciju ili okretanje glave u smjeru gore i dole. Rotiramo koordinatni sustav promatrača oko njegove trenutne osi x' za kut a (Slika 4.4.). Konačno, radimo treću rotaciju oko osi y' za kut b koja predstavlja rotaciju glave lijevo i desno (Slika 4.5.).

Slika 4.4. Rotacija promatrača oko vlastite osi x'

Slika 4.5. Rotacija promatrača oko vlastite osi y'


Da bi iscrtali na zaslon scenu onako kako je vidi promatrač, moramo svim objektima u sceni preračunati koordinate iz sustava scene u sustav promatrača. Ovaj postupak suprotan je od prethodnog. Npr. ako poznajemo koordinate vrha M(mx,my,mz) u sustavu scene, trebamo najprije napraviti translaciju suprotnu od one u prethodnom postupku (Slika 4.7.).

Slika 4.6. Točka M u sustavu scene i promatrača

Slika 4.7. Translacija točke M u smjeru
-tx, -ty i -tz

Sada radimo rotaciju oko osi z za kut -g. Ova rotacija je suprotna od one oko osi z'.

Slika 4.8. Rotacija oko osi z za kut -g

Slika 4.9. Rotacija oko osi x za kut -a


Zatim rotiramo promatrača oko osi x za kut -a.

Konačno radimo i zadnju rotaciju oko osi y u negativnom smjeru za kut -b.

Slika 4.10. Rotacija oko osi y za kut -b

Slika 4.11. Konačni položaj vrha M

Općenito odnose bilo kojeg vrha M(mx,my,mz) i njegovog transformiranog vrha M'(mx',my',mz') u sustavu promatrača možemo opisati sljedećom jednakošću:


gdje su sa R označene pripadne matrice rotacije, a sa T matrica translacije. Ako uvrstimo predznak minus unutar samih matrica dobije se:


Množenjem ovih matrica izračunaju se elementi konačne matrice transformacija:

T11=cosbcosg-sinbsinasing
T12=cosbsing+sinbsinacosg
T13=-sinbcosa
T14=-(txT11+tyT12+tzT13)
T21=-cosasing
T22=cosacosg
T23=sina
T24=-(txT21+tyT22+tzT23)
T31=sinbcosg+cosbsinasing
T32=sinbsing-cosbsinacosg
T33=cosbcosa
T34=-(txT31+tyT32+tzT33)
T41=0
T42=0
T43=0
T44=1

Ovaj postupak naziva se Eulerova transformacija, a pripadni kutovi a, b i g Eulerovi kutovi [Vince, 1995].

4.2. POGREŠKA PRAĆENJA METE

Zahtjev koji se postavlja promatraču je što preciznije praćenje mete, tj. promatrač se mora zakrenuti tako da se središte mete poklapa sa središtem zaslona. Ako sa jednim pravcem označimo smjer gledanja, a sa drugim smjer od očišta prema središtu mete, greška koju promatrač učini predstavljena je veličinom kuta kojeg zatvaraju ta dva pravca. Pri tome udaljenost mete od promatrača nije bitna jer pogreška ostaje ista (Slika 4.12).

Slika 4.12. Pogreška praćenja mete

Slika 4.13. Referentni smjer gledanja


Kutna pogreška može se lako izračunati ako su poznati vektori koji određuju ova dva pravca. Vektor iz očišta prema meti predstavljen je sa dva poznata vrha. Vektor smjera gledanja određen je pomoću dva kuta koja se očitaju sa davača orijentacije. Referentni smjer gledanja je u smjeru negativne z osi, a os y predstavlja vertikalnu os promatrača . Smjerovi rotacija koje daje davač orijentacije i referentni smjer gledanja promatrača prikazan je na slici 4.13.

Dvije rotacije promatrača, za kutove a i b koji su očitani sa davača orijentacije, imaju za posljedicu promjenu smjera gledanja. Rotacijom jediničnog vektora koji predstavlja smjer gledanja dobijemo novi vektor smjera gledanja v. Na slici 4.14. napravljene su rotacije za kut -a i b. Sa VP označen je virtualni promatrač, a sa x, y i z osi koje su paralelne sa osima sustava virtualne scene.

Slika 4.14. Promjena smjera gledanja nakon dvije rotacije


Iz slike lako izračunamo komponente vektora v:

vy=sin(-a)=-sina
vx=cos(-a)sinb=cos(-a)sinb=-cosasinb
vz=-(cos(-a)cos(b))=cosacosb

Ako sa u označimo jedinični vektor smjera od očišta prema meti konačna kutna pogreška koju učini promatrač je:



Da bi izračunali horizontalnu i vertikalnu pogrešku, tj. vertikalno i horizontalno kutno odstupanje mete, analogno prethodnom opisu, također je potrebno i položaj mete opisati pomoću dva kuta.

Slika 4.15. Položaj mete određen je sa dva kuta


Na slici ova dva kuta označena su sa j i J. Vrijednosti ovih kutova nalaze se u sljedećim intervalima:

Kao i za vektor smjera gledanja vrijede ove jednadžbe:
uy=-sinJ
ux=-cosJsinj
uz=cosJcosj

Odavde se izvedu vrijednosti za J i j:

Za izračunati kut J nemamo nikakvih problema jer je dobiveno rješenje iz zadanog intervala. Međutim za kut j0 dobivaju se vrijednosti iz intervala što zadovoljava samo uz uvjet da je uz<0. Popravak ove jednakosti za ostale uvjete nalazi se u tablici 4.1.

Tablica 4.1. Proračun kuta j


Vrijednosti za vertikalnu i horizontalnu pogrešku se sada lako daju izračunati:

Verror=a-J
Herror=b-j


4.3. PROGRAMSKO OSTVARENJE VIRTUALNE SCENE

Rotacije obavljamo sa kutovima koje očitavamo sa davača orijentacije. U kodu je to izvedeno sa OpenGL naredbama:

glRotatef(AngleY,0.0,0.0,1.0); //M=M*Ry
glRotatef(AngleX,1.0,0.0,0.0); //M=M*Rx
glRotatef(AngleZ,0.0,1.0,0.0); //M=M*Rz
glTranslatef(-posx,-posy,-posz); //M=M*T
//konačni rezultat: M=M*Ry*Rx*Rz*T

Koordinate promatrača su posx, posy i posz. Kut AngleX (a) predstavlja rotaciju glave promatrača u smjeru gore/dole. Kut AngleY (b) predstavlja okretanje glave u smjeru lijevo/desno. Kut AngleZ (g) predstavlja naginjanje glave lijevo/desno. Kutovi koje daje davač orijentacije su suprotnog smjera od pozitivnog smjera rotacije pa tako nije potrebno stavljati predznak minus ispred svakog kuta. Kod izvođenja svake naredbe OpenGL vlastitu matricu M množi sa zadanom matricom rezultat sprema ponovno matricu M [MSDN]. U konačnoj matrici M redoslijed transformacija čita se sa desna na lijevo. To znači da je prvo obavljena translacija, zatim rotacija oko z osi, itd. Kod iscrtavanja vrha, matrica M se množi sa vektorom vrha, i ostaje sačuvana za sljedeći vrh, a rezultat je još potrebno pomnožiti sa matricom perspektivne projekcije.

Ovdje je dana programska struktura virtualnog svijeta. Cijela scena sastavljena je od statičnih objekata i jednog dinamičnog objekta kojeg korisnik treba pratiti. U strukturi scene zapisane su i teksture objekata. Svaki objekt sastavljen je od trokuta i vezan je za odgovarajuću teksturu. Svaki vrh u trokutu predstavljen je sa tri prostorne koordinate i dvije koordinate koje određuju točku unutar plošne teksture. Tekstura je kvadratnog oblika i broj piksela po jednoj stranici mora biti potencija broja 2.

Osnovna klasa World sadrži metode za učitavanje podataka iz ulaznih datoteka u vlastitu strukturu, metodu za iscrtavanje pojedinog objekta i metodu za proračunavanje položaja dinamičnog objekta, tj. mete.

Slika 4.16. Struktura virtualnog svijeta


Svaki objekt sadrži polje vrhova, tekstura i trokuta. Slika 4.17. prikazuje način povezivanja ova tri polja na primjeru jednostavne trostrane piramide.

Slika 4.17. Model trostrane piramide




Slika 4.18. Način vezanja teksture

Kod definiranja parametara teksture ne smije se desiti da nam dva različita vrha u prostoru imaju iste koordinate u ravnini teksture. Metoda na slici 4.18. čuva neprekidnost teksture na bridovima.

Nakon popunjavanja ovih polja sljedeći dio koda iscrtava zadani objekt na zaslon:

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindTexture(GL_TEXTURE_2D,Scene.texture[Scene.objects[i].texture]);
glTexCoordPointer(2,GL_FLOAT,0,Scene.objects[i].texdata);
glVertexPointer(3,GL_FLOAT,0,Scene.objects[i].pointdata);
glDrawElements(GL_TRIANGLES,Scene.objects[i].numpolies*3,GL_UNSIGNED_INT,Scene.objects[i].triangles);

Naredba glEnableClientState() omogućuje korištenje polja. Naredbe glTexCoordPointer() i glVertexPointer() postavljaju pokazivače na polja tekstura i vrhova. Prva dva parametra označavaju broj koordinata i tip podataka i s njima je točno određena veličina jednog retka u polju. Naredba glDrawElements() iscrtava zadani objekt. Prvi parametar GL_TRIANGLES koristi se za objekte sastavljene od trokuta, drugi parametar je broj vrhova, GL_UNSIGNED_INT je tip podatka i zadnji parametar je pokazivač na trokute zadanog objekta.

Svaki objekt može pozivati neku zasebnu dodatnu OpenGL naredbu ukoliko ne želimo da se svi objekti ponašaju isto. Npr. neki objekt može biti zarotiran ili uvećan ako je u strukturi OpenGLCommand zapisano željeno ime naredbe i njeni parametri.
U strukturu mete (targeta) zapisujemo njene trenutne koordinate. Ako se koristi skokovito kretanje mete potrebno je znati konačni broj pozicija, vrijeme zadržavanja na svakoj poziciji, trenutnu poziciju i u kojem trenutku je meta smještena na tu poziciju.

Prije učitavanja ulaznih podataka u strukturu virtualnog svijeta, u kodu se podešavaju parametri scene kao što su pozicije svjetala i način osvjetljavanja, kvaliteta tekstura, tip materijala od kojeg su građeni objekti, boja pozadine scene, dubina z buffera, širina kuta gledanja, odabir vrste slova i opis pixela (tu se podrazumijeva maksimalno mogući broj boja, način iscrtavanja, dvostruki ili jednostruki buffer i slično).



5. KORISNIK I APLIKACIJA VIRTUALNE STVARNOSTI


Slika 5.1. Korisnici i aplikacija

Na ovoj slici prikazana je osnovna struktura aplikacije i njen način komuniciranja sa korisnikom. Aplikacija iz ulaznih datoteka prima podatke o virtualnoj sceni i pohranjuje ih u radnu memoriju. Korisnik je spojen na vanjske ulazno-izlazne uređaje koji komuniciraju sa računalom i aplikacijom. Među ulazne uređaje podrazumijevamo sklopovlje kojima korisnik može upravljati, dok izlazni uređaji omogućuju korisniku percepciju računalno generiranog virtualnog svijeta. Osnovni program tijekom simulacije snima korisnikove akcije u privremenu memoriju, preračunava u svakom okviru novi položaj svih objekata, računa pogrešku praćenja mete, računa brzinu iscrtavanja scene, obavlja akcije koje je korisnik zadao preko tipkovnice, upravljačke palice ili miša i konačno šalje generiranu sliku na izlazne uređaje. U ovom virtualnom sustavu izlazni uređaji su HMD i monitor. Pri tome se glavni program koristi raznim pomoćnim funkcijama, bibliotekama i API-jima koji mu olakšavaju korištenje upravo ovih izlazno-ulaznih uređaja. Konačno, kada je simulacija gotova, spremaju se podaci o akcijama korisnika u izlaznu datoteku i oslobađa se zauzeta memorija. Izlazna datoteka koristi se za daljnje analize.



6. POVEZANOST APLIKACIJE I SKLOPOVLJA


6.1. POVEZANOST APLIKACIJE SA GRAFIČKIM SKLOPOVLJEM

Općenito, povezanost aplikacije i grafičkog sklopovlja prikazana je na slici 6.1. Na najnižoj razini grafičkim sučeljem upravlja grafički upravljački program (driver). Većina windows aplikacija povezana je ovim upravljačkim programom preko GDI-ja. GDI (graphics device interface) je dio windows API-ja (application programming interface). Sadrži gotove funkcije za crtanje dvodimenzionalnih objekata kao što su npr. iscrtavanje prozora, što korisnicima omogućuje lakše programiranje u windows okruženju. Za jednostavnije programiranje trodimenzionalnih scena razvijen je OpenGL i drugi slični API-ji koji su direktno vezani na grafičke upravljačke programe.

Slika 6.1. Povezanost aplikacije sa grafičkim sklopovljem

Simulacija se izvodi u cjevovodnoj arhitekturi koja se sastoji od tri neovisna dijela:

I. aplikacijski dio - najveći dio same aplikacije izvodi se na centralnom procesoru.

II. sustav za geometrijske proračune - ovdje spadaju operacije koje se bave sa poligonima kao što su npr. izračunavanje koordinata, odsijecanje poligona, vezanje tekstura itd . Obično ovaj dio posla obavlja grafički procesor.

III. rasterski sustav - obavlja proračun vrijednosti boje i dubine za svaki piksel. Za ovaj dio posla zadužen isto grafički procesor.

Pojedini zadaci se u cjevovodnoj arhitekturi obavljaju istovremeno što znatno ubrzava cijeli proces simulacije, a to je vrlo važno za ostvarenje i funkcionalnost virtualne stvarnosti.


Slika 6.2. Cjevovodna arhitektura




6.2. POVEZANOST APLIKACIJE SA DAVAČEM ORIJENTACIJE

Da bi povezao aplikaciju sa HMD-om i davačem orijentacije koristio sam se gotovim pomoćnim upravljačkim datotekama koje dolaze zajedno sa pojedinim uređajima.

Za InterSense trackere potrebno je iz Builder C++ osnovnog programa (VFX3Dtest.cpp) učitati datoteku isense.cpp sa naredbom USEUNIT("isense.cpp"), a identično i za VFX3D kacigu potrebno je učitati datoteku VFXsdk.cpp sa naredbom USEUNIT("VFXsdk.cpp").

Ove dvije datoteke učitavaju DLL datoteke (isense.dll i VFXDrive.dll) u kojima se nalaze funkcije pomoću kojih aplikacija komunicira sa davačem orijentacije. Datoteku isense.dll dovoljno je samo kopirati u radnu mapu, a VFX 3D kacigu potrebno je instalirati nakon čega se datoteka VFXDrive.dll kopira u windows sistemsku mapu. Opisi i deklaracije tih funkcija nalaze se u datotekama isense.h i VFXSDK.h. Ove dvije datoteke su uključene unutar glavnog programa (main.cpp).


6.2.1. DETEKTIRANJE DAVAČA ORIJENTACIJE

Detektiranje davača orijentacije obavlja se u sljedećem dijelu koda:

//-----------------------------------------------------------------------------
//--- DetectTrackers - kod pokretanja aplikacije pokusaj detektirati tracker --
//-----------------------------------------------------------------------------
void __fastcall TForm1::DetectTrackers(void)
{

 //pokusaj detektirati VFX3D tracker
if(!TrackerDetected)
{
Form6->Label1->
Caption="Pokusavam detektirati VFX 3D tracker...";
if (VFXLoadDll()==VFX_OK)
{
TrackerDetected=true;
Tracker=VFX3D_TRACKER;
Form6->Label1->Caption="Tracker VFX3D je detektiran.";
}
}

//pokusaj detektirati InterSense tracker
if(!TrackerDetected)
{
/* Detect first tracker. If you have more than one InterSense device and would like to have a specific tracker, connected to a known port, initialized first, then enter the port number instead of 0. Otherwise, tracker connected to the rs232 port with lower number is found first. USB devices are always found first. */

Form6->Label1->Caption="Pokusavam detektirati InterSense tracker...";
handle = ISD_OpenTracker( NULL, 0, FALSE, FALSE );
//automatsko detektiranje trackera

//ako nije detektiran tracker
if(handle > 0)
{

TrackerDetected=true;
Tracker=INTERSENSE_TRACKER;
Form6->Label1->Caption="Tracker InterSense je detektiran.";

}

}
//ako nije detektiran nijedan tracker
if(!TrackerDetected) Form6->Label1->Caption="Tracker nije detektiran!";

}
//-----------------------------------------------------------------------------

U kodu podebljanim slovima označene su funkcije koje detektiraju davač orijentacije i koje su integrirane u DLL datoteke.

Opis ISD_OpenTracker() funkcije:

typedef int ISD_TRACKER_HANDLE;
...
ISD_TRACKER_HANDLE ISD_OpenTracker( HWND hParent, DWORD commPort, BOOL infoScreen, BOOL verbose );
Funkcija ISD_OpenTracker vraća vrijednost 0 ako nije učitan DLL ili -1 ako je došlo do greške prilikom detektiranja InterSense davača orijentacije. Inače vraća identifikacijski broj uređaja (tipa int). Ukoliko se želi izvršiti automatsko detektiranje potrebno je postaviti vrijednost commPort=0. Ostali argumenti nemaju značajniju ulogu.

Opis VFXLoadDll() funkcije:
extern long VFXLoadDll( void );
Funkcija VFXLoadDLL() učitava DLL i detektira VFX 3D kacigu i vraća vrijednost VFX_OK ako je to uspješno obavila. Inače funkcija vraća točan tip greške koji se desio. Tipovi grešaka su navedeni u datoteci VFXsdk.h.



6.2.2. OČITAVANJE ORIJENTACIJE

Očitavanje kutova sa davača orijentacije riješeno je u sljedećem bloku:

//---------------------------------------------------------------------------
//--- GetTrackerAngles - sprema polozaj trackera u AngleX, AngleY i AngleZ --
//---------------------------------------------------------------------------

void __fastcall TForm1::GetTrackerAngles(float &AngleX, float &AngleY, float &AngleZ)
{
if(TrackerDetected && Tracker==INTERSENSE_TRACKER)
{
ISD_GetTrackerData( handle, &data );
AngleX=-data.Station[0].Orientation[1]-AngleX0;
AngleY=data.Station[0].Orientation[0]-AngleY0;
AngleZ=data.Station[0].Orientation[2]-AngleZ0;
}

if(TrackerDetected && Tracker==VFX3D_TRACKER)
{
long yaw,pitch,roll;
VFXGetTracking( &yaw, &pitch, &roll );
// yaw in range 0 - 655535, horizontal direction
// yaw 0 = -179.99 deg
// yaw 32768 = 0 deg
// yaw 65535 = 180.00 deg
AngleY=-((((float)yaw*360)/65535)-180)-AngleY0;
// pitch range is 20025 - 45511, head up-down
// pitch 45511 = 70 deg
// pitch 20025 = -70 deg
// it must be minus from some reason ??
AngleX=-(((float)pitch*360)/65535)+180-AngleX0;
// roll shuld handled as pitch
AngleZ=(((float)roll*360)/65535)-180-AngleZ0;
}
}
//-----------------------------------------------------------------------------

Podebljanim slovima označene su funkcije koje daju orijentacijske kutove. Ukoliko je detektiran InterSense davač orijentacije funkcija ISD_GetTrackerData( handle, &data ) očitava orijentaciju i položaj i sprema ih u strukturu data.

ISD_DATA_TYPE data;
typedef struct
{
float Orientation[4]; /* Supports both Euler and Quaternion formats */
float Position[3]; /* Always in meters */
...

} ISD_STATION_DATA_TYPE;

typedef struct
{
ISD_STATION_DATA_TYPE Station[ISD_MAX_STATIONS];

} ISD_DATA_TYPE;

Varijabla Orientation[4] sadrži vrijednosti trenutnog zakreta glave oko prostornih osi i vrijednosti tih kutova su izražene u stupnjevima. Varijabla Position[3] daje koordinate pozicije ukoliko se radi o davaču orijentacije i pozicije (6DOF - davač ima 6 stupnjeva slobode).
Ako je VFX 3D davač orijentacije ranije detektiran funkcija VFXGetTracking( &yaw, &pitch, &roll) očitava kutove i sprema ih u varijable prostornih kutova yaw, pitch i roll. Te vrijednosti tipa long potrebno je naknadno pretvoriti u stupnjeve, kao što je prikazano u kodu. Konačne ispravljene vrijednosti kutova spremaju se u varijable float AngleX, float AngleY i float AngleZ.

6.2.3. PREKID KOMUNIKACIJE

Prilikom napuštanja aplikacije potrebno je osloboditi davač orijentacije. Ovdje je izesen dio koda kojim se to ostvaruje:

//-----------------------------------------------------------------------------
if(TrackerDetected && Tracker==INTERSENSE_TRACKER)
{
if(ISD_CloseTracker( handle )!=0)
MessageBox(NULL,"Unable to free InterSense drivers" ,"Error", MB_ICONERROR);
}

if(TrackerDetected && Tracker==VFX3D_TRACKER)
{
if ( VFXFreeDll() != VFX_OK)
MessageBox(NULL,"Unable to free VFX3D drivers", "Error", MB_ICONERROR);
}
//-----------------------------------------------------------------------------

Funkcija ISD_CloseTracker() ukoliko je uspješno zatvorila InterSense davač orijentacije i oslobodila DLL vraća vrijednost 0, dok funkcija VFXFreeDLL() vraća vrijednost VFX_OK ukoliko je oslobodila VFX davač orijentacije i njegov DLL.


7. KORIŠTENJE APLIKACIJE

Prije samog pokretanja aplikacije potrebno je imati instaliranu svu potrebnu opremu za prikaz virtualne stvarnosti. Ako su pravilno instalirani davači orijentacije, aplikacija prilikom pokretanja javlja poruku u sljedećem prozoru:


Iz ponuđenog izbora biramo davač orijentacije koji ćemo koristiti. Ne možemo istovremeno koristiti dva davača orijentacije. Ukoliko nije detektiran nijedan davač orijentacije moramo odabrati tipku "I don't want to use tracker". U tom slučaju možemo se koristiti tipkovnicom kako bi upravljali virtualnog promatrača.

Nakon toga otvara se osnovna forma sa glavnim izbornikom.


Sve postavke simulacije postavljene su na standardne vrijednosti tako da se simulacija može odmah pokrenuti. Simulacija se pokreće pritiskom na kombinaciju tipki Ctrl+R ili iz glavnog izbornika (Simulation->Run).

Simulacija se zaustavlja sa tipkom Esc ili iz izbornika (Simulation->Stop). Meta se počinje kretati pritiskom na funkcijsku tipku F3, a zaustavlja se sa tipkom F4. Snimanje kutova sa davača orijentacije u memoriju pokreće se sa tipkom F5, a zaustavlja sa F6. Ukoliko nije uključena opcija Save data to file podaci o kutovima se nakon zaustavljana simulacije neće spremiti u izlaznu datoteku. U standardnim postavkama nije uključena ova opcija tako da u ovom slučaju podaci neće biti spremljeni.

Unutar ovog prozora nalaze se informacije o trenutnom okviru. To su brzina simulacije (izraženo u FPS), orijentacija i položaj promatrača, vektor smjera gledanja i vektor koji opisuje metu, vrijeme proteklo od početka snimanja kretanja promatrača i ukupna, vertikalna i horizontalna pogreška.

Prozor za mijenjanje postavki dobijemo u glavnom izborniku klikom na Simulation -> Options.


Prozor sa postavkama sastoji se od više okvira (panela). U okviru Screen Mode odabiremo rezoluciju zaslona na kojoj će se izvršavati simulacija. Prilikom zaustavljanja simulacije vraćamo se u standardnu rezoluciju. Za sve rezolucije osim standardne radi se sa 16 bitnom bojom.

U okviru Target odabiremo način kretanja mete (targeta). Sa prva dva radio gumba unutar ovog okvira odaberemo jednu od dvije ponuđene parametarske krivulje po kojima se kreće meta. Ispod Target okvira podešavamo amplitude i kružnu frekvenciju (w) za zadanu krivulju. Trećim radio gumbom odabiremo skokovito kretanje mete. Za to je potrebno unutar okvira Target file odabrati neku ulaznu datoteku u kojoj su definirani položaji mete tijekom simulacije.

Opcijom Show info prikazujemo informacije o trenutnom okviru za vrijeme simulacije. Opcijom Extended sight mijenjamo vidljivost proširenog kursora. Točka u koju gledamo označena je sa kursorom koji se sastoji od tri osi. Tako korisniku sa HMD-om bez obzira na njegov položaj plava os uvijek predstavlja vertikalu, zelena os horizontalu, a crvena dubinu tj. smjer z osi. Sa opcijom Show Origin postaje vidljivo ishodište koordinatnog sustava scene.

U okviru Simulation odabiremo datoteku u koju će se spremati podaci o položaju i orijentaciji promatrača. U polje Number of data blocks unosimo broj blokova simulacije koji ćemo snimiti. Svaki blok ima 1024 okvira (framea).

U okviru Model navodimo datoteku u kojoj se nalazi model glave i podešavamo parametre za osvjetljenje, sjenčanje i boju tog modela. Ovaj model zorno prati trenutnu orijentaciju glave.

Datoteka u kojoj je opisana scena odabire se u okviru Scene. Za sada izrađene su tri različite virtualne scene "simple scene.txt", "room.txt" i "new world.txt". Izrađena je posebna aplikaciju za modeliranje scene "new world.txt". Ova aplikacija opisana je u dodatku C.


Slika 7.1. Simple Scene



Slika 7.2. Room



Slika 7.3. New world

Klikom na dugme Tracker u okvir tracker otvara se prozor sa postavkama davača orijentacije.


Kada korisnik postavi glavu u normalni položaj sa tipkom Reset angles sva tri kuta postavljamo na 0°. Sa tipkama Start test i Stop test možemo testirati da li davač orijentacije ispravno radi. Sa tipkom Configure dobivamo detaljnije podatke o konfiguraciji davača orijentacije ukoliko je jedan od modela serije Intersense.


Po završetku simulacije datoteku sa izmjerenim podacima o pokretima glave otvaramo iz glavnog izbornika klikom na View->Data.



8. DIJAGRAM TOKA PROGRAMA



Slika 8.1. Dijagram toka programa


Aplikacija se može podijeliti u nekoliko važnijih programskih blokova kao što je prikazano na slici 8.1. Svaki od ovih blokova poziva se sa nekim događajem, koji može biti aktiviran od strane korisnika ili od samog operativnog sustava.

Kod pokretanja aplikacije, nakon što je kreirana osnovna forma, poziva se blok, tj. funkcija FormCreate(). U ovom bloku inicijalizirane su globalne varijable osnovne forme. Kod zatvaranja aplikacije na identičan način poziva se funkcija FormDestroy(). U ovom bloku oslobađamo zauzetu memoriju, oslobađamo davač orijentacije ukoliko je detektiran, oslobađamo OpenGL prozor i vraćamo radnu rezoluciju monitora.

Korisnik generira događaje kao što su pokretanje i zaustavljanje simulacije, otvaranje forme sa postavkama, otvaranje forme sa izlaznim podacima, zatvaranje aplikacije i slično. Pokretanje simulacije alocira potrebnu memoriju, čita podatke o virtualnom svijetu iz ulaznih datoteka, otvara OpenGL prozor za iscrtavanje i postavlja parametre scene kao što su osvjetljenje, način sjenčanja itd. Zaustavljanje simulacije je obratno. Oslobađa se alocirana memorija i zatvara se OpenGL prozor.


Slika 8.2. Zaustavljanje simulacije


U aplikaciji postoji i blok ApplicationEvents1Idle() koji nije izazvan nijednim događajem i koji se uvijek izvršava. U njemu se nalazi sama petlja simulacije koja se poziva ukoliko je korisnik pokrenuo simulaciju i ako je završeno iscrtavanje trenutnog okvira. Petlja simulacije očitava orijentaciju korisnika sa davača orijentacije, očitava akcije sa tipkovnice, računa pogreške praćenja mete, računa proteklo vrijeme od početka simulacije, sprema tražene podatke trenutnog okvira u memoriju, iscrtava scenu na zaslon i provjerava da li je gotova simulacija.


Slika 8.3. Simulacija jednog okvira


U ovom istom bloku izvršava se testiranje davača orijentacije koje je pokrenuto iz prozora sa postavkama.

Da korisnik ne mora tražiti unutar postavki kako da detektira davač orijentacije to je učinjeno prilikom samog pokretanja aplikacije. Ovo se pokazalo i puno praktičnijim rješenjem kod izvođenja većeg niza mjerenja sa istim davačem orijentacije.



9. OPIS ULAZNIH I IZLAZNIH DATOTEKA


9.1. ULAZNE DATOTEKE

Jedna od ulaznih datoteka je datoteka sa opisom modela glave. Prilikom izvođenja simulacije položaj modela glave određen je položajem davača orijentacije. Datoteka koja predstavlja model glave ima ovakvu strukturu (model_glave.ob):

broj točaka n
broj poligona p

x0 y0 z0
x1 y1 z1
...
xn yn zn

V00 V01 V02
V10 V11 V12
...
Vp0 Vp1 Vp2

Ovaj model predstavljen je skupom od n točaka i svaka točka ima koordinate x, y i z. Poligoni su trokuti čiji su vrhovi upravo u skupu zadanih točaka. Ukupno postoji p poligona u modelu. Svaki vrh poligona predstavljen je jednom točkom. Npr. ukoliko je V71=5 to znači da će prvi vrh sedmog poligona biti točka opisana koordinatama (x5,y5,z5).

Ostale parametre modela kao što su boja modela, tip sjenčanja, izvor svjetlosti za model itd. korisnik može podešavati u aplikaciji. Primjer modela glave koji se nalazi u datoteci glava.ob sastavljen je od 5828 vrhova i 11370 poligona. Simulacija dosta gubi na brzini ukoliko se iscrtava ovaj model glave na zaslon, a to baš i nije poželjno jer se tako korisniku znatno otežava kretanje i snalaženje u sceni. Veličina te datoteke je 340 KB.



Slika 9.1. Mreža poligona koji čine model glave



Druga ulazna datoteka je datoteka sa kojom se popunjava struktura virtualne scene (opis_scene.txt).

//komentari se mogu stavljati u datoteci sa
//dvije kose crte na početku reda
//slobodno se mogu preskakati redovi
//datoteka ima nastavak .txt
broj tekstura
NUMTEXTURES ntex

//datoteke iz kojih se čitaju teksture
FILE ime0.bmp
FILE ime1.bmp
...
FILE imentex.bmp

//broj objekata u sceni
NUMOBJECTS nobj

//pozicija promatrača
POSX: pozx POSY: posy POSZ: posz

//opis objekta
OBJECT 0
{
//opcionalno izvođenje opengl naredbi za zadani objekat
[OPENGL_COMMANDS numcomm
{
openglcommand0(parametri)
openglcommand1(parametri)
...
openglcommandnumcomm(parametri)
}]
TEXTURE t0
NUMVERTEX nver0
NUMPOLIES npol0
POSITION x0 y0 z0

x0 y0 z0 u0 v0
x1 y1 z1 u1 v1
...
xnver0 ynver0 znver0 unver0 vnver0

V00 V01 V02
V10 V11 V12
...
Vnpol00 Vnpol01 Vnpol02
}
...
//opis zadnjeg objekta
OBJECT nobj
{
...
}

Za razliku od modela glave jedan objekt u sceni sastavljen je od vertexa. Vertex je predstavljen koordinatama x,y,z i sa dva parametra u i v. Parametri u i v govore koja točka u nekoj teksturi pripada zadanom vrhu. Svaki objekt ima indeks na pripadnu teksturu koja je zapisana u slikovnoj (bitmap) datoteci i za svaki objekt na sceni mogu se dodati i neke OpenGL naredbe koje se izvršavaju u kodu prije samog iscrtavanja dotičnog objekta.

Primjer ulazne datoteke je new_world.txt. Sastoji se od 4 objekta, 4 teksture i 363 vertexa. Veličina datoteke je 19 KB. Sve slikovne datoteke moraju se nalaziti u istoj mapi u kojoj je datoteka sa opisom scene. Primjer datoteke sa opisom scene u kojoj su rađena mjerenja nalazi se u dodatku A.

Ukoliko ne želimo da se meta ne kreće po točno definiranoj matematičkoj krivulji nego da se skokovito kreće po zadanim točkama potrebno je u postavkama uključiti opciju Custom step i odabrati ulaznu datoteku sa zadanim točkama i vremenima zadržavanja u svakoj točki.

Opis ulazne datoteke za kretanje mete:

NUMPOSITIONS N t0 x0 y0 z0
t1 x1 y1 z1
...
tN xN yN zN

Primjer ulazne datoteke je target.txt i nalazi se u dodatku B.


9.2. IZLAZNE DATOTEKE

Za vrijeme izvođenja simulacije sve informacije o trenutnom položaju davača orijentacije spremaju se u memorijski međuspremnik (buffer). Na kraju simulacije međuspremnik se može spremiti u odabranu izlaznu datoteku. Ovako izgleda struktura izlazne datoteke:

AngleX0 AngleY0 AngleZ0 Timer0 V0 H0 Error0 Theta0 Fi0
AngleX1 AngleY1 AngleZ1 Timer1 V1 H1 Error1 Theta1 Fi1
...
AngleXNB*1024 AngleYNB*1024 AngleZNB*1024 TimerNB*1024 VNB*1024 HNB*1024 ErrorNB*1024 ThetaNB*1024 Fi NB*1024

Svaki redak predstavlja položaj davača orijentacije i vrijeme koji su uzeti u jednom okvir (frameu). Položaj davača orijentacije prikazan je kutovima AngleX, AngleY i AngleZ koji su izraženi u stupnjevima. Vrijeme je prikazano u sekundama na tri decimale. Vrijeme je precizno izmjereno pomoću frekvencije procesora i njegove vremenske konstante. Vertikalno i horizontalno kutno odstupanje označeno je sa V i H i također je izmjereno u stupnjevima. Apsolutna kutna pogreška označena je sa Error. Smjer mete određen je sa dva kuta Theta i Fi.

Trajanje simulacije određeno je brojem blokova od 1024 okvira (framea), pa onda izlazna datoteka ima NBlocks*1024 redaka, ukoliko snimanje položaja glave nije prije prekinuto (prekida se sa funkcijskom tipkom F6).

Primjer izlazne datoteke je sinstep30.txt i nalazi se u dodatku D.

10. REZULTATI


10.1. KAŠNJENJE

Kašnjenje, u virtualnim sustavima, definirano je kao vrijeme između korisnikove akcije i odgovora sustava na tu akciju. Ovo ukupno, ili sustavno kašnjenje, možemo izraziti kao sumu pojedinih vremenskih kašnjenja:

Ukupno kašnjenje = Senzorsko kašnjenje + Procesorsko kašnjenje + Vrijeme za obradu slike

Senzorsko kašnjenje je vrijeme potrebno da senzor interno izračuna položaj i dok računalo ne primi taj podatak. Obično je ovo kašnjenje vrlo malo.

Pod procesorskim kašnjenjem podrazumijevamo procesorsko vrijeme za pojedina izračunavanja kao što su npr. određivanje novog položaja objekta zbog njegovih fizičkih osobina, detektiranje sudara, itd.

Vrijeme za obradu slike odnosi se na vrijeme za izvršavanje grafičkog algoritma i samo iscrtavanje na zaslon. Grafički algoritam podrazumijeva odsijecanje nevidljivih objekata, projekcija koordinata, odbacivanje stražnjih lica poligona, sortiranje po dubini, sjenčanje, osvjetljavanje scene, dodavanje tekstura itd. Ovo vrijeme najviše ovisi o brzini grafičkih 3D procesora.

Kod višeprocesorskih virtualnih sustava ukupno kašnjenje je veće jer je potrebno određeno vrijeme za sinkronizaciju umreženih računala.

Korisnici su jako osjetljivi na kašnjenje. Mogu tolerirati kašnjenja maksimalno do granice od 100 milisekundi. U simulatorima letenja donja granica kašnjenja za pilote je 60 ms. Sve iznad granice od 100 ms može imati razne posljedice. Jedna od takvih je i simulatorska bolest koja uzrokuje mučninu, bljedilo i hladan znoj. Brzina manja od 15 okvira po sekundi smanjuje osjećaj prisutnosti zbog čega virtualni sustavi gube svoju funkcionalnost. Zanimljiva metoda mjerenja virtualne prisutnosti je ispitivanje koliko korisnici pamte podatke iz jedne i iz druge stvarnosti. Naime, klasična istraživanja pamćenja pokazala su da ljudi u određenim uvjetima teško mogu razlikovati stvarne od zamišljenih događaja. Npr. film koji pogledamo nećemo toliko jako doživjeti, ili nećemo uzeti toliko u obzir njegovu pouku, kao što bi za neki sličan stvarni događaj. Isto tako, ljudi će različito pamtiti informacije iz virtualne i prave stvarnosti. Međutim ako je virtualna stvarnost bila uvjerljiva korisnici, tj. ispitanici će se teško sjećati da li je neka informacija bila iz realnog ili virtualnog svijeta [Patrick, 2002].

Neki korisnici, zbog svojih psihičkih problema i strahova odmah na početku virtualne simulacije odustaju. U virtualnim sustavima koji se koriste za liječenje ovakvih bolesnika scenu je potrebno prilagoditi samom korisniku.

Dobar način na koji se može znatno smanjiti kašnjenje je predikcija pokreta . Unutar davača pozicije integrira se sklop koji može odrediti budući položaj na temelju nekih fizikalnih pravilnosti po kojima se čovjek kreće. Npr. čovjek nema nagle pokrete vrata, nego ima neku prosječnu vlastitu frekvenciju pokreta što može olakšati predikciju. Također, predikcija pokreta može se i primijeniti kod obrade slike tako da se promatraju kretanja pojedinih piksela na zaslonu.

Kod manje kvalitetnih LCD zaslona nije potrebna velika razina detalja, visoka razlučivost i tu se također može dobiti na račun brzine.
Još jedno od zanimljivih i efikasnih rješenja je raspodijeljenost obavljanja zadataka kod višeprocesorskih sustava (Division Ltd.�s PROvision systems i Silicon Graphics).

Mjerenje kašnjenja u virtualnim sustavima je u praksi dosta zahtjevan posao. Jedan od načina da se izmjeri kašnjenje je video metoda. Korisnik i zaslon se snimaju kamerom te se analizom video snimke može utvrditi ukupno kašnjenje.


10.2. POGREŠKA PRAĆENJA METE

Iz dobivenih izlaznih datoteka možemo prikazati na dijagramu ovisnost pogreške praćenja mete o ukupnom kašnjenju za prosječne korisnike. Pod tim podrazumijevamo da korisnici nemaju znatnijih zdravstvenih problema sa kretanjem vrata, refleksima, vidnih i psihičkih poteškoća. Sva mjerenja rađena su pri rezoluciji 640x480 na računalu AMD Duron 800 MHz, sa PCI grafičkom karticom NVIDIA RIVA TNT2 Model 64 koja ima 16 MB RAM-a.

Na slici 10.2. prikazan je tijek mjerenja pogreške jednog korisnika pri različitim kašnjenjima sustava. Korisnik mora pratiti metu koja se kreće po točno definiranoj krivulji. Za mjerenje odabrana je prostorna sinusna funkcija koja se nalazi na polukugli (Slika 10.1.). Minimalno kašnjenje koje sam uspio postići je oko 21 ms (46 FPS), a gornja granica do koje su rađena mjerenja je 500 ms (2 FPS). Mjerenje je rađeno u jednostavnoj sceni i trajalo je 50 sekundi. Različitim bojama označene su pogreške za različite brzine.

Slika 10.1. Praćenje mete koja se kreće po prostornoj krivulji

Slika 10.2. Mjerenje pogreške za različite FPS


Ovo mjerenje napravljeno je za tri različita korisnika. Na slici 10.3. prikazana je prosječna pogreška ovih korisnika pri različitim kašnjenjima.



Slika 10.3. Ovisnost pogreške o kašnjenju za tri različita
promatrača kod kretanja mete po neprekidnoj krivulji


Iz dijagrama se vidi da brzine veće od 25 FPS jako slabo utječu na srednju pogrešku praćenja što znači da je ova brzina sasvim dovoljna za vizualizaciju virtualne scene. Smanjivanje brzine ispod 25 FPS utječe na povećanje srednje pogreške. Pogrešku možemo tolerirati za vrijednosti manje ili jednake 5°. Pretpostavit ćemo da bi ova vrijednost srednja pogreške bila i u nekakvom realnom sustavu, iako bi se i u takvom sustavu trebala izvesti identična mjerenja.

Treba napomenuti da je kod vrlo visokog kašnjenja došlo do nelagodnosti korisnika, bolova u stomaku, znojenja, čak i do toga da se je jedno mjerenje moralo ponoviti zbog skidanja HMD-a.

Mjerenja bi bila puno vjerodostojnija da nisu rađena samo za jednu krivulju ili da je krivulja kod svakog mjerenja slučajno generirana. Korisnik u tijeku mjerenja nauči kretanje mete pa zbog toga radi manju pogrešku. Mjerenja su počela sa većim brzinama prema manjim, pa tako pretpostavljam da bi korisnik da ne poznaje kretanje mete, radio još veću pogrešku pri malim brzinama.

Druga serija mjerenja napravljena je za praćenje mete koja skokovito prelazi sa jednog mjesta na drugo uz kratko zadržavanje. Opis kretanja mete nalazi se ulaznoj datoteci target.txt. Meta skače na 33 različite pozicije tako da korisnik već malo teže pamti redoslijed tih pozicija pa su ova mjerenja vjernija.


Slika 10.4. Ovisnost pogreške o kašnjenju za tri različita
promatrača kod skokovitog kretanja mete


Svako mjerenje trajalo je oko 100 sekundi. Iz slike se vidi da pogreška kod malih kašnjenja blago opada, a za velika kašnjenja naglo raste.

Općenito, da bi neki virtualni sustav bio primjenjiv mora biti zadovoljeno da prosječni korisnik ne radi ukupnu pogrešku veću od neke kritične vrijednosti. Npr. ako je kritična vrijednost pogreške 7°, minimalna brzina virtualnog sustava trebala bi biti barem 20 FPS. Možemo također zaključiti da se ova krivulja asimptotski približava nekoj vrijednosti pogreške. Veličina ove konačne vrijednosti također može biti mjera koliko je dobar nekakav virtualni sustav.

Međutim, da bi znali razlikovati kvalitetu virtualnog od realnog sustava moramo na neki način izmjeriti srednju pogrešku koju bi isti korisnici radili u identičnom realnom sustavu što i nije baš jednostavno. Jedan od načina kako bi se ovo moglo izmjeriti je da se na udaljenoj ravnini projiciraju slike mete, a da se snime pokreti korisnika sa davačem orijentacije. Korisnik bi trebao gledati kroz prozirno staklo na kojem je ucrtan križić za nišanjenje. Tako bi izbjegli kašnjenje koje, osim tehnike vizualizacije scene, znatno utječe na kvalitetu percepcije virtualne stvarnosti.

11. PRIMJENA VIRTUALNE STVARNOSTI

 

12. DALJNJI RAZVOJ APLIKACIJE


Ovdje bih htio spomenuti nerealizirane ideje koje su se pojavile za vrijeme razvoja aplikacije, a koje su sastavni dio virtualne stvarnosti.


13. ZAKLJUČAK


Primarni cilj diplomskog zadatka u potpunosti je ostvaren. Izrađena je aplikacija u kojoj se promatrač kreće po virtualnoj sceni i izvedena su mjerenja koja pokazuju koji uvjeti trebaju biti zadovoljeni da se virtualni promatrač osjeća neometan i virtualno prisutan.

Međutim, percepcija izrađene virtualne stvarnosti još uvijek je daleko od prave stvarnosti. Širina vidnog polja od 30°, titranje slike, zujanje u kacigi, kašnjenje sustava, ograničenost kretanja zbog duljine kablova, samo su neki detalji koji ne ostavljaju savršen dojam prave realnosti i koji za čovjeka mogu imati negativne psihofizičke učinke. Ovakva virtualna stvarnost, sa sličnim ulazno-izlaznim uređajima, kao što je u radu opisano, našla je svoju veliku primjenu na različitim područjima ljudskih djelatnosti.

Iako smo još uvijek daleko od "prave" virtualne stvarnosti, tehnologija svojim napretkom povećava realnost u virtualnim sustavima. Razvijaju se brže i kvalitetnije grafičke kartice, izrađuju se HMD-ovi sa sve većim vidnim poljem , vrlo fascinantan virtualni sustav CAVE i dalje se poboljšava, izrađuju se sve manja prijenosna računala, virtualna stvarnost polako ali sigurno postaje prava stvarnost.

U budućnosti možemo očekivati da će računala komunicirati direktno sa mozgom i da ćemo na taj način u potpunosti imati percepciju virtualnog svijeta . Uz pretpostavku da to računalo ima vezu sa internetom, postavlja se pitanje koliko je čovjek u biološkom i psihičkom smislu spreman adaptirati percepciju u visoko razvijenoj umjetnoj stvarnosti.

U kontekstu razvoja tehnologije, zanimljiva je i teza da je čovjek već dio virtualnog sustava, a da toga možda nije ni svjestan, ili da bi čovjek uz pomoć tehnologije mogao stvoriti virtualne osobe koje neće biti svjesne prave stvarnosti. Sa takvog stajališta nije potrebno stavljati naglasak na pravu stvarnost, nego istaknuti činjenicu da je nešto stvoreno.


14. LITERATURA


[Vince, 1995] J. Vince, Virtual Reality Systems, ACM Press, Cambridge, 1995.

[Wright, 2000] R. S. Wright, M. Sweet, OpenGL SuperBible, Second Edition, Waite Group Press, Indianapolis, 2000.

[Red Book] The Red Book, Addison-Wesley Publishing Company,
http://fly.srk.fer.hr/~unreal/theredbook

[Reddy, 1997] M. Reddy, Perceptually Modulated Level of Detail for Virtual Environments, 1997. [PDF]

[He, Liu] D. He, F. Liu, G. dawe, D. Sandin, Video-based Measurement of System Latency [PDF]

[Jaekl] P. M. Jaekl, R. S. Allison, L. R. Harris, Perceptual Stability during Head Movement in Virtual Reality [PDF]

[Allison] Robert S. Allison, Laurence R. Harris, Michael Jenkin, Tolerance of Temporal Delay in Virtual Environments [PDF]

[Ware] C. Ware, R. Balakrishnan, Reaching for Objects in VR Displays: Lag and Frame Rate [PDF]

[Welch] G. welch, Tracking in Virtal Environments [PDF]

[Bachman, 2000] E. R. Bachman, Inertial and Magnetic Angle Tracking of Limb Segment Orientation for Inserting Humans into Synthetic Environments, 2000. [PDF]

[Gobbeti] E. Gobbeti, R. Scuteni, G. Zanetti, Head and Hand Tracking Devices in VR [PDF]

[Nelson] W. T. Nelson, M. Roe, R. S. Bolia, R. M. Morley, Assesing Simulator Sickness in a See-trough HMD: Effects of Time Delay, Time on Task and Task Complexity [PDF]

[Isdale] J. Isdale, What is Virtual Reality
http://www.isx.com/~jisdale/WhatIsVr.html

[MSDN] Microsoft Developer Network Library � Microsoft Visual Studio 6.0

[SGI, 1997.] Silicon Graphics Incorporated, OpenGL for Windows, User guide, 1997.
http://www.sgi.com

[Isense] http://www.isense.com

[NeHe] http://nehe.gamedev.net

[Rudy] Rudy Darken, Michael Zyda, Introduction to Virtual Reality [PDF]

[GRC, 1995] General Reality Company, Virtual Reality, State of the Art and Key Chalenges, WESCON, 1995.

[KTH] Center for Parallel Computers, KTH, An Introduction to and History of Virtual Reality, http://www.pdc.kth.se

[VRL] K. P. Beier, Virtual Reality: A Short Introduction, University of Michigan, Virtual Reality Laboratory at the College of Engineering,
http://www-vrl.umich.edu/index.html

[Chris] Chris Shaw, Introduction to Virtual Reality and Virtual Environments, Georgia Institute of Technology

[Glenn] G. Chappell, Introduction to Virtual Reality and the CAVE

[CSEO] Computer Science Educational Outreach, Interactive Virtual Reality,
http://www.cs.unc.edu/outreach/vr/intro.html

[Cohen] J. Cohen, Introduction to Virtual Reality [PDF]

[Lastra, 1996] A. Lastra, H. Fuchs, Introduction to Virtual Reality, SIGGRAPH, 1996. [PDF]

[Marquez, 2002] J. J. Marquez, An Introduction to Virtual Reality, 2002. [PDF]

[Reynard] Gail Reynard, Multimedia Telepresence and Introduction to Virtual Reality

[Chuang, 1999] J. H. Chuang, Introduction to Virtual Reality Technologies and Applications [PDF]

[Lončarić] S. Lončarić, Virtualna realnost: Osnove i primjene [PPT]
http://helga.zesoi.fer.hr

[Hullfish] K. Hullfish, How Real is Virtual Reality http://www.hitl.washington.edu/publications/hullfish/home.html

[Satalich] G. A. Satalich, Navigation and Wayfinding in Virtual Reality: Finding Proper Tools and Cues to Enhance Navigation Awareness http://www.hitl.washington.edu/publications/satalich/home.html

[Furness] T. A. Furness, D. F. Kocian, Putting Humans into Virtual Space http://www.hitl.washington.edu/publications/index.html

[Patrick, 2002] A. Patrick, The Psychology of Virtual Presence: Research Ideas, 2002. http://www.iit.nrc.ca/~patricka/virtual-presence/presence-ideas.html

[NIST, 1995] National Institute of Standards and Technology, Virtual Environments for Health Care, 1995.

http://www.itl.nist.gov/iaui/ovrt/projects/health/vr-envir.htm

http://vr-atlantis.com/vr_systems_guide/vr_systems_list2.html

http://www.eureka.findlay.co.uk/archive_features/Arch_Cad/vrball/vrball.htm

http://www.ia.hiof.no/~michaell/home/vr/VirtualReality.html

DODATAK A.

Ulazna datoteka virtualne scene - SimpleScene.txt

DODATAK B.

Datoteka Target.txt sa definiranim pozicijama mete koja je korištena u mjerenjima.

DODATAK C.

Aplikacija za izradu virtualnih scena - MapEdit 1.0

DODATAK D.

Skraćeni primjer izlazne datoteke nakon snimanja promatrača na 30 FPS (kreso30.zip)