2. Pojem PEX-a

2.1. Pregled

PEX je orodje za vizualizacijo modelov. Model je karkoli kar si lahko zamislimo - mesto polno zgradb, molekule, scena itd. Za vizualizacijo modela s PEX kreiramo opis le-tega in pošljemo ta opis v PEXlib. Model je opisan z uporabo primitivov in njihovih lastnosti. Primitivi so bazične oblike kot sta npr. črta in poligon. Lastnosti primitivov kontrolirajo zunanjost primitivov kot sta npr. barva in stil črte. Primitive in lastnosti skupaj imenujemo izhodni ukazi.

Slika 3. Visoko - nivojski pogled na PEX

Slika 3 prikazuje visoko - nivojski pogled na pravilo PEX-a. PEX vzame izhodne ukaze iz aplikacije, izvrši s temi ukazi številne operacije in na koncu izračuna katere točke na zaslonu (pixli) in v kateri barvi, naj se prikažejo na zaslonu. Primitivi in njihove lastnosti potujejo k PEX-u v zaporedju. Lastnosti se pripišejo primitivom, ki sledijo.

Primer:

Line Color = RED (lastnost)
Line Width = 2.0 (lastnost)
Polyline = (x, y, z), (x, y, z) (primitiv)

PEX si zapomni zadnje nastavitve lastnosti in jih priredi sledečim primitivom, dokler se lastnost ponovno ne nastavi.

2.2. Primitivi

Primitivi so osnovni gredniki za sestavljanje slike PEX. PEX ima 15 primitivov. Primitivi so razdeljeni in so npr.: črta, polje, tekst in drugi.

Sledi kratek opis vseh primitivov PEX-a.

Črtni primitivi:

Polyline: je niz povezav med segmenti z ravnimi črtami. To je najosnovnejši primitiv PEX-a in je uporabljen kot enkratna ravna črta ali kot niz ravnih črt.

Polyline Set With Data: je skupina primitivov Polyline, vsak ločen od drugega s svojo barvo ali drugimi lastnostmi.

B-spline Curve: je pogosto uporabljen tip krivulje. Te se navadno imenujejo krivulje NURB (Non-Uniform-Rational B-spline).

Primitivi polj:

Fill Area: je ploski (raven) mnogokotnik (poligon).

Fill Area Set: je skupina ločenih ali obkroženih poligonov, ki so vsi v eni ravnini. Obkroženi poligoni ločujejo luknje in izseke.

Fill Area Set With Data: je primitiv z enakimi karakteristikami kot Fill Area Set, vsebuje pa dodatne določitve za barvo, orientacijo in normalni vektor.

Set of Fill Area Sets With Data: je najbolj splošen član družine primitivov polj. Sestavljen je iz skupine primitivov polj s podatki, ki ležijo vsak na svoji ravnini. Uporaben je za predstavitev površin ali polnih objektov.

Triangle Strip With Data: je niz povezanih trikotnih poligonov (površin).

Quadrilateral Mesh With Data: je niz povezanih štirikotnih poligonov.

B-spline Surface: je uporaben tip ukrivljenih površin. Ponavadi se imenujejo površine NURBS (Non-Uniform-Rational B-spline Surface).

Primitivi teksta:

Text: je niz znakov. Niz je prikazan na 3D površini določenega primitiva.

Annotation Text: je niz znakov, ki so vedno prikazani v ravnini zaslona. To pomeni, da jih je možno brati, čeprav gledamo model iz različnih kotov. Annotation text (tekst kot opomba) je lahko s črto povezan z določeno točko v modelu. Ta primitiv je uporaben za opombe k slikam.

Drugi primitivi:

Marker: je skupina simbolov, narisanih na določenem mestu. Ta primitiv ponavadi ponazarja zbirko točk, kot podatek o točkah na grafu.

Cell Array in Extended Cell Array: je mreža kvadratov ali paralelogramov za prikaz rasteriziranih podob kot so bitmape.

