46
Računarska grafika SPHIGS

SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

Računarska grafika

SPHIGS

Page 2: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS2

Uvod

� PHIGS je kompleksan grafički standardni paket za 3D grafiku� Skraćenica: Programmer’s Hierarchical Interactive Graphics System� PHIGS je grafički standard sledećih organizacija:

– ANSI (American National Standards Institute) i – ISO (International Standards Organization)

� Paket koji se ovde proučava (SPHIGS) je pojednostavljeni PHIGS– za potrebe akademskog proučavanja koncepata– podskup standardnog PHIGS-a + neke mogućnosti PHIGS-ekstenzija

� Tri osnovne razlike SPHIGS u odnosu na SRGP:– SPHIGS koristi 3D koordinatni sistem čije su koordinate realni brojevi– SPHIGS upravlja modelom (omogućava editovanje baze grafičkih struktura)– SPHIGS ne omogućava direktnu manipulaciju pikselima

Page 3: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS3

Grafičke s trukture

� SPHIGS podržava hijerarhiju grafičkih struktura – struktura je logičko grupisanje primitiva, njihovih atributa i drugih informacija– programer može da edituje strukture u bazi komandama za editovanje– SPHIGS obezbeđuje da je slika na ekranu

stvarna reprezentacija sadržaja baze struktura– strukture sadrže primitive, atribute i "pozive" podstruktura

� poziv podstrukture daje strukturi sličnost sa procedurom nekog programskog jezika– mogućnost kontrole geometrije i pojave svakog poziva podstrukture

� geometrija: pozicija, orijentacija, veličina � pojava (atributi): boja, stil linije, debljina linije

– pogodnost za aplikacije zasnovane na modelima hijerarhije među komponentama

� Prema režimu rada grafički paketi se dele na one koji rade u:– neposrednom režimu – ne pamte primitive koje im se prosleđuju (npr. SRGP)– režimu sa memorijom – pamte primitive i druge informacije (npr. SPHIGS)

� grafički paketi sa memorijom omogućavaju automatsko osvežavanje prikaza (čime rasterećuju aplikaciju te vrste posla)

Page 4: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS4

Mogućnosti paketa SPHIGS

� SPHIGS omogućava:– otvaranje i zatvaranje struktura

– specificiranje primitiva i njihovih atributa koji pripadaju strukturi– geometrijske modelirajuće transformacije

– editovanje hijerarhije struktura

– označavanje struktura za prikaz– definisanje prikaznih transformacija

� višestruki pogledi na sistem preko tabele prizora

– interakciju � tastatura, lokator, pik-korelacija, izbor iz menija – choice

Page 5: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS5

Otvaranje i zatvaranje struktura

� Struktura treba da sadrži logički kohezivan skup elemenata– elementi strukture definišu jedan (složeni) objekat

� Inicijalno postoji konačan broj praznih struktura – programer ne brine o njihovom stvaranju i uništavanju

� Editovanje strukture se vrši između njenog otvaranja i zatvaranja� Samo jedna struktura u jednom trenutku može biti otvorena za editovanje� Struktura može sadržati proizvoljan broj elemenata� Operacija SPHIGS-a za otvaranje strukture

void SPH_openStructure(int structureID);� Operacija za zatvaranje strukture

void SPH_closeStructure(void);� Nakon zatvaranja struktura može biti ponovo otvorena za editovanje

Page 6: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS6

Specificiranje primitiva

� Tačke se specificiraju pomoću tri realna broja dvostruke tačnosti (x,y,z)� Operacije smeštaju primitive u tekuće otvorenu strukturu

(a ne direktno na izlazni uređaj)� Dok se struktura ne zatvori – ona se ne prikazuje� SPHIGS "izvršava" primitivni element transformišući koordinate primitive

– modelirajućim geometrijskim transformacijama i– prikaznim transformacijama (viewing), uključujući odsecanje i rasterizaciju

� Svaki tip primitive ima svoje atribute – npr. atribut boje za liniju i poliedar je različit

Page 7: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS7

Primitive

� Operacija za definisanje polilinije void SPH_polyLine(int vertexCount, Point *vertices) ;

� Operacija za definisanje polimarkera void SPH_polyMarker(int vertexCount, Point *vertice s);

� Operacija za definisanje popunjenog poligona (stranice tela)void SPH_fillArea(int vertexCount, Point *vertices) ;

