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 površin in ozadja. Imajo notranjost, robove in prednjo ter zadnjo stran. PEX-u lahko ukažemo, da osenči površine, kar s črto ali tekstom ni možno. Najbolj enostaven primitiv polja je polno polje (fill area), najbolj kompleksen pa je neenotna B - ukrivljena površina (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 površino s primitivi polj, ponavadi določimo večje število majhnih ravnih ploskev. Vsaka od njih predstavlja le majhen del celotne površine.
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 površine. Imajo svoje lastne lastnosti, ki kontrolirajo njihovo zunanjost. Te lastnosti so podobne lastnostim črtnih primitivov. Določimo lahko ali naj se robovi izrišejo ali ne.
Meje polj sovpadajo z robovi. Trikotni deli in pravokotne mreže imajo notranje robove - robovi posameznih trikotnikov in pravokotnikov, ki jih meja ne vsebuje.
Ko določen primitiv delno izrežemo ali obrežemo 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 površine prazen (hollow).
PEX primitivi polj so definirani tako, da se prilagajajo vsem splošnim oblikam. Da se primitiv pravilno prikaže, mora PEX poznati njegovo obliko. Če obliko primitiva poznamo jo navedemo in s tem olajšamo delo PEX-u. Povemo lahko ali je površina 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 možnosti.
- Hollow (prazno): je notranji stil, ki naredi notranjost primitiva prazno in prozorno ter nariše 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 upoštevajo 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. Narišejo 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 naštetih 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 (splošno 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 izrišejo ali ne. Stikalo je lahko "on" (robovi se prikažejo) ali "off" (robovi se ne prikažejo). Začetna (splošna 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 prikažemo lahko tudi ukrivljene površine s tem, da jih razdelimo na manjše 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 površin je rezultat smešen. 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