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) |
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 |
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;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.
...
ISD_TRACKER_HANDLE ISD_OpenTracker( HWND hParent, DWORD commPort, BOOL infoScreen, BOOL verbose );
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.
Klikom na dugme Tracker u okvir tracker
otvara se prozor sa postavkama davača orijentacije. 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 x0 y0 z0 V00 V01 V02 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).
//komentari se mogu stavljati u datoteci sa 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. NUMPOSITIONS N t0 x0 y0 z0 Primjer ulazne datoteke je target.txt i nalazi se u dodatku
B. 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 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. 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: 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. Slika 10.1. Praćenje mete koja se kreće po prostornoj
krivulji Slika 10.2. Mjerenje pogreške za različite FPS 11. PRIMJENA VIRTUALNE
STVARNOSTI 12. DALJNJI RAZVOJ APLIKACIJE Ulazna datoteka virtualne scene - SimpleScene.txt DODATAK B. DODATAK C. DODATAK D.
Slika 7.1. Simple Scene
Slika 7.2. Room
Slika 7.3. New world
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
broj poligona p
x1 y1 z1
...
xn yn zn
V10 V11 V12
...
Vp0 Vp1 Vp2
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).
//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
{
...
}
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:
t1 x1 y1 z1
...
tN xN yN zN
9.2. IZLAZNE DATOTEKE
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
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.
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
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.
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.
Ovdje bih htio spomenuti nerealizirane ideje koje
su se pojavile za vrijeme razvoja aplikacije, a koje su sastavni dio virtualne
stvarnosti.
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
Datoteka Target.txt
sa definiranim pozicijama mete koja je korištena u mjerenjima.
Aplikacija za izradu virtualnih scena - MapEdit 1.0
Skraćeni primjer izlazne datoteke nakon snimanja
promatrača na 30 FPS (kreso30.zip)