Generalized Drawing Primitive (GDP): ni posebno določen primitiv, ampak mehanizem, s katerim lahko PEX izvedbo razširimo z novimi osnovnimi primitivi. To je lahko krogla, krog, kvader itd., ali katerikoli drug primitiv, ki ga PEX še ne določa.

Ko delamo primitiv, podamo informacijo, ki opisuje primer primitiva. Ta informacija je pogosto le geometrija primitiva, večina primitivov pa potrebuje dodatne podatke ali pa tudi neobvezne podatke, kot je naprimer barva površine.

Obstajajo dvo in trodimenzionalne oblike večine primitivov PEX. Imena funkcij PEX za 2D in 3D grafiko se ločijo samo po končnici 2D za dvodimenzionalne primitive. Primer je funkcija za kreacijo polyline 3D, ki je PEXPolyline, funkcija za polyline 2D pa je PEXPolyline2D.

Vsi primitivi PEX in tudi 2D oblike se za PEX smatrajo kot trodimenzionalne, čeprav ležijo v 2D ravnini. Oblike 2D so le skrajšane verzije primitivov 3D, s koordinato z naravnano na nič.

2.3. Lastnosti

Lastnosti kontrolirajo zunanjost primitivov. Vsaka kategorija primitivov ima svoje lastnosti. Omenili smo že dve lastnosti, ki se nanašata na črte: barva in debelina črte. Ti dve lastnosti določata tudi druge črtne primitive. Primitivi polj imajo lastnosti: barvo, notranji stil, lastnosti odboja svetlobe in druge. Nekateri primitivi polj imajo lahko različne vrednosti za sprednjo in zadnjo stran.

Obstajajo tudi lastnosti, ki se nanašajo na vse primitive.

2.4. Prikazovanje slike

Spustimo se v notranjost škatle imenovane "PEX" na sliki 3. Tu najdemo "renderer" (prikazovalnik) in "structure store" (baza podatkov za strukture). Z imenom prikazovalnik (renderer) je označen del, ki izvaja delo okrog prenosa podatkov o primitivih in njihovih lastnostih na zaslon. Baza podatkov za strukture (structure store) pa je grafična baza podatkov, kjer so lahko shranjeni primitivi in njihove lastnosti za kasnejši prikaz. Oba prikazovalnik (renderer) in baza podatkov (structure store) sta del strežnika X.

Vsi primitivi in lastnosti gredo obvezno skozi renderer. Ko pošljemo izhodni ukaz (primitiv ali lastnost primitiva) PEX-u, ga lahko posredujemo direktno prikazovalniku ali pa ga shranimo v bazo podatkov. V drugem primeru lahko vedno ukažemo prikazovalniku naj prebere izhodni ukaz iz baze podatkov in ga prikaže na zaslon.

2.4.1. Notranjost prikazovalnika

Slika 4 prikazuje notranjost prikazovalnika. V njem je več delov: vod seznama stanja (pipeline state list), vod skladnosti (pipeline context), grafični vod (graphics pipeline), tabele stanja (lookup tables) in modul, ki bere izhodne ukaze iz baze podatkov o strukturah in jih prenaša v prikazovalnik.

Vod skladnosti (pipeline context) hrani začetne vrednosti za vse lastnosti. Ko se prične prikazovanje, se te lastnosti prekopirajo v vod seznama stanja (pipeline state list), ki obdrži tekoče veljavne vrednosti lastnosti. Vod seznama stanja (pipeline state list) se spremeni vedno, ko prikazovalnik sprejme zunanji ukaz za določeno lastnost. Vrednost za lastnost, ki je podana v ukazu nadomesti tekočo vrednost v vodu seznama stanja (pipeline state list). Vsi primitivi, ki so naknadno poslani prikazovalniku in uporablajo prej določene lastnosti vsebujejo nove vrednosti za te lastnosti.

Grafični vod (graphics pipeline) preoblikuje primitive na osnovi podane geometrije v koordinate pikslov in določi barvo posameznega piksla. Preračuna se učinek osvetlitve in senčeja ter ostale barvne in geometrične transformacije, ki so možne v PEX-u.

Slika 4. Notranjost renderer-ja

