Primitivi polj so najbolj prilagodljivi primitivi PEX. Uporabimo jih lahko v preprostih iènih modelih ali v zapletenih osvetljenih in senèenih scenah. Njihova zunanjost se lahko izrazito spreminja ob le majhnih spremembah lastnosti. Primitivi polj so shematièno enostavni, imajo pa lahko precej kompleksne parametre.
Primitive polj uporabljamo za doloèitev povrin in ozadja. Imajo notranjost, robove in prednjo ter zadnjo stran. PEX-u lahko ukaemo, da osenèi povrine, kar s èrto ali tekstom ni mono. Najbolj enostaven primitiv polja je polno polje (fill area), najbolj kompleksen pa je neenotna B - ukrivljena povrina (B - spline surface).
Primitivi polj nimajo debeline. Pri modeliranju v 3D prostoru predstavimo samo lupino predmeta (npr. krogla, kvader). PEX ne vsebuje volumskih primitivov.
Primitivi polj so sestavljeni iz ene ali veè ploskev. Polno polje (fill area) ima samo eno ploskev.Ta je lahko majhna ali velika. Ko elimo prikazati ukrivljeno povrino s primitivi polj, ponavadi doloèimo veèje tevilo majhnih ravnih ploskev. Vsaka od njih predstavlja le majhen del celotne povrine.
Ploskev ima dve strani, prednjo in zadnjo. Prednjo oz. zadnjo stran doloèa geometrijski normalni vektor (geometric normal vector). To je vektor, ki je usmerjen pravokotno na ploskev. Njegova smer je s prednje strani navzven. Izraèuna ga lahko PEX ali pa ga podamo kot normalo prednje strani.
Strani ploskev niso doloèene s tem kako jih vidimo. Prednja stran je prednja neglede na to kako ploskev transformiramo in od kje jo gledamo. Ko gledamo doloèeno ploskev, lahko gledamo prednjo ali zadnjo stran, paè odvisno od samega modeliranja ali transformacij pogleda in orientacije ploskve.
Prednji ali zadnji strani ploskve lahko doloèimo razliène lastnosti, tako da ju loèimo, ko sta prikazani.
Primitivi polj imajo robove. Robovi so meje med posameznimi ploskvami povrine. Imajo svoje lastne lastnosti, ki kontrolirajo njihovo zunanjost. Te lastnosti so podobne lastnostim èrtnih primitivov. Doloèimo lahko ali naj se robovi izriejo ali ne.
Meje polj sovpadajo z robovi. Trikotni deli in pravokotne mree imajo notranje robove - robovi posameznih trikotnikov in pravokotnikov, ki jih meja ne vsebuje.
Ko doloèen primitiv delno izreemo ali obreemo se meja primitiva spremeni, robovi se s tem ne spremenijo.
Meje in robovi so prikazani razlièno. Robovi so narisani z lastnostmi robov - tip, debelina in barva in samo takrat, ko je stikalo za to vkljuèeno (flag is on). Meje pa so narisane samo takrat, ko je notranji stil povrine prazen (hollow).
PEX primitivi polj so definirani tako, da se prilagajajo vsem splonim oblikam. Da se primitiv pravilno prikae, mora PEX poznati njegovo obliko. Èe obliko primitiva poznamo jo navedemo in s tem olajamo delo PEX-u. Povemo lahko ali je povrina konveksna, konkavna ali samo - preseèna. Èe oblike ne poznamo lahko navedemo PEXShapeUnknown.
Stil notranjosti je lastnost primitiva, ki kontrolira, kako je polje zapolnjeno. Na voljo je pet monosti.
- Hollow (prazno): je notranji stil, ki naredi notranjost primitiva prazno in prozorno ter narie le njegove meje. Barva mej je barva doloèena za notranjost. Tip èrte in debelina sta odvisna od PEX izvedbe. Z risanjem brez zapolnitve notranjosti pogosto prihranimo èas, oblika pa je e vedno nekako razvidna. Ta stil notranjosti se pogosto uporablja za iène modele.
- Solid (trden): je stil, ki zapolni notranjost primitiva z doloèeno barvo ali osenèitvijo. Barve so doloèene v prikazovalnem vodu, tako da se upotevajo viri svetlobe in senèenje.
- Pattern (vzorèen): je vzorec za stil, ki se ponavlja èez cel primitiv. Vzorec lahko izbiramo z indeksom notranjega stila, ki je lastnost doloèenega primitiva.
- Hatch (rafiran): je notranji stil, ki napolni notranjost primitiva s paralelnimi èrtami. Izbiro rafure doloèa indeks notranjega stila. Od izvedbe PEX-a pa je odvisno ali se skozi podroèje rafure vidi. rafiranje se izvede po fazi modeliranja, doloèitvi pogledov in NPC - to - viewport transformaciji. rafiranje je postavljeno pod kotom 45 stopinj glede na robove okna. Orientacija primitiva ni pomembna. Nekatere izvedbe PEX-a pa transformirajo tudi rafure.
- Empty (prazno): je notranji stil, ki naredi notranjost primitiva prazno. Nariejo se samo robovi, èe to zahtevamo. V primerjavi s hollow stilom bolj nadzira primitiv. Kontroliramo lahko debelino, barvo in tip èrte za robove, èesar pri stilu hollow ne moremo. Stil je primeren za ièno modeliranje.
Vse izvedbe PEX-a ne podpirajo vseh zgoraj natetih stilov. Informacijo o tem lahko dobimo s klicanjem funkcije PEXGetEnumTypeInfo.
Notranji stil doloèimo s funkcijo PEXSetInteriorStyle:
void PEXSetInteriorStyle( Display *dpy, XID resource_id, PEXOCRequestType request_type, int style)
Argument style se izbere med:
PEXInteriorStyleHollow
PEXInteriorStyleSolid
PEXInteriorStylePattern
PEXInteriorStyleHatch
PEXInteriorStyleEmpty
Osnovni (splono nastavljen) stil je PEXInteriorStyleHollow.
Indeks stila notranjosti uporabimo kadar doloèamo stil pattern ali hatch.
Za nastavitev barve notranjosti klièemo funkcijo PEXSetSurfaceColor.
void PEXSetSurfaceColor( Display *dpy, XID resource_id, PEXOCRequestType request_type, int color_type, PEXColor *color)
Argumenti so znani e od prej.
Z lastnostjo "edge flag" lahko doloèimo ali naj se robovi ploskev izriejo ali ne. Stikalo je lahko "on" (robovi se prikaejo) ali "off" (robovi se ne prikaejo). Zaèetna (splona nastavitev je off. Nekateri primitivi dopuèajo, da se ta nastavitev opravi za vsako ploskev posebej. Nastavljanje robov se opravi s funkcijo PEXSetSurfaceEdgeFlag.
void PEXSetSurfaceEdgeFlag( Dysplay *dpy, XID resource_id, PEXOCRequestType request_type, int edge_flag)
Nov je argument edge_flag, ki ima lahko vrednosti PEXOn ali PEXOff.
Tip robov, njegovo debelino in barvo pa doloèamo s funkcijami:
PEXSetSurfaceEdgeType
PEXSetSurfaceEdgeWidth
PEXSetSurfaceEdgeColor
podobno kot pri doloèitvi lastnosti èrtnega primitiva polyline.
Primitivi fill area so preprosti poligoni. Ta primitiv lahko uporabimo za prikaz ploskve, poligonske oblike z luknjami in prikaemo lahko tudi ukrivljene povrine s tem, da jih razdelimo na manje ravne dele.
Fill area je doloèen s svojim nizom toèk, ki doloèa mejne toèke nekega poligona. PEX sam zakljuèi poligon s tem, da izenaèi konèno toèko z zaèetno.
Notranjost polja je doloèena s pravilom lihega obrata (odd-winding role). To pravilo pravi, da je notranjost polja tisto mesto od kjer je do zunanjosti liho tevilo mej. Glej sliko 14.
Primitiv fill area naj bi bil raven. V primeru neravnih povrin je rezultat smeen. V teh primerih moramo uporabiti primitive kot so: fill area sets, triangle strip ali quadrilateral mesh.
Primitiv fill area kreiramo s funkcijo PEXFillArea ali s PEXFillArea2D.
void PEXFillArea2D( Display *dpy, XID resource_id, PEXOCRequestType request_type, int shape_hint, int ignore_edges, unsigned int num_vertices, PEXCoord2D vertices)
Neznani argumenti so:
shape_hint ... doloèa obliko fill area in je lahko: PEXShapeComplex, PEXShapeConvex, PEXShapeNonConvex, PEXShapeUnknown
ignore_edges ... doloèa ali ima fill area prikazane robove (False) ali ne (True)
num_vertices ... tevilo toèk
vertices ... polje toèk, ki doloèajo fill area