– SPHIGS ne proverava da li su popunjeni poligoni planarni � rezultati su nedefinisani ako nisu

� Operacija za definisanje teksta (koji nije potpuno 3D) void SPH_text(Point origin, char *str);

Page 8: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS8

Poliedar

� Operacija za definisanje poliedra void SPH_polyhedron(int vertexCount, int facetCount ,

Point *vertices, VertexIndex *facets);

� Poliedar se definiše tako što se definiše – vektor svih temena Point *vertices– vektor indeksa temena koja obrazuju stranice VertexIndex *facets

� Vektor indeksa: – indeksi temena koji obrazuju stranice poliedra– između stranica poliedra – negativna numerička vrednost kao separator (-1)

� Na primer, vektor indeksa: 0,1,2,3,4,-1,1,6,7,2,-1,... sadrži:– indekse temena koji obrazuju stranice (prva:0,1,2,3,4; druga: 1,6,7,2)– separatore (–1) između stranica poliedra

� Redosled temena na stranici mora biti određen pravilom desne ruke– posmatrano iz spoljašnosti tela

Page 9: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS9

� Primer:Point nizTemenaKuce[10] = {{0.,0.,0.},{5.,0.,0.},.. .};

VertexIndex nizStranicaKuce[36] = {0,1,2,3,4,-1,1,6,7,2,-1,...};

SPH_openStructure(KUCA);

SPH_polyhedron(10,7,nizTemenaKuce,nizStranicaKuce);

SPH_closeStructure();

Primer poliedra

X

Y

Z

Page 10: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS10

Specificiranje atributa

� Atributi su specifični za pojedine tipove primitiva– svaka vrsta primitiva ima nezavisan atribut boje– polilinija i kontrastna ivica poligona imaju različite atribute

� Atributi su modalni: – kada se za vreme obilaska strukture za prikaz "izvrši" postavljanje atributa,

vrednost ostaje do sledeće eksplicitne izmene u datoj strukturi� Atributi se vezuju za primitive za vreme obilaska struktura za prikaz � Debljina linije i veličina markera

– ne zadaju se ni u realnom svetu ni u pikselima– nisu podložni modelirajućim geometrijskim transformacijama– zadaju se u realnim multiplima (skala faktorima) nominalne debljine/veličine

� SPHIGS ne podržava teksture

Page 11: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS11

Atributi polilinije i polimarkera

� Operacije za postavljanje atributa polilinijetypedef enum {CONTINOUS, DASHED, DOTTED,...} LineSty le;

void SPH_setLineStyle(LineStyle lineStyle);

void SPH_setLineWidthScaleFactor(double scaleFactor );

void SPH_setLineColor(int colorIndex);

� Operacije za postavljanje atributa polimarkeratypedef enum {MARKER_CIRCLE, MARKER_SQUARE,...} Mar kerStyle;

void SPH_setMarkerStyle(MarkerStyle markerStyle);

void SPH_setMarkerSizeScaleFactor(double scaleFacto r);

void SPH_setMarkerColor(int colorIndex);

Page 12: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS12

Atributi popunjavanja i teksta

� Operacije za postavljanje atributa popunjenih površina i poliedaravoid SPH_setInteriorColor(int colorIndex);typedef enum {EDGE_VISIBLE,EDGE_INVISIBLE} EdgeVisi bility;void SPH_setEdgeFlag(EdgeVisibility flag);void SPH_setEdgeStyle(LineStyle edgeStyle);void SPH_setEdgeWidthScaleFactor(double scaleFactor );void SPH_setEdgeColor(int colorIndex);

� Operacije za postavljanje atributa tekstavoid SPH_setTextFont(int fontIndex);void SPH_setTextColor(int colorIndex);

Page 13: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS13

Strukture za prikaz ivanje

� Kada se struktura kreira u CSS (Central Structure Storage)ona se neće prikazivati odmah

� SPHIGS će prikazati samo one strukture koje su prosleđene odgovarajućoj specifikaciji prikaza (prizoru, view)

� SPHIGS obilazi strukture u prizoru i to element po element:– izvršenje elementa koji definiše primitivu doprinosi slici

(ako je bar deo primitive u prozoru za prikaz)– izvršenje elementa koji definiše atribut

menja stanje atributa koji se primenjuje na naredne primitive u strukturi� atributi se primenjuju na primitive po redosledu obilaska prilikom prikaza