tabele stanja (lookup tables) ohranjajo parametre uporabljene v grafičnem vodu (graphics pipeline), kot so smer pogleda in viri svetlobe. Predvidene so tudi druge možnosti za več drugih lastnosti.

2.4.2. Začetek in konec prikazovanja (Beginning and Ending Rendering)

Ko pošljemo primitive prikazovalniku, pravimo da ga prikazujemo (rendering). Dejansko prikazovalnik izvršuje prikazovanje, mi le povemo kaj naj prikaže. V tem času se nariše sestav slike. Sestav (frame) je izraz za zaporedje izhodnih ukazov. Sestav lahko opisuje statično podobo, posamezen izsek filma ali pa je lahko nekakšen interaktiven sestav, kjer lahko uporabnik ukaže, da se sliki doda delček za delčkom.

Na začetku sestava povemo prikazovalniku, da nameravamo začeti prikazovati (begin rendering) in določimo okno v katero naj prikazuje sliko. Sledi pošiljanje primitiva in njegovih lastnosti prikazovalniku, ki le-te prikaže v določenem oknu na zaslonu. Ko je sestav končan povemo prikazovalniku, da je prikazovanje končano (end rendering) in prikazovalnik se prepriča, če slika prikazuje vse primitive, ki smo jih poslali.

Kasnejši sestavi se kreirajo z novim začetkom prikazovanja. Če je grafična strojna oprema dovolj hitra, deluje zaporedje sestavov kot film in tako lahko vključimo prikazovanje gibajočih se podob.

2.4.3. Vod skladnosti (The Pipeline Context)

Ko se prikazovanje začne so vse lastnosti v vodu seznama stanja naravnane na vrednosti v vodu skladnosti. Glavni namen voda skladnosti je, da obdrži začetne vrednosti prikazovalnika. Pred začetkom prikazovanja lahko naravnamo začetne vrednosti lastnosti v vodu skladnosti s tem, da določimo začetne vrednosti prikazovalnika.

2.4.4. Povezovanje lastnosti s primitivi

Ko lastnosti vstopijo v prikazovalnik, povzročijo da ta spremeni ustrezne vrednosti v vodu seznama stanja (pipeline state list). To zadosti njihovemu namenu.

Ko primitiv vstopi v grafični vod (graphics pipeline) se vse veljavne vrednosti, vseh lastnosti, ki se nanašajo na ta primitiv, z njimi povežejo. Primitivi vstopijo v povezan prostor (binding stage) brez določenih vrednosti za lastnosti, zapustijo pa ga z določenimi vrednostmi za uporabljene lastnosti. Določene vrednosti so tiste, ki so veljavne na vodu seznama stanja (pipeline state list). Primitivi se potem predajo grafičnemu vodu (graphics pipeline), kjer PEX uporabi lastnosti in nariše sliko.

2.5. Grafični vod (The Graphics Pipeline)

Grafični vod (graphics pipeline) je del, kjer se odvija glavno delo. Tukaj so zbrani skupaj vsi primitivi, ki sestavjajo sliko ali sceno. Uporabijo se svetlobni viri in izračuna se njihov vpliv na sliko. Primitivi se transformirajajo, tako da jih vidimo pod izbranim kotom. Izračuna se vpliv globine (depth cueing), ki pomeni spremembo barve primitiva glede na oddaljenost od opazovalca. Izvrši se senčenje in na koncu so določene točke na zaslonu (pixli) in njihove barve.

Slika 5. Grafični vod renderer-ja

Grafični vod (graphics pipeline) je sestavljen iz dveh vzporednih vodov: transformacijski vod (transformation pipeline) in prikazovalni vod (rendering pipeline). Glej sliko 5. Transformacijski vod se ukvarja z geometrijo primitivov, prikazovalni pa z njihovimi barvami.

2.5.1. Transformacijski vod (The Transformation Pipeline)

Preden se primitiv prikaže, gre skozi več geometrijskih transformacij. Te določajo končni položaj in orientacijo primitiva kot ga želimo videti. Serija teh transformacij se imenuje transformacijski vod (transformation pipeline). Glej sliko 6. Vsak del voda izvrši določeno nalogo.

