1. Uvod

Svet delovnih postaj se je s pojavom sistema X Window dramatièno spremenil. Zdaj po nekaj letih uporabe okenskih vmesnikov in aplikacij, lahko uporabniki raèunajo na trden vmesnik za vse vrste in modele raèunalnikov. Prav tako ne bo veè potrebno izdelovati razliènih verzij aplikacij za poganjanje na razliènih okenskih sistemih in uporabnikom se ne bo potrebno veè prilagajati razliènim vmesnikom na razlièni strojni opremi.

Sistem X Window omogoèa tudi "meduporabniške" aplikacije - aplikacije, ki teèejo na enem stroju in se prikažejo na zaslonu pri drugem uporabniku z drugo strojno opremo. Zdaj je mogoèe, da program teèe na strežniku ali na strežniku z bazo podatkov in prikazuje rezultate na eni od odaljenih delovnih postaj, brez kakeršnegakoli posega v spomin te delovne postaje oziroma raèunalnika.

Èeprav X omogoèa to prenoslijivost in "meduporabnost" za tekstovno bazirane in 2D grafiène aplikacije, ne zadostuje za enak napredek pri 3D grafiènih aplikacijah. 3D grafiène aplikacije so še vedno vezane na uporabo lastnih grafiènih sistemov ali sistemov, kot je npr. PHIGS, ki predvideva prenosljivost, vendar ni vedno "meduporabniški". Prodajalci PHIGS-a ali drugih 3D grafiènih sistemov prav tako potrebujejo naèin za prenos njihovega sistema v okolje X.

Potrebna je bila torej 3D razširitev za sistem X Window. Ta razširitev naj bi omogoèila 3D aplikacijam izvršitev obljube X-a in bi priskrbela osnovo za visoko nivojske 3D grafiène sisteme in orodjarne. Iz tega sta se rodila PEX in knjižnica PEXlib.

1.1. PEX in PEXlib

PEX je 3D razširitev za X. S tem je dodanih okrog 200 protokolarnih zahtev za definiranje in prikazovanje 3D slik. PEX predvideva vse splošne posebnosti, ki jih najdemo v najbolj modernih 3D grafiènih sistemih in jih hkrati brez problemov integrira z X-om.

PEX grafièni model je le malo podoben 2D grafiènim modelom baziènega X-a. S PEX-om lahko definiramo modele v primernem koordinatnem sistemu, ga rotiramo, premikamo in poljubno poveèujemo. S transformacijami si ga ogledujemo z razliènih smeri (pogledi pod doloèenimi koti) in ga razlièno osvetlimo ali osenèimo.

1.1.1. Protokol PEX

Osnovni mehanizem X-a je protokol X. Pod X si veèina predstavlja knjižnico Xlib, ki generira protokol X in strežnik X, ki prevaja protokol X. Bistvo je torej res v protokolu X, ki definira X in mu omogoèa meduporabnost.

PEX je razširitev protokola X. Tako kot protokol X, tudi protokol PEX potuje med odjemalcem (klientom - aplikacijskim programom) in strežnikom. Strežnik vsebuje razširitev PEX, ki sprejema in prevaja protokol PEX ter izvršuje zahteve PEX. Kot vedno pri X-u, lahko poganjamo odjemalec in strežnik na enem ali veè strojih.

Èeprav je PEX definiran kot protokol, doloèa visoko kompatibilen grafièni sistem.

1.1.2. PEXlib

Prav tako kot aplikacije uporabljajo Xlib za kreiranje in pošiljanje protokola X, uporabljajo PEXlib za kreiranje in pošiljanje protokola PEX. Xlib in PEXlib imata nalogo, da za aplikacijo oblikujeta in pošiljata zahtevke. Za uporabo PEXlib-a nam ni potrebno poznati protokola PEX. Razumeti je potrebno le kaj PEX omogoèa in funkcije PEXlib.

Slika 1. Povezava med aplikacijo PEXlib, Xlib in strežnikom X

Slika 1 prikazuje kakšna je povezava med aplikacijo, Xlib, PEXlib in strežnikom X. Aplikacija je nad Xlib in PEXlib in klièe Xlib za opravljanje nalog z okni, kot je npr. vzpostavitev povezave s strežnikom in kreiranje oken ter klièe PEXlib za risanje 3D podob. Zahtevki X in PEX potujejo do strežnika pomešano na istem komunikacijskem vodu. Sprejemnik zahtevkov v strežniku usmerja zahtevke X v jedro strežnika in pošilja zahtevke PEX k razširitvi PEX. Èe so uporabljene še druge razširitve in so njihovi zahtevki pomešani z zahtevki X in PEX, jih odpošiljalec v strežniku usmeri v ustrezen del strežnika.