Page 14: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS14

Prosle đivanje strukture prizoru

� Tabela prizora je niz čiji svaki element definiše– način prikaza za dati prizor

� definiše kako će se koordinate primitiva strukture preslikati u ekranske koordinate– listu struktura koje se prikazuju u datom prizoru

� Operacija za dodavanje strukture na listu prizoravoid SPH_postRoot(int structureID, int viewIndex);

� Prosleđivanjem neke strukture koja je složena – prosleđuje se cela hijerarhija za prikaz

� Indeks viewIndex prizora određuje poziciju u tabeli prizora� Operacija za uklanjanje strukture iz liste za prikaz

void SPH_unpostRoot(int structureID, int viewIndex) ;

Page 15: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS15

Definisanje prikaza – RWC

� Koordinatni sistem realnog sveta (real world coordinate, RWC) – 3D Dekartov desni koordinatni sistem

� Projekciona ravan (view plane, VP) – ravan na koju se vrši projektovanje

iz nekog centra projekcije

� Projekciona ravan je određena – referentnom tačkom (view reference point, VRP)

� tačkom koja se nalazi u projekcionoj ravni i

– normalom na ravan (view-plane normal, VPN)

� Vektor uspravnosti (view-up, VUP) – najčešće se poklapa sa y osom RWC sistema, ali nije neophodno

XRWC

ZRWC

YRWCVP

VPN

VUP

VRP

Page 16: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS16

Definisanje prikaza – VRC (1)

� 3D koordinatni sistem prikaza (viewing-reference coordinate, VRC):– koordinatni početak u VRP– jedna osa (n) se poklapa sa VPN– druga osa (v) se dobija kao projekcija VUP vektora na VP,

takva da leži u ravni (VPN,VUP)– treća osa (u) se dobija tako da formira desni koordinatni sistem (u,v,n)

VP

VPN

v

VRP

VUPu

n

Page 17: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS17

Definisanje prikaza – VRC (2)

� Prozor (window) na projekcionoj ravni – njegov sadržaj se preslikava u prikazni prozor (viewport)

� Prozor u VP se definiše pomoću opsega [umin, umax] i [vmin,vmax]� Centar prozora (center of the window, CW)� Centar projekcije (projection reference point, PRP)

– specificira se u VRC, ne u RWC

� Smer projekcije (direction of projection, DOP) – vektor od PRP do CW– u slučaju ortografske projekcije

DOP je paralelan sa VPN

VP

v

u

n

(umin,vmin)

(umax,vmax)

CW

PRP

DOP

Page 18: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS18

Definisanje prikaza – VRC (3)

� Posmatrana zapremina (view volume) – deo prostora koji se iseca za prikaz– za projekciju sa perspektivom

� polubeskonačna piramida sa temenom u PRP i ivicama koje prolaze kroz temena prozora u projekcionoj ravni

– za paralelnu projekciju � beskonačan paralelopiped sa stranicama paralelnim DOP

koje prolaze kroz ivice prozora

PRP

VP

CW

VP

CW

Page 19: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS19

Definisanje prikaza – VRC (4)

� Limitirana posmatrana zapremina se dobija tako što se postavljaju dve ravni paralelne VP:

– prednja odsecajuća ravan (front clipping plane, FCP) sa rastojanjem F (front distance) od VRP

– zadnja odsecajuća ravan (back clipping plane, BCP) sa rastojanjem B (back distance) od VRP

– F odnosno B su algebarske veličine � pozitivne su u smeru VPN (n ose) VP

F-B

Page 20: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS20

Definisanje prikaza – NPC

� Normalizovane koordinate projekcije (normalized projection coordinates, NPC) – jedinična kocka

� Posmatrana zapremina se transformiše u 3D prikazni prozor (viewport)unutar jedinične kocke NPC tako što:

– FCP i BCP se transformišu u zmax i zmin ravni, respektivno– umin i umax stranice se transformišu u xmin i xmax stranice– vmin i vmax stranice se transformišu u ymin i ymax stranice

VP 1

1

ZNPC

XNPC

YNPC

1

Page 21: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS21

Totalna transformacija prikaza

� Totalna transformacija se opisuje pomoću dve matrice– matrica orijentacije prizora (view orientation matrix)