Stopnja modeliranja (modeling stage): transformira vse primitive v splošni koordinatni sistem.

Stopnja pogleda (viewing stage): orientira model glede na opazovalca in izbere dele modela, ki se vidijo.

Stopnja načrta (device stage): pretvori primitive v okenske koordinate in pozicionira podobo v okno X.

Slika 6. Transformacijski vod prikazovalnika

Stopnja modeliranja (The Modeling Stage)

Večina modelov je sestavljena iz večih delov. Navadno je lažje kreirati vsak del v svojem koordinatnem sistemu. PEX to omogoča. Deli so lahko definirani v svojem lokalnem koordinatnem sistemu in so potem postavljeni v skupni koordinatni sistem. Ta transformacija je naloga stopnje modeliranja.

Skupni koordinatni sistem imenujemo splošni koordinatni sistem (world coordinates WC). Koordinatni sistemi posameznih delov modela se imenujejo koordinatni sistem modela (modeling coordinate MC). Geometrijo posameznih delov modela določimo v koordinatnem sistemu modela (MC). PEX pa jih s transformacijami prevede v splošni koordinatni sistem (WC). Vsak del je definiran v svojem koordinatnem sistemu modela (MC). Transformacije modela premaknejo vsako komponento na svoje mesto v celotnem modelu in jo skalirajo do primerne velikosti.

Transformacije modela so poslane prikazovalniku prav tako kot lastnosti primitivov. V bistvu so to posebne lastnosti, ki se nanašajo na vse primitive neglede na vrsto. Za kreiranje transformacij modela, PEXlib predvideva številne uporabne funkcije. Te funkcije gradijo transformacije iz znanih parametrov, kot so koti rotacije, faktor skaliranja in premiki.

Koordinatni sistem modela (MC) in splošni koordinatni sistem (WC) sta lahko skladna. Točka (x, y, z) ima v tem primeru enake vrednosti v obeh koordinatnih sistemih. Transformacije modela sedaj ne uporabimo. Primitive kreiramo kar v splošnem koordinatnem sistemu (WC).

Stopnja pogleda (The View Stage)

V stopnji pogleda se model projecira tako, da se pokaže v določenem pogledu, kot ga vidimo iz določenega položaja. Glej sliko 7. Stopnja pogleda tudi določa dele modela, ki bodo prikazani na zaslonu. Model lahko npr. zelo povečamo, kot da bi ga gledali od blizu ali pa pomanjšamo, kot bi ga videli od daleč. Pogled kontroliramo tako, da določimo transformacije pogleda (viewing transforms) in prisekane površine (cliping planes). Transformacije pogleda kažejo kakšen je naš relativen položaj glede na model in kdaj naj se model prikaže v perspektivi in kdaj ne. Prisekane ravnine določajo kateri del modela hočemo videti in kateri del naj bo "odrezan".

Transformacije pogleda kreiramo s funkcijami PEXlib. Parametri, ki jih določimo, opisujejo, kako smo postavljeni ob gledanju modela, smer pogleda, kateri del je spredaj, kako daleč smo in druge informacije.

Definicija pogleda kontrolira tabela pogleda (view table) skupaj z renderer-jem. Taka tabela lahko vsebuje veliko predstavljenih pogledov (view representations), ki so določeni v aplikaciji. Izbrani pogled za določen primitiv je indeks pogleda (view index), lastnost, ki se nanaša na vse primitive.

Model lahko hkrati prikažemo z več pogledi. PEX omogoča, da razdelimo izhodno okno na dele, ki prikazujejo posamezne poglede. Tako lahko hkrati vidimo prednji, zadnji in stranski pogled na model, model v celoti in še povečan posamezni detajl.

Slika 7. Pogled na model

Deli zaslona, kjer so prikazani posamezni pogledi, so določeni z normaliziranim projekcijskim koordinatnim sistemom (normalized projection coordinates NPC). NPC koordinatni sisiem ima enotske mere, vsi trije robovi imajo dolžino 1, s tem, da je ravnina x-y ravnina zaslona. To je prikladen koordinaten sistem za ureditev pogledov.

