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.