� transformiše tačku iz RWC u VRC sistem� formira se na osnovu VRP, VPN i VUP

– matrica preslikavanja prizora (view mapping matrix) � transformiše tačke iz VRC u NPC

� Tačke iz 3D prikaznog prozora u NPC sistemu se preslikavaju na 2D uređaj:– jedinična kocka sa temenom u tački (0,0,0) i drugim (dijagonalnim) u tački (1,1,1)

se peslikava u najveći kvadrat koji se može upisati u ekran (prozor)– preslikavanje se obavlja jednostavno - tako što se z-koordinata ignoriše

� Primer: – na uređaju sa rezolucijom 1024x800, (0.5,0.75,z)NPC se mapira u (511,599)DC

RWC VRC NPC

Page 22: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS22

SPHIGS tabela prizora

� Može se specificirati više prizora za strukture u sceni– aplikacija može da podeli ekran (prozor) u nekoliko prikaznih prozora– tabela prizora – svaki ulaz tabele definiše poseban prizor (view) – strukture u različitim prizorima se prikazuju u različitim delovima ekrana

� Svaki prizor u tabeli sadrži:– reprezentaciju prizora

� specifikaciju orijentacije prizora (RWC�VRC)� specifikaciju preslikavanja prikazne zapremine u prikazni prozor (VRC�NPC)

– listu struktura koje su prosleđene za prikazivanje datom prizoru

� Ulaz 0 tabele prizora definiše podrazumevani prikaz

Page 23: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS23

Podrazumevani prikaz

� Prikaz u ulazu 0 tabele prizora je definisan:– VRP(0,0,0)– VUP ≡ YRWC � VRC(u,v,n) ≡ RWC(x,y,z)

– VPN ≡ ZRWC

– prozor W je definisan sa x ≡ u∈[0,1] i y ≡ v∈[0,1]– PRP(0.5,0.5,1.0) – prikazna zapremina z ≡ n∈[0, -∞]– prikazni prozor je cela NPC jedinična kocka

Page 24: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS24

SPHIGS reprezentacija prizora

� Operacija za definisanje reprezentacije prizora:void SPH_setViewRepresentation(int viewIndex,

Matrix_4x4 voMatrix, Matrix_4x4 vmMatrix,double NPCviewport_minX, double NPCviewport_maxX,double NPCviewport_minY, double NPCviewport_maxY,double NPCviewport_minZ, double NPCviewport_maxZ

);

� Operacija za definisanje matrice orijentacije prizora voMatrix– definiše se transformacija iz RWC u VRC sistem

Matrix_4x4 SPH_evaluateViewOrientationMatrix(

Point viewRefPoint, Vector_3D viewPlaneNormal,

Vector_3D viewUpVector, Matrix_4x4 voMatrix);

Page 25: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS25

Matrica preslikavanja prikaza

� Operacija za definisanje matrice preslikavanja prizora vmMatrix– definiše se transformacija iz VRC u NPC sistem

typedef enum {PARALLEL, PERSPECTIVE} ProjectionType ;Matrix_4x4 SPH_evaluateViewMappingMatrix(

/* specifikacija prikazne zapremine u VRC */double umin, double umax, double vmin, double vmax,ProjectionType projectionType,Point projectionReferencePoint, /* u VRC sistemu */double frontPlaneDistance, double backPlaneDistance ,

/* specifikacija NPC prikaznog prozora */double NPCvp_minX, double NPCvp_maxX, double NPCvp_minY, double NPCvp_maxY, double NPCvp_minZ, double NPCvp_maxZ, Matrix_4x4 vmMatrix

);

Page 26: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS26

Transformacije

� Standardizovani objekat: – jednim temenom u koordinatnom početku i – većinom ivica poravnat sa koordinatnim osama

� Standardizovani objekat je jednostavniji za definisanje i za manipulaciju� Promena položaja i orijentacije objekta se postiže

moćnom tehnikom modelirajućih (geometrijskih) transformacija� Primitive (kao poligon ili poliedar) se transformišu

tako što se transformiše svako njihovo teme (tačka) � Transformacija tačke se obavlja množenjem:

(transformaciona matrica)*(vektor-kolona tačke) � Vektor originala i vektor transformisane tačke

su u homogenim koordinatama

∗=

11

'

'

'

z

y

x

Mz

y

x

Page 27: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS27

Elementarne transformacije