Stopnja načrta (The Device Stage)

Stopnja načrta določa položaj slike v oknu X. Posamezni del NPC-ja, ki ga izberemo za prikaz se imenuje podprostor (subvolume). Pravokoten prostor v oknu X, kjer bo prikazan določen pogled pa se imenuje prikazni prostor (viewport). Ta lahko zavzame celotno okno ali samo del njega. Podprostor (subvolume) v koordinatah NPC se transformira v prikazni prostor (viewport) s transformacijo imenovano subvolume - to - viewport transformacija.

Prikazni prostor (viewport) ni podan v koordinatah okna, ampak v koordinatnem sistemu načrta (device coordinates DC). Enote koordinatnega sistema načrta so enake kot enote okna X. To so ponavadi točke na zaslonu (pixli). Razlika pa je v izhodišču, ki je pri koordinatnem sistemu načrta spodaj levo (izhodišče za koordinatni sistem okna je zgoraj levo). Koordinata x v koordinatnem sistemu načrta gre v desno, koordinata y pa navzgor. Koordinatni sistem načrta ima izhodišče (0, 0) v spodnjem levem kotu okna in ne v spodnji levi točki na zaslonu (pixlu).

Dejansko je koordinatni sistem načrta 3D, toda tretja dimenzija pride v veljavo samo pri operacijah odstranitve nevidnih robov in ploskev.

Slika 8 prikazuje potek transformacij skozi vse tri stopnje transformacijskega voda in končen rezultat - končna slika v oknu X.

Slika 8. Tri stopnje transformacijskega voda (stopnja modeliranja, stopnja pogleda in stopnja načrtovanja).

2.5.2. Prikazovalni vod (The Rendering Pipeline)

Slika 9. Prikazovalni vod prikazovalnika

V drugem delu grafičnega voda je prikazovalni vod, ki določa barve, ki bodo uporabljene za prikaz primitiva. Barvo primitiva določa več faktorjev. Tako kot v realnosti so to: izvor svetlobe, lega objekta, odboj svetlobe, sence in globina v prostoru. Vse te dejavnike PEX upošteva v prikazovalnem vodu, kjer se barva, ki jo določimo primitivu preobrazi v barvo primitiva, ki bo prikazana na zaslonu.

Slika 9 prikazuje potek dela v prikazovalnem vodu. Primitivi v prikazovalni vod vstopajo z barvo, ki smo jim jo dodelili in se imenuje dejanska barva (intrinsic color). Preobrazba barv v prikazovalnem vodu poteka preko štirih stopenj: osvetlevanje (lighting), senčenje (shading), globina v prostoru (depth cueing) in usklajevanje barv (color approximation). Vsaka stopnja se izvaja in kontrolira ločeno.

Osvetlevanje (The Lighting Stage)

Osvetlevanje preračunava vpliv sija izvora svetlobe na objekt. Določeno je lahko več izvorov svetlobe (light surces), ki osvetljujejo model iz različnih pozicij in z različno jakostjo. PEX določi združen vpliv vseh.

Definicije izvorov svetlobe so shranjene v tabeli svetlobe (light table) prikazovalnika. Izvori svetlobe se lahko tekom prikazovanja vključijo ali ugasnejo z nastavitvijo lastnosti stanje osvetlitve (light surce state).

Osvetlevanje upošteva različne lastnosti predmetov glede odboja svetlobe (jabolko npr. drugače odbija svetlobo kot npr. teniška žogica). Sij, motnost in jasnost predmeta so določene kot odbojne lastnosti (reflection attributes). To so možnosti, ki jih lahko nastavimo in s tem določimo kako in pod kakšnim kotom primitiv odbija svetlobo.

Med osvetlevanjem se za preračunavanje odbite barve (reflected color) točk na primitivu upoštevajo: geometrija primitiva, barva, odbojne lastnosti in aktivni izvori svetlobe. Odbita barva je posredovana naslednji stopnji v prikazovalnem vodu.

Stopnja senčenja (The Shading Stage)

