You are on page 1of 74

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 - Slika 3.4. Davač pozicije - tracker
digitizer
- 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 Slika 3.11.b. Stolica sa
silom (force feedback ugrađenim
joystick) mehanizmom za Slika 3.11.c. Odijelo sa
povratnu silu 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.15. VFX 3D HMD sa adekvatnom
opremom
Slika 3.14. VFX 3D HMD
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 ,  i . 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 Slika 4.3. Rotacija promatrača oko
ishodišta sustava scene 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  (Slika 4.4.). Konačno, radimo treću rotaciju oko
osi y' za kut  koja predstavlja rotaciju glave lijevo i desno (Slika 4.5.).
Slika 4.4. Rotacija promatrača oko Slika 4.5. Rotacija promatrača oko
vlastite osi x' 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.7. Translacija točke M u
Slika 4.6. Točka M u sustavu scene i smjeru
promatrača -tx, -ty i -tz
Sada radimo rotaciju oko osi z za kut -. Ova rotacija je suprotna od one
oko osi z'.
Slika 4.8. Rotacija oko osi z za kut - Slika 4.9. Rotacija oko osi x za kut -
Zatim rotiramo promatrača oko osi x za kut -.

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


-.
Slika 4.10. Rotacija oko osi y za kut - 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=coscos-sinsinsin
T12=cossin+sinsincos
T13=-sincos
T14=-(txT11+tyT12+tzT13)
T21=-cossin
T22=coscos
T23=sin
T24=-(txT21+tyT22+tzT23)
T31=sincos+cossinsin
T32=sinsin-cossincos
T33=coscos
T34=-(txT31+tyT32+tzT33)
T41=0
T42=0
T43=0
T44=1

Ovaj postupak naziva se Eulerova transformacija, a pripadni kutovi ,  i 


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  i  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 - i . 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(-)=-sin
vx=cos(-)sin=cos(-)sin=-cossin
vz=-(cos(-)cos())=coscos

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  i . Vrijednosti ovih kutova nalaze se u


sljedećim intervalima:

Kao i za vektor smjera gledanja vrijede ove jednadžbe:


uy=-sin
ux=-cossin
uz=coscos

Odavde se izvedu vrijednosti za  i :

Za izračunati kut  nemamo nikakvih problema jer je dobiveno rješenje iz


zadanog intervala. Međutim za kut 0 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 


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

Verror=
Herror=

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 () predstavlja
rotaciju glave promatrača u smjeru gore/dole. Kut AngleY () predstavlja
okretanje glave u smjeru lijevo/desno. Kut AngleZ () 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_UNSIGN
ED_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.2. Mjerenje pogreške za
Slika 10.1. Praćenje mete koja se kreće različite FPS
po prostornoj krivulji
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
CAVE - korišten u studentske svrhe za vizualizaciju matematike i ostalih
znanosti, kupovanje po virtualnim trgovinama
distribuirani virtualni sustavi koriste se za treniranje i učenje u vojnim
simulatorima (NPSNET - naval postgraduate school, SIMNET - simuliranje
upravljanja tenkova, NASA)
medicina - učenje anatomije, simuliranje operacije, telekirurgija - operacija se
izvodi sa udaljenog računala u realnom vremenu, rehabilitacija - ispitivanja
kognitivnih sposobnosti bolesnika
strojarstvo - sastavljanje i simulacija rada strojeva, simuliranje rada robota
automobilska industrija - dizajniranje, simuliranje vožnje, ispitivanje
ergonomskih svojstava, testiranje izdržljivosti
molekularne manipulacije - istraživanje i manipulacija sa malim strukturama
(npr. virusi), uvećanja do milijun puta, Nanomanipulator projekt na sveučilištu
u Sjevernoj Karolini
psihologija - liječenje strahova, kretanje po virtualnoj sceni uz kontrolu i
savjetovanje psihologa, proučavanje ponašanja bolesnika, koriste se i virtualne
scene koji imaju opuštajući učinak. Međutim, ovo područje je još uvijek
nesigurno i nedovoljno ispitano i ostaje otvoreno pitanje da li virtualna
stvarnost može i štetiti ljudskoj psihi (npr. neka ispitivanja su pokazala da ljudi
koji već imaju nekakva iskustva sa virtualnim okruženjima pokazuju u novim
virtualnim okolinama slabije snalaženje od onih koji nemaju nikakvog iskustva)
mala prenosiva računala i prozirni HMD-ovi - kretanjem u snimljenoj okolini
dobivamo informacije i instrukcije na prozirnom zaslonu, npr. u različitim
tehničkim servisima mogu olakšati obavljanje poslova
vizualizacija arhitektonskih objekata, geografskih terena, sunčevog sustava,
kemijskih struktura, muzeja (npr. kupci prije kupnje nove kuće mogu je virtualno
isprobati, ili npr. virtualni muzej ili kazalište se uopće ne moraju fizički
izgraditi)
simuliranje vremenskih nepogoda, ispitivanje svojstava modela u različitim
uvjetima (npr. simulacijom testiran Boeing 777 u zračnom tunelu)
Cyberspace - letenje kroz virtualnu scenu sa gdje trodimenzionalne ikone imaju
pridruženo značenje i na koje djelujemo posebnim operatorima (npr. simulacija
virtualnog tržišta, virtualna navigacija po internetu)
vizualizacija i simulacija rada kompleksnih komunikacijskih mreža
zbog sve manje cijene virtualni sustavi koriste se i radi zabave
 
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.
svakako bi se trebao uvesti algoritam za izbacivanje skrivenih objekata jer se
gubi puno vremena na iscrtavanje. S time bi se najviše smanjilo kašnjenje.
uvesti algoritam za detekciju kolizije, za ostvarivanje gravitacije i drugih sila
implementirati funkcije za učitavanje gotovih modela izrađenih sa programskim
alatom 3D studio MAX. Funkcije već postoje, a u zadnji čas sam ih skinuo sa
interneta.
osim pozicije objekata treba im dati informaciju o orijentaciji, trenutnoj brzini,
svojstvima materijala, pa čak pridružiti im adekvatne zvukove (za zvučnu
podršku razvijeni su neki alati poput OpenAL-a). Promatrač može objekte, iako
ih ne vidi, locirati po zvuku odakle dolazi.
u ulaznoj datoteci scene trebali bi se navesti neki osnovni parametri scene kao
što su npr. pozicije svjetala, način sjenčanja, ravnina odsijecanja, magla, način
postavljanja tekstura i slično.
kod mjerenja akcija promatrača skrila se mala pogreška jer nije uzeto u obzir
pomicanje centra rotacije kod inklinacije i elevacije glave promatrača
aplikacija istovremeno može raditi samo sa jednim davačem orijentacije. Bilo bi
puno zanimljivije da više korisnika može doći u interakciju.
također, napraviti aplikaciju koja će raditi u umreženim sustavima

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)

You might also like