� Sledeće operacije služe za definisanje elementarnih transformacija:matrix_4x4 SPH_scale(double scaleX, double scaleY,

double scaleZ, matrix_4x4 result);matrix_4x4 SPH_rotateX(double angle, matrix_4x4 res ult);matrix_4x4 SPH_rotateY(double angle, matrix_4x4 res ult);matrix_4x4 SPH_rotateZ(double angle, matrix_4x4 res ult);matrix_4x4 SPH_translate(double deltaX, double delt aY,

double deltaZ, matrix_4x4 result);

� Pozitivan smer parametra angle – određen je pravilom desne zavojnice vezane za posmatranu osu

� Matrice se koriste da se u strukturu smesti transformacioni element� Generalno, standardizovani objekti se

– najpre skaliraju, zatim rotiraju i najzad transliraju

Page 28: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS28

Lokalna transformacija

� Operacija za definisanje lokalne transformacione matrice strukture:typedef enum {REPLACE, PRECONCATENATE, POSTCONCATEN ATE}

TransformMode;void SPH_setLocalTransformation(matrix_4x4 matrix,

TransformMode mode);

� Kada SPHIGS obilazi strukture radi prikaza on postavlja lokalne matrice transformacije

� Matrica transformacije je lokalna – deluje samo na (naredne) elemente strukture gde je definisana

� Za vreme obilaska strukture na temena njenih primitiva se primenjuje lokalna transformacija

� Nakon obavljanja lokalne transformacije obavlja se prikazna transformacija � Inicijalno, matrica transformacije je postavljena na jediničnu matricu

Page 29: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS29

Primer transformacija

� Primer: kuća rotirana oko Y ose i zatim postavljena na proizvoljnu poziciju SPH_openStructure(TRANSFORMISANA_KUCA);

SPH_setLocalTransformation(SPH_rotateY(...), REPLAC E);SPH_setLocalTransformation(SPH_translate(...),

PRECONCATENATE);SPH_polyhedron(10,7,nizTemenaKuce, nizStranicaKuce) ;

SPH_closeStructure();SPH_postRoot(TRANSFORMISANA_KUCA,0);

X

Y

Z

X

Y

Z

Page 30: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS30

Kompozitna matrica

� Prekonkateniranje matrica se koristi da bi se podržao prirodan redosled transformacija

– razlog: tačka se predstavlja vektorom-kolonom

� Kompozicija matrice se obavlja u vreme obilaska za prikaz – nije efikasno, jer se pri svakom iscrtavanju matrice transformacija množe

� Kompozicija se može obaviti i u vreme specifikacije strukturematrix_4x4 SPH_composeMatrix(

matrix_4x4 m1, matrix_4x4 m2, matrix_4x4 result);

� Na ovaj način se množenje matrica obavlja u vreme specifikacije– a ne u vreme obilaska, kao u prethodnom primeru

– dobija se na efikasnosti

Page 31: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS31

Hijerarhijske mreže struktura

� Operacija za poziv podstrukture iz neke strukturevoid SPH_executeStructure(int structureID);

� Primer: ulica sa tri različito orijentisane kuće različitih veličina void izgradiStandardizovanuKucu(){

SPH_openStructure(KUCA); SPH_polyhedron(...);

SPH_closeStructure();}...izgradiStandardizovanuKucu();SPH_openStructure(ULICA);

SPH_executeStructure(KUCA);SPH_setLocalTransformation(...);SPH_executeStructure(KUCA);SPH_setLocalTransformation(...);SPH_executeStructure(KUCA);

SPH_closeStructure();SPH_postRoot(ULICA,0);

X

Y

Z

Page 32: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS32

Dogradnja scene

� Ako je kasnije potrebno dodati dimnjak na kuću:void izgradiStandardizovanuKucu(){

SPH_openStructure(JEDNOSTAVNA_KUCA);SPH_polyhedron(...);

SPH_closeStructure();SPH_openStructure(DIMNJAK);

SPH_polyhedron(...);SPH_closeStructure();SPH_openStructure(KUCA);

SPH_executeStructure(JEDNOSTAVNA_KUCA);SPH_setLocalTransformation(...); /* za dimnjak */SPH_executeStructure(DIMNJAK);

SPH_closeStructure();}

� Poenta: struktura ulice uopšte nije morala da se menja� Atributi strukture se modalno primenjuju i na podstrukturu