Preučevanje učinkov osvetljevanja je zahtevno delo. Redko se izračuna v vsaki točki primitiva, kar bi bilo idealno. Ponavadi se izračuna le za diskretne točke, ki so večinoma robne (na meji) točke primitiva. Odbojne barve za notranje točke se kombinirajo na osnovi robnih točk. Barva v točki, ki leži v notranjosti npr. trikotnika je pretehtana srednja vrednost barv v robnih točkah. Barvna interpolacija (color intrpolation) se izvaja v stopnji senčenja (shading stage) prikazovalnega voda. Senčenje in interpolacija imata v PEX-u enak pomen.

Pogosto osvetljevanje sploh ni izvedeno. Točke primitiva imajo kljub temu podane različne barve. Senčenje kljub odsotnosti osvetljevanja zgladi te razlike v barvah po celem primitivu.

Globina v prostoru (The Depth Cueing Stage)

Učinek atmosfere in oddaljenost od primitiva upošteva stopnja globine v prostoru (depth cueing stage). Svetloba na poti od objekta do naših oči izgubi na jakosti, kar je posledica prahu, dima in megle. Nekateri od the faktorjev resnično spremenijo odtenek barve ali senco odbite svetlobe. Globina v prostoru (depth cueing) simulira te učinke in prilagodi barvo primitiva glede na globino - relativno oddaljenost od gledalca.

Usklajevanje barv (The Color Approximation Stage)

Barve primitivov določamo s kombinacijami barv RGB (Red, Green, Blue) in jih je lahko neskončno mnogo. Zaslon vseh teh barv ne more prikazati, zato je potrebno te barve uskladiti z možnostimi zaslona. To je naloga stopnje usklajevanja barv.

Odnos med transformacijskim in prikazovalnim vodom prikazovalnika

Povedati moramo kako se medsebojno prepletata transformacijski in prikazovalni vod prikazovalnika. Določiti je potrebno koordinatni sistem, ki se uporablja na določeni stopnji prikazovalnega voda. Osvetljevanje vpliva na celoten model, zato je najbolj primerno, da se osvetljevanje izvaja v splošnem koordinatnem sistemu WC, kjer so vse komponente modela zbrane v končni sceni. Tako so izvori svetlobe podani v splošnem koordinatnem sistemu WC in njihov vpliv je upoštevan po stopnji modeliranja transformacijskega voda. Globina prostora se izvaja v normaliziranem projekcijskem koordinatnem sistemu NPC, kjer je model orientiran na smer pogleda. V NPC koordinatnem sistemu je os z pravokotna na zaslon in tako se globina lahko meri direktno kot razlika na osi z.

Slika 10. Prepletanje transformacijskega in prikazovalnega voda

Slika 10 prikazuje vpliv prikazovalnega voda na transformacijski vod. Osvetlevanje in senčenje je izvršeno po stopnji modeliranja, globina prostora se upošteva po stopnji pogleda, ko so primitivi v koordinatnem sistemu NPC. Usklajevanje barv ni odvisno od nobene grafične značilnosti primitiva, ampak le od barv. Izvaja se po stopnji načrta.

2.6. Strukture

Kadar oblikovalski programi prikazujejo eno in isto geometrijo predmeta, ki jo gledamo iz različnih smeri ali ji spreminjamo le nekatere lastnosti, je bolje shraniti geometrijo predmeta v sam strežnik. S tem se izognemo potratnemu kontinuiranemu pošiljanju geometrije iz programa v strežnik. Zato obstajajo PEX strukture.

2.6.1. Shranjevanje struktur

Slika 11 prikazuje PEX strukturo shranjeno ob prikazovalniku. Shranjena struktura v grafični bazi podatkov lahko hrani podatke o primitivih in njihovih lastnostih za kasnejše prikazovanje na zaslon. To nam omogoča določiti opis predmeta in ga prikazovati vedno znova brez ponovnega določanja opisa. Ko določimo primitiv in ga shranimo v strukturo, ga lahko z enim samim ukazom, ki ga pošljemo prikazovalniku, ponovno prikažemo.

