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.