– važno naročito zbog modelirajućih transformacija

Page 33: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS33

Pristup elementima strukture

� Pristup elementima se obavlja pomoću indeksa i labela� Elementi struktura su indeksirani celim brojevima od 1 do N� Pri umetanju ili brisanju elementa iz strukture

– svi veći indeksi se menjaju� Postoji jedinstveni tekući element

– na njega ukazuje celobrojni pokazivač tekućeg elementa– pokazivač tekućeg elementa sadrži indeks tekućeg elementa

� Kada se struktura otvori, tekući element je poslednji – sa indeksom N, za nepraznu strukturu – sa indeksom 0, za praznu strukturu

� Dodavanje elementa iza tekućeg– pokazivač na tekući element se inkrementira

� Brisanje tekućeg elementa– pokazivač na tekući element se dekrementira

Page 34: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS34

Pozicioniranje pomo ću indeksa

� Apsolutno postavljanje pokazivača na tekući element:void SPH_setElementPointer(int index);

� Relativno postavljanje pokazivača na tekući element:void SPH_offsetElementPointer(int delta);

/* + unapred, - unazad */

Page 35: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS35

Labele

� Pozicioniranje pomoću indeksa nije robusno – zbog promene indeksa pri umetanju i brisanju elemenata

� Zato SPHIGS daje mogućnost postavljanja labela u strukturi– labela je poseban element

� Labeli se dodeljuje celobrojna vrednost u trenutku definisanja� Operacija za dodelu labele:

void SPH_label(int id);

� Operacija za premeštanje pokazivača na element labele:void SPH_moveElementPointerToLabel(int id);

� Pomeranje se vrši isključivo unapred – neuspeh ako se labela ne pronađe do kraja strukture

� Preporučljivo je postaviti pokazivač na početak strukture pre ove operacije

Page 36: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS36

Editovanje strukture

� Element strukture se uvek dodaje iza tekućeg elementa – pokazivač tekućeg elementa se premešta na dodati element– PHIGS podržava i režime:

� umetanja (insert) i � zamene (replace) elementa

� Ne može se promeniti podatak unutar nekog elementa– kada je potrebno promeniti teme nekog poliedra:

� ceo poliedar se mora najpre obrisati � zatim ponovo definisati (dodati strukturi)

� Operacija za kopiranje svih elemenata strukture u tekuće otvorenuvoid SPH_copyStructure(int idStructure);

– elementi se kopiraju iza tekućeg elementa tekuće otvorene strukture– pokazivač tekućeg elementa pokazuje na poslednji kopirani element

Page 37: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS37

Operacije za brisanje elemenata

� Brisanje tekućeg elemenatavoid SPH_deleteElement(void);

� Brisanje elemenata u opsegu indeksavoid SPH_deleteElementsInRange(

int firstIndex, int secondIndex);– brisanje uključuje i elemente sa zadatim indeksima

� Brisanje elemenata između labelavoid SPH_deleteElementsBetweenLabels(

int firstLabel, int secondLabel);– brisanje ne uključuje elemente labela

� Pokazivač se premešta na element koji prethodi obrisanim elementima

� Preživeli elementi se renumerišu

Page 38: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS38

SPHIGS interakcija

� SPHIGS tastatura – identična kao SRGP tastatura sa jednim izuzetkom– početna pozicija za eho se specificira u NPC prostoru, uz ignorisanje z

� SPHIGS lokator – sličan SRGP lokatoru– glavna razlika: kroz mere lokatora se vraća informacija o indeksu prizora

� Nove mogućnosti– pik-korelacija:

� proširuje funkcionalnost lokatora da vrati identifikaciju objekta kojeg je korisnik izabrao lokatorom

– uređaj izbora (choice) � podržava menije

Page 39: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS39

Lokator

� SPHIGS lokator vraća poziciju kurzora u NPC prostoru sa ZNPC=0– u sistemu PHIGS – lokator vraća poziciju u RWC prostoru

� SPHIGS lokator vraća i indeks na najprioritetniji prizor– indeks u tabeli prizora za prizor čiji prikazni prozor obuhvata kurzor– kada se prikazni prozori preklapaju na mestu gde se nalazi kurzor

� vraća se indeks prizora sa većim rednim brojem