Strukture se kreirajo s funkcijo PEXCreateStructure. Ta funkcija vrne pokazatelj strukture (structure identifier), ki ga kasneje uporabimo za naslavljanje strukture.

Grafična baza podatkov struktur je sestavljena iz enot imenovanih strukture. Struktura je preprosta baza podatkov za zbirke primitivov in njihovih lastnosti. Strukture se uporabljajo za združevanje sorodnih primitivov in njihovih lastnosti. Struktura navadno vsebuje vse, kar je potrebno za opis enega dela modela (npr. avtomobilskega kolesa).

Slika 11. Notranjost PEX-a (prikazovalnik in grafična baza podatkov)

Kreiramo lahko več struktur in vsaka lahko vsebuje večje število primitivov in njihovih lastnosti.

Ko je struktura določena lahko ukažemo prikazovalniku, da jo prikaže. Posredovanje struktur prikazovalniku je lahko posamično, pošljemo pa lahko tudi vse naenkrat in so vse naenkrat tudi prikazane.

2.6.2. Elementi strukture

Vsak posamezni primitiv ali lastnost v strukturi imenujemo element strukture (structure element) ali skrajšano element. Element je najmanjši del strukture. Strukturo najprej kreiramo, potem ji lahko dodajamo elemente. Primer je struktura s tremi elementi. Prva dva nastavita debelino in tip črte, tretji določi črto (polyline).

2.6.3. Prikazovanje strukture - obdelava (traversal)

Ko strukturo pošljemo prikazovalniku, jo ta obdela element za elementom. Primitive in njihove lastnosti obravnava, kot da bi bili poslani direktno. Če je element lastnost, prikazovalnik nastavi vrednost te lastnosti v vodu seznama stanja (pipeline state list) in če je element primitiv, ga prikazovalnik nariše. Ta proces postopnega izvajanja navodil imenujemo obdelava (traversal).

Opazimo lahko, da je struktura majhen program, ki je, ko je struktura prikazana, preveden s PEX-om. Kot primer prikazovalnik najprej nastavi vrednost ustrezno debelini črte, ki je podana v prvem elementu, nato nastavi tip črte na DASHED (prekinjeno) in potem prikaže črto, ki je shranjena v tretjem elementu.

Podobno kot v vsakem programu je pomembna ureditev (zaporedje) elementov, ker se le-ti izvršujejo zaporedoma. Različna ureditev lahko da različen rezultat.

2.6.4. Urejanje strukture

Strukturo, ki je kreirana in določena, lahko pozneje ponovno preuredimo. Elemente v strukturi lahko nadomestimo, jih izbrišemo ali dodajamo nove. Tako lahko zelo enostavno spreminjamo lastnosti primitiva kot so npr. barva, itd. ali nadomestimo celoten primitiv z novim.

Za urejanje strukture moramo najprej nastaviti kazalec elementa (element pointer), ki deluje podobno kot kurzor v urejevalniku besedila. Ko je le-ta nastavljen, povemo PEX-u, kaj naj na tem mestu naredi (doda nov element za kazalcem, zamenja element ali ga izbriše).

2.6.5. Mreženje strukture (Structure Networks)

Strukture imajo še druge prednosti. Kličejo lahko druge strukture, kot lahko funkcije v programu kličejo druge funkcije. PEX strukture lahko izvajajo druge strukture. V kombinaciji s transformacijami modela, izvajanje struktur omogoča prikaz grafičnega modela. Oblikujemo lahko npr. avto s kreiranjem strukture "telo" in klicanjem posamezne strukture "kolo" štirikrat, vsakič z drugim položajem.

Izvajanje struktur nam omogoča modeliranje predmetov s hierarhično odvisnostjo (oče - otrok - vnuk itd.). Primer je telo - roka - zapestje - prst hierarhija, kjer je položaj posameznega dela odvisen od položaja starševskega predmeta. V PEX-u se tako grafično modeliranje imenuje mreženje strukture (structure networks).

Izvajanje strukture