1.1.3. Zgodovina imena

PEX je kratica za "PHIGS Extension to X". To nam pove, da je namen PEX-a podpreti popularni 3D grafièni standard PHIGS. Vendar gre PEX v svoji uporabnosti preko PHIGS-a. Ime je tako bolj posledica preteklosti kot sedanjosti.

1.2. PEXlib kot grafièna knjižnica

Èe pustimo pravilo PEXlib kot razširitev X-a ob strani, lahko gledamo nanj kot na preprosto 3D grafièno knjižnico, tesno povezano z X-om. Grafiène knjižnice so vmesni èlen med aplikacijo in zaslonsko napravo (ekranom), ki upravlja z zaslonom glede na ukaze iz aplikacije. Grafiène knjižnice so lahko nizko ali visoko nivojske. Nizko nivojske knjižnice upravljajo s piksli in lastnostmi zaslonske strojne opreme. Visoko nivojske knjižnice pa upravljajo z abstraktnimi grafiènimi objekti in barvami. Nizko nivojski in od strojne opreme odvisni detajli so skriti.

1.2.1. Knjižnica PEXlib je visoko nivojska

PEXlib je visoko nivojska knjižnica. Programer opisuje grafiène podobe s termini, ki so sorodni objektom in njihovim lastnostim. Detajli o izvršitvi slike v oknu niso potrebni. PEXlib dovoljuje uporabniku, da reèe: "Nariši široko rdeèo èrto od prve do zadnje toèke." Kakršni koli zahtevki po opisovanju pikslov niso potrebni. Vsi detajli o izrisu slike so prepušèeni strežniku PEX. Uporabnik samo doloèi geometrijo, položaj in nekaj lastnosti objekta.

To pravilo je razširjeno na objekte, ki so bolj kompleksni kot npr. èrta in lastnosti, ki so manj opazne kot npr. barva. Recimo, da hoèemo sliko sobe polne pohištva. PEX dovoljuje uporabniku, da doloèi: kje so stene, obliko, lego in barvo pohištva, kakšna je svetloba in od kje prihaja ter toèko, kjer je opazovalec.

PEX predvideva niz znanih grafiènih objektov imenovanih primitivi. Ti imajo lastnosti, ki kontrolirajo njihov položaj, orientacijo, barvo in videz. S temi primitivi lahko definiramo preproste modele ali pa zapletene scene. Prikazanih je lahko veè pogledov na objekt. Posamezne dele scene lahko celo poženemo v gibanje.

1.2.2. Prikazovanje slike

PEX nudi dve poti za izris slike:

1.) Posredovanje posameznih primitivov na sceni PEXlib-u in prikaz le-teh takoj za tem.
2.) Primitive shranimo v grafièno bazo in potem nekje v programu ukažemo prikaz urejenih podatkov v bazi.

Po prvi metodi, ki jo splošno imenujemo immediate mode, moramo poslati primitive PEX-u vsakiè, ko želimo spremembo ali ponovni prikaz slike, ker PEX naše primitive pozabi.

Po drugi metodi imenovani structure mode za ponovni prikaz slike ni potrebno ponovno pošiljati primitivov, ampak le ukažemo ponoven prikaz primitivov shranjenih v grafièni bazi. Posamezne dele slike, ki se spremenijo le preuredimo v grafièni bazi. Primitive in njihove lastnosti, ki so shranjene v grafièni bazi imenujemo struktura.

Obe metodi imata doloèene prednosti in slabosti, tako da so posamezne aplikacije prilagojene eni ali drugi.

Structure mode je bolj primerna za programe CAD, ker se kreira grafièni model, ki se potem preureja in opazuje z razliènih pogledov.

Možna je tudi kombinirana uporaba immediate in structure mode.

1.3. Odnos med PEX in PHIGS

PEX dolguje svoj izvor PHIGS-u. PHIGS je 3D grafièni standard, ki ga je sprejel ISO. Dostopen je od leta 1988 in je uporabljen v velikem številu aplikacij. Osnovna naloga PEX-a je podpora PHIGS-a v okolju X. To pa ni njegov edini cilj.

S strani aplikacije PHIGS streže istemu cilju kot PEXlib, s tem, da je vmesen èlen med aplikacijo in strežnikom. To prikazuje slika 2. V okolju X PHIGS pošilja protokol PEX strežniku X in s tem doseže izvajanje funkcij PEX-a.