� Mera lokatora:typedef struct{

Point position; // [x,y,0] NPC

int viewIndex;int buttonOfMostRecentTransition;enum {UP, DOWN} buttonChord[MAX_BUTTON_COUNT];

} LocatorMeasure;

Page 40: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS40

Pik-korelacija

� U 2D svetu, dvosmislenost izbora kod preklopljenih primitiva serazrešava izborom primitive u inverznom vremenskom redosledu crtanja

� U 3D svetu, pik-korelacija je kompleksnija

� 2 pitanja:– koja informacija treba da se vrati da se identifikuje objekat?

� samo ID strukture nije dovoljan zbog višestrukih poziva iste strukture� potrebna je cela putanja – od korene strukture do izabrane primitive

– kada izabere neku primitivu, na koji nivo hijerarhije misli korisnik?� ovo aplikacija može da reši tako što ponudi korisniku naknadni izbor

Page 41: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS41

Kriterijum komparacije

� Pošto lokator ne vraća koordinate u RWC, SPHIGS može da poredi samo poziciju kurzora sa slikama primitiva na ekranu

� Kandidat za korelaciju – svaka “pogođena” primitiva

� U žičnom modelu prikaza – SPHIGS bira prvog kandidata na kojeg naiđe za vreme obilaska

(korisnik ni ne očekuje informaciju “dubine”)

� U senčenom modelu prikaza – SPHIGS bira kandidata čija je selektovana tačka najbliža tački posmatranja

Page 42: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS42

Funkcija pik -korelacije

void SPH_pickCorelate(Point position, int viewIndex , PickInformation *pickInfo);

typedef struct{

int structureID; // identifikator strukture

int elementIndex;// indeks elementa u strukturi

ElementTypeCode elementType;//Polyline,Polyhedron,e xec…

int pickID; // dodeljeni pik-identifikator

} PickPathItem;

typedef PickPathItem PickPath[MAX_HIERARCHY_LEVEL];

typedef struct {

int pickLevel;

PickPath path;

} PickInformation;

Page 43: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS43

Nivo pogotka i putanja

� pickLevel

– = 0 kada su sve primitive dovoljno daleko,

– inače dužina puta od korena do izabrane primitive

� path

– ulazi od [1] do [pickLevel ] � identifikacija elemenata strukture od korena do izabrane primitive

– na nivou pickLevel je primitiva, a na prethodnim-izvršenja strukture

Page 44: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS44

Primer hijerarhijske strukture

� Neka je definisana struktura “robot”

robot ima telo, glavu i dve ruke sa po jednim prstom

izvršenje(desna)

translacija

rotacija

skaliranje

izvršenje(leva)

translacija

rotacija

skaliranje

Poliedar “glava”

rotacija

Poliedar “trup”

Telo

izvršenje

translacija

Poliedar “ruka”

Ruka

Poliedar “prst”

Prst

Page 45: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS45

Primer pik -korelacije

� (a) prst leve rukelevel=3

path[1]: struct Telo, element 7, izvršenje

path[2]: struct Ruka, element 3, izvršenje

path[3]: struct Prst, element 1, poliedar

� (b) desna rukalevel=2

path[1]: struct Telo, element 11, izvršenje

path[2]: struct Ruka, element 1, poliedar

� (c) promašajlevel=0

� (d) prst desne rukelevel=3

path[1]: struct Telo, element 11, izvršenje

path[2]: struct Ruka, element 3, izvršenje

path[3]: struct Prst, element 1, poliedar

Page 46: SPHIGS - rti.etf.bg.ac.rsrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/_06 SPHIGS.pdf · Inicijalno postoji kona čan broj praznih struktura – programer ne brine o njihovom

01.04.2015.SPHIGS46

Pik-identifikator

� Sličan labeli – element strukture koji se ignoriše u obilasku

� Indeks elementa u strukturi je nepouzdan zbog editovanja� Podrazumevana vrednost pickID je 0 i modalno je postavljen u strukturi

� Postavlja se pomoću:void SPH_setPickIdentifier(int id);

� Ne nasleđuje se u podstrukturi (za razliku od atributa)– uvek je inicijalno 0 bez obzira da li je reč o korenoj strukturi ili podstrukturi

� Omogućava željenu finoću rezolucije pik-korelacije unutar strukture� Više primitiva u strukturi može da ima isti pickID ili svaka svoj

� Labele i pik-identifikatori su različiti mehanizmi, ali se često koriste zajedno