Mreženje strukture se oblikuje z izvajanjem elementov strukture (execute structure elements). Izvajanje elementa strukture ukaže: "Obdelaj drugo strukturo na tem mestu!" in to izvrši. Ko naleti potek programa na tak element, se obdelava tekoče strukture odloži in se začne obdelava strukture, ki je prišla vmes. Po končani obdelavi nove strukture PEX nadaljuje z obdelavo prvotne strukture na mestu kjer jo je prekinil.

Tako program prehaja z izvajanjem z ene strukture na drugo. Oblikuje se mreža struktur, pri čemer ni nikakršnih omejitev glede globine strukture, razen omejitve spomina.

Obdelava mreže struktur (Traversing Structure Networks)

Slika 12 prikazuje predpostavljeno mrežo strukture in pot obdelave. Mreža vsebuje pet struktur. Najvišja struktura se imenuje izvorna (root) struktura. Vse ostale strukture imajo svojega prednika (ancestor) - strukturo, ki je v hierarhiji nad njo in vse razen zadnje v mreži imajo potomca (descendants).

Strukturam ni dovoljeno izvajati same sebe ali njihovih prednikov. To bi pomenilo, da je mreža povratna. Večinoma to pomeni zaplet v neskončno zanko.

Prikazovanje mreže strukture

Za prikazovanje mreže strukture pokličemo funkcijo PEXRenderNetwork. Ta funkcija izvrši funkcijo PEXBeginRendering, obdela strukturo in izvrši funkcijo PEXEndRendering. Prikazovalnik torej prebere obdelavo strukture in prikaže mrežo strukture.

Slika 12. Mreža strukture in potek obdelave strukture

Dedovanje lastnosti

Izvajane strukture od svojih prednikov podedujejo veljavne vrednosti lastnosti iz voda seznama stanja (pipeline state list). Element strukture v izvajani strukturi lahko spremeni vrednost za katerokoli lastnost. Ko je izvajanje končano, struktura vrne vrednost lastnosti na prvotno stanje. Spremembe lastnosti, ki so se vzpostavile med izvajanjem strukture "potomca", se tako ne prenašajo na "prednika".

2.7. Tabele stanja (Lookup Tables)

Kot smo videli v opisu stanja pogleda in prikazovalnem vodu, PEX uporablja več tabel. Vse tabele v PEX-u so kreirane in nastavljene podobno ter so v bistvu primeri za objekte imenovane tabele stanja (lookup table).

Tabele stanja hranijo bistvene lastnosti z nekaterimi izjemami, kot so npr. lastnosti, ki ne morejo biti poslane prikazovalniku kot zunanji ukazi. Določene lastnosti so shranjene v tabelah stanja in niso poslane direktno prikazovalniku. Do teh informacij pride renderer preko poslanega izhodnega ukaza, ki se imenuje indeks tabele stanja (lookup table index). Ta indeks pove s katerega mesta v tabeli stanja naj se vzame določena informacija npr. vrednost za določeno lastnost.

Nekatere PEX tabele stanja smo že spoznali. PEX omogoča nastavljanje vseh vrednosti v teh tabelah, predvidene pa so tudi splošne začetne vrednosti.

Tabele pogleda so povezane s prikazovalnikom. Posameznemu prikazovalniku lahko določimo lasten niz tabel, lahko pa si tudi več prikazovalnikov na istem strežniku deli med seboj iste tabele stanja.

2.7.1. Sveženj tabel (Bundle tables)

Sveženj tabel se uporablja za določanje svežnjev lastnosti (attribute bundles). To so lastnosti, ki so kakorkoli povezane. Določimo lahko, da prikazovalnik uporabi lastnosti iz določenega svežnja in ne iz voda seznama stanja. Posamezni sveženj je lahko sestavljen iz več svežnjev (podsvežnjev). Vsak sveženj določa določeno kombinacijo lastnosti (npr. široka rdeča črta), ki ima v programu poseben pomen.

Med prikazovanjem se izbere sveženj na osnovi enega samega indeksa. Indeks določa kateri sveženj naj se uporabi za primitive, ki sledijo. Lastnosti teh primitivov bodo izbrane iz določenega svežnja in ne iz voda seznama stanja. Tako lahko izberemo cel sveženj lastnosti z enim samim indeksom.