Ko je model sestavljen elimo, da bi ga lahko gledali z razliènih strani, ga pribliali ali oddaljili in celo izvedli "prehod skozi" (walk through) ali "prelet okrog" (fly around) modela. Vse to je s PEX-om enostavno izvedljivo.
Spremembe pogledov so proces, s katerim povemo PEX-u kje smo glede na model in kako ga elimo videti. To so interaktivni procesi.
Obstaja veè modelov pogledov (viewing models), ki jih s PEX-om lahko uporabljamo. Model pogledov doloèa velièine, ki so uporabljene za sestavo pogleda. Preprost model pogleda predvideva: polje pogleda (field of view), smer pogleda (viewing direction) in toèko gledièa (eye point). Bolj sploen model ima veè parametrov in je bolj prilagodljiv. PEXlib doloèa zelo prilagodljiv model pogledov, ki zadosti potrebam veèine aplikacij. S klicanjem dveh uporabnih funkcij kreiramo nizek nivo transformacij pogledov potrebnih PEX-u.
PEXlib predvideva dva modela pogledov, od katerih je eden bolj sploen. Ogledali si bomo bolj sploen model, ki se uporablja tudi v PHIGS-u in drugih 3D vmesnikih.
Doloèiti moramo vse faktorje, ki vplivajo na sliko:
- kako daleè od modela stojimo in ali vidimo celo sceno
- sredièe scene, kamor je usmerjena kamera
- pokonèen ali vodoraven poloaj kamere
To so faktorji, ki jih je dokaj lahko doloèiti, teje jih je matematièno natanèno opredeliti z doloèenimi vrednostmi, ki jih potem posredujemo PEXlib-u. PEXlib doloèa poti za predstavitev teh velièin, mi se moramo odloèiti za njihove vrednosti. Programer mora jasno opredeliti vse vpletene faktorje in ker ti vplivajo drug na drugega, moramo vedeti kako delujejo v celoti.
Ko je stopnja modeliranja konèana, imamo doloèeno sceno v 3D splonem koordinatnem sisiemu (WC). Vsak objekt je postavljen v doloèen poloaj glede na izhodièe splonega koordinatnega sistema (WC). Naa naloga je doloèitev 2D slike te scene na zaslonu.
Najprej izberemo toèko, kamor bo usmerjena kamera in s tem doloèimo smer pogleda. To toèko imenujemo referenèna toèka pogleda (view reference point), ki lahko lei kjerkoli v splonem koordinatnem sistemu (WC).
Nadalje izberemo doloèeno smer, ki naj bo smer skozi referenèno toèko pogleda. Poloaj kamere doloèimo nekje na tej liniji. Kje je to nas sedaj e ne zanima. Doloèiti pa moramo kako je kamera obrnjena oz. katera smer ja za kamero navzgor. Rezultat tega je normalni vektor "usmeritve navzgor". Smer ni nikakor omejena z orientacijo splonega koordinatnega sistema (WC). Je pa smer navzgor ponavadi pravokotna na smer pogleda.
Z doloèitvijo referenène toèke pogleda, smeri pogleda in "smer navzgor" za kamero, imamo doloèen nov koordinatni sistem imenovan referenèni koordinatni sistem pogleda VRC (view reference coordinate system).
Za VRC koordinatni sistem velja:
- izhodièe koordintnega sistema je referenèna
toèka pogleda
- smer pogleda je os z koordinatnega sistema VRC
- ploskev x-y je ravnina pravokotna na smer pogleda - os
z in gre skozi referenèno toèko pogleda
- "smer navzgor" je os y
- os x je tretja koordinata pravokotna na osi y
in z
Koordinatni sistem VRC v PEXlib-u doloèa orientacijo pogleda (view orientation). Za poznavanje tega moramo vedeti nekaj veè.
1.) Smer pogleda se imenuje normala pogledne ravnine (view plane normal). Poloaj kamere ni omejen samo na lego v tej smeri. Kamero lahko s te linije umaknemo, vendar je vedno usmerjena vzporedno z normalo pogledne ravnine. Glej sliko 15. Povedano drugaèe, referenèna toèka pogleda in normala pogledne ravnine doloèata neskonèno monih smeri pogleda, ki pa so med seboj vzporedne.
2.) Normala pogledne ravnine je usmerjena linija ali vektor, ki gre od referenène toèke pogleda navzven. Kamera je usmerjena v nasprotni smeri normale pogledne ravnine. Ko doloèimo normalo pogledne ravnine, ki je os z za na koordinatni sistem VRC, moramo namestiti kamero na pozitivno stran osi z. To pomeni namestiti kamero "nasproti" sceni. Èe elimo iti "za" sceno, moramo doloèiti normali pogledne ravnine nasprotno smer. Dokler ne doloèimo smeri normale pogledne ravnine, ne moremo govoriti o tem kaj je "nasproti" in kaj "za". Od nae izbire smeri gledanja je odvisno kaj je "nasproti" in kaj "zadaj".
3.) Èeprav si mislimo, da je "smer navzgor" doloèena pravokotno na normalo pogledne ravnine, lahko doloèimo vektor pogleda navzgor (view up vector), ki je usmerjen kamorkoli, le vzporedno z normalo pogledne ravnine ne. PEXlib sam preraèuna pravo "smer navzgor" s projekcijo vektorja na ravnino x-y koordinatnega sistema VRC, kjer projekcija postane os y .
Vzemimo za na model odprt cilinder s slike 16a. Njegovo sredièe je v izhodièu splonega koordinatnega sistema (WC). Dober pogled nanj dobimo, èe se postavimo nasproti na desno in rahlo navzgor. Glej sliko 16a. Kamero usmerimo v njegovo sredièe, torej doloèimo referenèno toèko pogleda (0, 0, 0). Vektor pogleda navzgor doloèimo (0, 1, 0), kar je vzporedno z osjo y. Smer pogleda pa je vzporedno z vektorjem (1, 1, 1), ki je naa normala pogledne ravnine. Tako orientacijo pogleda prikazuje slika 16a. Rezultat pogleda je na sliki 16b.
Naloga je doloèiti parametre orientacije pogleda in izraèunati transformacijo orientacije pogleda, ki jo poljemo PEX-u. Primer nastavitve parametrov orientacije pogleda je:
PEXCoord view_ref_pt; PEXVector view_up_vec, view_plane_normal; view_ref_pt.x = 0; view_ref_pt.y = 0; view_ref_pt.z = 0; view_up_vec.x = 0; view_up_vec.y = 1; view_up_vec.z = 0; view_plane_normal.x = 1; view_plane_normal.y = 1; view_plane_normal.z = 1;
Te parametre moramo preurediti s transformacijo orientacije pogleda. To naredimo s funkcijo PEXViewOrientationMatrix:
PEXViewEntry view; int err; err = PEXViewOrientationMatrix( &view_ref_pt, &view_plane_normal, &view_up_vec, view.orientation);
Funkcija vrne transformacijo pogleda vrnjeno v èlenu view.orientation, ki jo posredujemo PEXlib-u v tabeli pogleda.
Funkcija PEXViewOrientationMatrix je doloèena:
int PEXViewOrientationMatrix( PEXCoord *view_ref_pt, PEXVector *view_plane_normal, PEXVector *view_up_vec, PEXMatrix orientation_matrix)
Argumenti so:
view_ref_pt ... kazalec na referenèno toèko pogleda
view_plane_normal ... kazalec na vektor normale na pogledno ravnino
view_up_vec ... kazalec na vektor pogleda navzgor
orientation_matrix ... spremenljivka, v kateri PEXlib vrne
preraèunano transformacijo orientacije pogleda
Funkcija vraèa:
Osnovna orientacija pogleda pomeni:
- referenèna toèka pogleda je v izhodièu
splonega koordinatnega sistema (WC)
- vektor pogled navzgor je v smeri osi y WC
- normala pogledne ravnine je v smeri osi z WC
S temi vrednostmi VRC sovpada s splonim koordinatnim sistemom WC. Glej sliko 17. Doloèeno je, da je pozitivna smer osi y v koordinatnem sistemu WC, smer vektorja pogleda navzgor (view_up_vec) in je smer pogleda v nasprotni smeri osi z v WC.
Osnovna orientacija bo delovala pravilno, èe postavimo objekt v splonem koordinatnem sistemu (WC) tako, da je pogled razumen. To pomeni, da mora model ustrezati enotskim meram kocke, ki ima spodnji levi kot v izhodièu splonega koordinatnega sistema (WC).
Doloèili smo parametre, ki so potrebni za orientacijo, ne vemo pa: kje v smeri pogleda je postavljena kamera, kako iroko in visoko bo kamera zajela sceno, katero pravilo bomo uporabili za spremembo objektov v 3D prostoru v 2D projekcijo in kje v oknu se bo pojavila izbrana podoba. Vse to doloèimo z naèrtovanjem pogleda (view mapping), ki pretvori celo sceno ali le njen doloèen del v ravno podobo.
Kot primer naèrtovanja pogleda poglejmo primer osnovnega (splonega) naèrtovanja pogleda. Ta je doloèen sledeèe:
Vidno polje je omejeno na vse kar je znotraj enotske kocke splonega koordinatnega sistema (WC) od izhodièa v pozitiven oktant. To pomeni, da vidimo samo tisto, kar je znotraj koordinat x, y, z med 0 in 1. Glej sliko 17.
Kamera je postavljena v sredièe "prednje" strani kocke pri z = 1. Poloaj v WC koordinatah je (0.5, 0.5, 1).
Model projeciramo na "zadnjo" stran kocke, ki lei na ravnini x-y. Tu se nekoliko oddaljimo od podobnosti snemanja s kamero. Namesto projekcije na film kamere si zamislimo kraj, kjer bomo namestili kamero. To je referenèna toèka projekcije (projection reference point). S te toèke se vse projecira na ravnino x-y. Glej sliko 18. Na zadnjo stran kocke pade le doloèen del projecirane podobe. Ta je "ujet" za prikaz.
Slika 18 prikazuje, kaj je miljeno kot projekcija vsebine volumna na ravnino. Èe si zamislimo povrino objektov znotraj kocke kot zbirko toèk in nariemo linijo od referenène toèke projekcije skozi vsako toèko povrine, lahko doloèimo kje ta linija preseka ravnino x-y (razen primerov kjer je linija vzporedna ravnini x-y). Te toèke na ravnini x-y ustvarijo podobo, ki se imenuje perspektiva projekcije. Osnovno (splono) naèrtovanje uporablja vzporedno projekcijo. Ta se razlikuje od perspektivne projekcije po tem, da je razdalja od zadnje strani kocke do referenène toèke projekcije neskonèna (koordinata z je neskonèna, x in y koordinati pa sta nespremenjeni), tako da so vse linije perspektive med seboj vzporedne.
Skoraj vse parametre, ki doloèajo pogled, lahko spremijamo. Videli smo e, da referenèni koordinatni sistem (VRC), ki je doloèen z orientacijo, ne sovpada nujno s splonim kordinatnim sistemom (WC). Podobno lahko prosto izbiramo tudi vrednosti pri naèrtovanju pogleda.
Opazili smo e lahko, da pri perspektivni projekciji nismo ujeli celotne notranjosti enotske kocke. Projecirali smo le objekte, ki so bili znotraj piramidnega volumna. Vrh te piramide je bil v referenèni toèki projekcije, osnovna ploskev pa notranjost na zadnji strani kocke. Glej sliko 18. Drugaèe pa je pri vzporedni projekciji, kjer "ujamemo" celotno notranjost kocke. Ta prostor, ki je projeciran na 2D projecirno povrino, ki obdaja vse primitive, ki jih dejansko vidimo, imenujemo volumen pogleda (view volume). Velikost in obliko tega volumna doloèa pet faktorjev. Prikazani so na sliki 19.
To je lahko katerakoli ploskev vzporedna z ravnino x-y referenènega koordinatnega sistema (VRC). Kot bomo videli pozneje je nekoliko omejena. Prednja ploskev doloèa prednjo stran volumna pogleda.
Tudi ta je lahko katerakoli ploskev vzporedna ravnini x-y VRC-ja. Biti mora na isti strani referenène toèke projekcije kot je prednja ploskev in bolj oddaljena od te toèke kot je prednja ploskev. Zadnja ploskev oznaèuje zadnjo stran volumna pogleda. Prednja in zadnja ploskev skupaj doloèata globini volumna pogleda.
Ploskev pogleda je ploskev, na katero je model projeciran. V naem preprostem primeru s slike 17, je ploskev pogleda zadnja stran enotske kocke in je hkrati tudi ravnina x-y VRC-ja. Ploskev pogleda je lahko katerakoli ploskev vzporedna ravnini x-y. Lei lahko celo izven volumna pogleda, za zadnjo ploskvijo ali pred prednjo ploskvijo, vendar za referenèno toèko projekcije. Ponavadi ploskev pogleda lei med prednjo in zadnjo ploskvijo ali sovpada z eno od njiju.
Okno pogleda je poseben pravokotnik na ploskvi pogleda. Doloèa irino in viino volumna pogleda.
V primeru perspektivne projekcije (slika 19b) je referenèna toèka projekcije toèka, iz katere so vsi objekti projecirani na okno pogleda. V primeru vzporedne projekcije (slika 19a) so linije projeciranja vzporedne liniji, ki teèe iz referenène toèke projeciranja v sredièe okna pogleda. V obeh primerih referenèna toèka projekcije ponavadi lei na normali pogledne ravnine (os z VRC). Lei lahko kjerkoli, le med prednjo in zadnjo ploskvijo ali na ploskvi pogleda ne. Lahko si zamislimo premikanje referenène toèke projekcije skozi prostor, medtem pa ostane ploskev pogleda nespremenjena in pravokotna na os z. Namiljeno oko nam pokae sliko dinamièno spremenljive podobe.
Gornji parametri doloèajo volumen pogleda in samo projecirano podobo. Objekti izven volumna pogleda se navadno ne prikaejo, èeprav lahko spremenimo tudi to.
Vsi parametri za naèrtovanje pogleda so podani relativno na koordinatni sistem VRC in ne na sploni koordinatni sistem (WC). Prednja, zadnja in ploskev pogleda so doloèene z razdaljo vzdol osi z od referenène toèke pogleda. Okno pogleda je doloèeno z 2D toèkami z koordinatama x in y v koordinatnem sistemu VRC. Koordinate z okna pogleda pa sovpadajo s koordinatami z ploskve pogleda. Referenèna toèka projekcije je na osi z koordinatnega sistema VRC in tako sta koordinati x in y niè. Orientacija pogleda ne orientira samo kamere, ampak doloèa tudi koordinatni sistem in s tem naèrtovanje pogleda. Orientacijo moramo torej pametno izbrati. Referenèno toèko pogleda ne moremo postaviti v nek popolnoma prost poloaj, ampak mora biti usklajen s poloajem modela.
Navedeni so primeri doloèitve parametrov za naèrtovanje pogleda:
PEXCoord prp; PEXCoord2D view_window[2]; double view_plane, back_plane, front_plane; int perspective; perspective = True; view_plane = 0; prp.x = 0; prp.y = 0; prp.z = 10; view_window[0].x = -1.5; view_window[1].x = 1.5; view_window[0].y = -1.5; view_window[1].y = 1.5; back_plane = -1.5; front_plane = 1.5;
Podane parametre posredujemo funkciji PEXViewMappingMatrix, ki izvri transformacijo.
PEXViewEntry view; int err; err = PEXViewMappingMatrix(view_window, &viewport, perspective, &prp, view_plane, back_plane, front_plane, view.mapping);
Funkcija PEXViewMappingMatrix je doloèena:
int PEXViewMappingMatrix( PEXCoord2D view_window[2], PEXNPCSubVolume *proj_viewport, int perspective, PEXCoord *proj_ref_point, double view_plane, double back_plane, double front_plane, PEXMatrix mapping_matrix)
Argumenti so:
view_window ... polje med dvema toèkama okna pogleda. Prva doloèa levo spodnje ogljièe in druga desno zgornje ogljièe okna.
proj_viewport ... podroèje v NPC koordinatah, v katero se naèrtuje volumen pogleda
perspective ... neke vrste "stikalo" za doloèitev projekcije. True doloèa projekcijo v perspektivi, False pa vzporedno projekcijo.
proj_ref_point ... kazalec na referenèno toèko projekcije
view_plane ... poloaj ploskve pogleda v VRC (koordinata z)
back_plane ... poloaj zadnje ploskve v VRC (koordinata z)
front_plane ... poloaj prednje ploskve v VRC (koordinata z)
mapping_matrix ... spremenljivka, v katero se zapie transformacija naèrtovanja pogleda
Funkcija vraèa:
Parametre funkcije PEXViewMappingMatrix smo e spoznali. Izjema je viewport, ki pa ga bomo opisali kasneje.
Spoznajmo novo dejstvo. Projekcija objekta 3D v podobo 2D se ne izvri v koordinatnem sistemu VRC. Zgodi se po dodatni transformaciji. Volumen pogleda se najprej prenese v koordinatni sistem, ki je definiran kot 3D kocka, potem pa se izvri projekcija. Ta koordinaten sistem se imenuje normaliziran projekcijski koordinatni sistem (normalized projection coordinate system NPC).
Za ta zaplet obstajajo trije glavni razlogi:
1.) Sploni koordinatni sistem (WC) je od primera do primera razliènih razsenosti. Doloèiti moramo, po kaknih pravilih naj ga prenesemo v okno X, ki je tudi lahko raziènih velikosti. Odgovor je prenos volumna pogleda v nek "zdruen " predpisan NPC sistem. Temu pa sledi prenos 3D kocke NPC -ja v okno. To loèi definicijo pogleda od velikosti okna.
2.) Po doloèitvi prednje in zadnje strani primitiva, doloèimo skrite linije in skrite povrine. Preraèuna pa se vpliv globine prostora (depth cueing). Da se te operacije lahko izvrijo potrebujemo koordinaten sistem orientiran na oko opazovalca, ki bo e vedno razsenosti 3D. NPC zapolnjuje to potrebo. Os z sistema NPC je vedno usmerjena proti opazovalcu in tako je vse, kar je usmerjeno v pozivni smeri osi z, prednja stran primitiva, kar pa je usmerjeno v negativni smeri osi z, je zadnja stran primitiva.
3.) Ustrezna predstavitev volumna pogleda je potrebna za izvajanje operacije izrezovanja oz. odstranjevanje delov modela, ki jih ne elimo prikazati. Sistem NPC omogoèa enostavno oznaèevanje ravnin izsekov.
Pri uporabi vzporedne projekcije se s prenosom volumna pogleda v enotski sistem NPC niè ne spremeni. Zamislimo pa si prenos piramidnega volumna pogleda v sistem NPC. PEX prenese volumen v volumen enotske kocke, ob tem pa se izvri raztezanje, krèenje ali karkoli drugega. Ta proces je lahko za predstavitev teek, matematièno pa ni zahteven in rezultat je primeren.
Doloèitev smeri navzgor sedaj sovpada z osjo y sistema NPC. Sedaj lahko sploèimo kocko tako, da prikaemo le koordinati x in y vsake toèke v tem prostoru in opustimo koordinato z ter tako dobimo 2D projekcijo. Imamo pa e vedno 3D predstavitev podobe in to nam omogoèa laje izrezovanje in izvajanje drugih operacij.
Pri naèrtovanju pogleda ni nujno, da volumen pogleda prenesemo v celoten prostor enotske kocke v sistemu NPC. Volumen pogleda lahko prenesemo v katerikoli del te kocke imenovane odprtina pogleda projekcije (projection viewport). Glej sliko 20a.
Nadalje lahko doloèimo veè razliènih pogledov in jih prenesemo v razliène odprtine pogledov ter s tem razdelimo okno na polja. V vsakem polju prikaemo en pogled. Glej sliko 20b.
Odprtino pogleda projekcije doloèimo v koordinatah NPC od zadnje spodnje leve toèke do prednje zgornje desne toèke. Veèina programov s knjinico PEXlib uporablja celotno enotsko kocko, tako da je odprtina omejena s toèkama (0, 0, 0) in (1, 1, 1).
PEXNPCSubVolume viewport; viewport.min.x = 0; viewport.max.x = 1; viewport.min.y = 0; viewport.max.y = 1; viewport.min.z = 0; viewport.max.z = 1;
Struktura PEXNPCSubVolume je doloèena:
typedef struct{ PEXCoord min; PEXCoord max; }PEXNPCSubVolume;
Odprtina pogleda se posreduje funkciji PEXViewMappingMatrix, ki vgradi projekcijo odprtine pogleda v vrnjeno matriko transformacije naèrtovanja pogleda.
Transformaciji - orientacija pogleda in naèrtovanje pogleda ter operaciji - izsek in "stikalo" izseka so glavni deli definicije pogleda (view definition) ali samo view (pogled). Definicija pogleda se shrani v tabelo pogleda (view table) prikazovalnika (renderer-ja). To je ena od tabel stanja (PEX Lookup tables).
Vsak zapis v tabeli ima parametre kot je opisano in je naslovljen z indeksom pogleda (view index). V tabeli pogleda je lahko veèje tevilo zapisov. Ponavadi ima tabela v naprej doloèene zapise, ki jih potem popravljamo, lahko pa tudi kreiramo nove.
Pogled na predmet izberemo z navedbo indeksa pogleda med operacijo obdelave (traversal) strukture s funkcijo PEXSetViewIndex:
void PEXSetViewIndex( Display *dpy, XID resource_id, PEXOCRequestType request_type, unsigned int view_index)
Nov je argument:
Ta funkcija kreira izhodni ukaz za spremembo veljavnega indeksa pogleda v vodu seznama stanja (pipeline state list). Veljaven indeks doloèa zapis, ki opie pogled, ki naj ga PEX uporabi za prikaz primitivov. Osnovni sploni indeks je 0.
V naem primeru smo doloèili pogled:
unsigned int view_num = 1; PEXSetViewIndex(dpy, model, PEXOCStore, view_num);
Tabelo pogleda nastavimo s funkcijo PEXSetTableEntries:
void PEXSetTableEntries( Dysplay *dpy, PEXLookupTable table, unsigned int start, unsigned int num_entries, int table_type, PEXPointer entries)
Argumenti so:
Pogled je definiran s strukturo:
typedef struct{ unsigned short clip_flag; unsigned short reserved; PEXNPCSubVolume clip_limits; PEXMatrix orientation; PEXMatrix mapping; }PEXViewEntry;
Transformacije orientacije pogleda in naèrtovanje pogleda sta podani v orientation in mapping èlanih strukture.
Primer uporabe funkcije PEXSetTableEntries:
unsigned int view_num = 1; PEXLookupTable view_table; PEXViewEntry view; PEXSetTableEntries(dpy, view_table, view_num, 1, PEXLUTView, (PEXPointer) &view);
V tem primeru funkcija nastavi zapis 1 v tabeli podani z view_table na vrednosti vsebovane v view.
Rekli smo e, da se koordinata z zavre, dejansko pa se pretvori v koordinate naèrta DC (device coordinates) in se opusti potem, ko je e uporabljena za doloèitev kaj se vidi in kaj ne (skrite linije in povrine).
Odprtina pogleda prikazovalnika je izraena v koordinatnem sistemu naèrta (DC) in velikost je podana v toèkah na zaslonu (pixlih).
Pokazali bomo kako uporabimo orientacijo pogleda za interaktivno spreminjanje kotov pod katerimi gledamo model. To naredimo s spreminjanjem normale na pogledno ravnino kot odziv na premikanje mike. Preprost naèin za kontrolo normale na pogledno ravnino je kontrola sferiènih koordinat. Glej sliko 21. Vodoraven pomik mike pomeni spremembo kota vektorja okrog osi y (theta) in navpièen pomik mike spremeni kot vektorja okoli ravnine x-z (phi). Tako velja:
view_plane_normal.x = cos(phi)*sin(theta); view_plane_normal.y = sin(phi); view_plane_normal.z = cos(phi)*cos(theta);
Zaèetna vrednost za normalo na pogledno ravnino je (1, 1, 1) in ustreza kotoma:
theta = phi = M_PI/4;
Koti se ob vsakem malenkostnem premiku mike spremenijo za faktor:
#define PAN_SCALE (M_PI/500)
in kota sta:
theta += PAN_SCALE*(event.xmotion.x - lastx); phi += PAN_SCALE*(lasty - event.xmotion.y);
lastx in lasty sta spremenljivki, ki povesta poloaj mike pred pomikom. Ena toèka na zaslonu (pixel) pri spremembi poloaja pomeni M_PI/500 spremembe kota v radianih, kot sprememba kota pogleda.
Ko imamo novo normalo na pogledno ravnino, lahko ponovno izraèunamo matriko orientacije pogleda in popravimo parametre v tabeli pogleda.
/*Sprememba normale na pogledno ravnino*/ view_plane_normal.x = cos(phi)*sin(theta); view_plane_normal.y = sin(phi); view_plane_normal.z = cos(phi)*cos(theta); /*Izracun transformacije orientacije pogleda*/ err = PEXViewOrientationMatrix(&view_ref_pt, &view_plane_normal, &view_up_vec, view.orientation); /*Popravljanje parametrov v tabeli pogleda*/ if(!err){ PEXSetTableEntries(dpy, view_table, view_num, 1, PEXLUTView, (PEXPointer) &view); lastx = event.xmotion.x; lasty = event.xmotion.y; redraw(); }
Pomembno je, da preverimo vrnjeno vrednost funkcije PEXViewOrientationMatrix, ker parametri orientacije lahko postanejo nepravilni (normala na pogledno ravnino lahko postane vzporedna na vektor view_up_vec). V tem primeru ne vnesemo novih podatkov v tabelo pogleda.