Slika 2. Povezava med aplikacijo, PHIGS, Xlib in strežnikom X.

Z rojstvom knjižnice PEXlib izvedbe PHIGS-a lahko uporabljajo PEXlib za pošiljanje zahtevkov PEX.

Veèina zahtevkov PEX je bila oblikovana tako, da podpira identièno funkcionalnost v PHIGS-u. Tako PEXlib kot PHIGS uporabljata iste grafiène primitive in njihove lastnosti in si delita isti model za doloèitev scene. PEX pa gre tudi preko PHIGS-a, saj predvideva tudi immediate mode prikazovanje in boljšo integracijo z X-om.

Ker je bil standard PHIGS doloèen pred X-om, v njem ni nièesar o X-u in tako posebno pravilo X-a za kontroliranje zaslona in vhodnih naprav ni upoštevano. PHIGS doloèa lastne poti za kontrolo zaslona in vhodnih naprav. Poleg tega pa tudi naredi nekaj odloèitev, ki jih "razumsko prost" vmesnik prepusti aplikaciji. PHIGS ni opremljen kot razširitev Xlib-a, lahko pa bi bil dopolnjen tako, da bi se dobro razumel s X-om, s tem, da bi bili nekateri njegovi deli ponovno doloèeni kot razširitev za usluge X-u. To pa je sedaj, ko je PHIGS priznan in široko uporabljen standard, skoraj nemogoèe.

PEX in PEXlib sta sveža rezultata za 3D vmesnik. V nasprotju s prilagajanjem in gradnjo PHIGS-a sta zgrajena, kot da je 3D grafika sestavni del okenskega sistema. PEXlib uporablja obstojeèe mehanizme X-a: komunikacijski kanal, protokol zahtevkov in odgovorov in vrsto dogodkov. Izogiba se podrobnemu doloèanju in to raje prepusti aplikaciji, s tem da predvideva funkcije za to.

1.4. Alternative za PEXlib

Kot 3D grafièna knjižnica ima PEXlib veè tekmecev. Nekatere si bomo ogledali in navedli razlike glede na PEXlib.

1.4.1. PHIGS

Kot smo že dejali je PHIGS mednarodni standard uporabljen v velikem številu aplikacij. Od PEXlib se razlikuje po tem, da je na rahlo višjem nivoju kar pomeni, da doloèa doloèene detajle, ki jih PEXlib prepušèa uporabniku. Poleg tega pa PHIGS ni tako dobro usklajen z X-om in nima možnosti immediate mode prikazovanja.

1.4.2. Silicon Graphics GL

GL je 3D immediate mode grafièna knjižnica. Èeprav je bil GL oblikovan za Silicon Graphics raèunalnike, je njegovo novo verzijo mogoèe uporabljati tudi na drugih raèunalnikih in je dostopna preko drugih prodajalcev programske opreme. GL se uporablja za simulacije in vizualne aplikacije, ki potrebujejo visoke zmožnosti grafike.

GL podpira le immediate mode prikazovanje. Ne podpira pa urejanje podatkov v podatkovne baze in naknadno prikazovanje, kot je to predvideno v PEX-u.

Obstaja tudi protokol GL, ki je razširitev protokola X. Namen tega protokola je podpora knjižnici GL.

1.4.3. Render Man

Render Man je grafièna knjižnica za izdelavo zelo kompleksnih in zelo realistiènih slik. Izdelana je za prikazovanje scen, ki zahtevajo širok razpon vizualnih efektov, kot so senèenje itd., ni pa izdelana za interaktivne aplikacije, kot je PEXlib. Render Man poganjajo na številnih razliènih raèunalnikih.

1.4.4. GKS (Graphical Kernel System)

GKS je drug grafièen standard doloèen in priznan s strani ISO. Je predhodnik PHIGS-a in uporablja drugaène in starejše grafiène modele. S hierarhiènimi modeli ni tako dobro usklajen, kot sta usklajena PHIGS in PEX. Predvideva pa immediate mode grafiko.

Obstajata verziji 2D in 3D GKS-a. Izvedba 2D se veliko uporablja. Obstaja prilagojena knjižnica 2D GKS za izdajo R5 sistema X Window.

1.4.5. Xlib

Xlib je API (application programmer's interface - programski aplikacijski vmesnik) za protokol X. Vsebuje bazièno 2D grafièno sposobnost prilagajanja za sistemsko okensko programiranje. Xlib ne vsebuje veliko posebnosti potrebnih v grafièni knjižnici, kot so transformacije, kompleksni primitivi itd. in tudi ni zmožen oblikovati kompleksnih objektov ali hierarhij.