02 srgp - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 srgp... · 2 srgp - izlaz...

63
Računarska grafika SRGP - izlaz

Upload: phamdang

Post on 31-Jan-2018

239 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

Računarska grafika

SRGP - izlaz

Page 2: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz2

Portabilnost softvera

� Softver za grafičke primene u prvo vreme bio je kompleksan i skup � Na početku:

– paketi niskog nivoa zavisni od uređaja, isporučuje proizvođač uz uređaj� Danas:

– paketi visokog nivoa nezavisni od uređaja� Glavna svrha korišćenja paketa je portabilnost aplikativnog programa� Portabilnost se obezbeđuje tako što se:

– program izoluje od većine mašinskih posebnosti– programu stavljaju na raspolaganje bibliotečke funkcije

koje se implementiraju na širokom skupu procesora i operativnih sistema� Na taj način se povećava i portabilnost programera:

– programeri se mogu lako seliti sa instalacije na instalaciju, gde nalaze softver za programiranje grafike, sa kojim su familijarni

� Opšta svest o potrebi standarda pojavila se sredinom 70-ih

Page 3: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz3

Core specifikacija

� Kulminacija napora 70-ih – u specifikaciji Core � Pun naziv: 3D Core Graphics System

– proizveo je ACM SIGGRAPH Committee 1977. i doterao 1979.– specifikacija Core je ispunila svoju ulogu kao bazična specifikacija– imala je više implementacija– nije prošla postupak formalne standardizacije– korišćena samo kao ulaz za projekte standarda unutar organizacija:

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

� SIGGRAPH Core'79 je nestao zajedno sa vektorskim prikazivačima

Page 4: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz4

GKS

� Prva grafička zvanično standardizovana specifikacija:GKS (Graphical Kernel System)

– standard: ISO IS 7942 iz 1985. godine– elaborirana, pročišćena verzija Core– za razliku od Core, GKS je bio ograničen na 2D grafiku

� GKS podržava grupisanje logički korelisanih primitiva(linije, poligoni i znakovne niske) i njihovih atributa

– kolekcije primitiva sa atributima se zovu segmenti

� GKS segmenti ne mogu biti ugnežđeni � GKS-3D (1988.), 3D ekstenzija GKS-a, zvanični standard

Page 5: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz5

PHIGS

� PHIGS (Programmer's Hierarchycal Interactive Graphics System)– sofisticiraniji ali i znatno kompleksniji grafički paket– postao ANSI i ISO standard: ANSI X3.144-188, ISO 9592-1:1989 – podržava ugnežđena grupisanja 3D primitiva – hijerarhiju struktura– sve primitive i podstrukture – predmet geometrijskih transformacija – baza struktura (model) koju programer može da selektivno menja– sistem automatski ažurira ekran kad god se baza promeni – ne podržava mapiranje tekstura

� Implementacije PHIGS-a veliki paketi, zbog kompleksnosti specifikacije– implementacije teško postižu kompetitivne preformanse– potreban je HW koji podržava: prikaz, transformacije, isecanje

� PHIGS+: proširenje mogućnostima za pseudorealističan prikaz objekata– podržava osvetljavanje (senčenje), krive i površine (NURBS)

� Primenljivost – naučne/inženjerske aplikacije – geometrijska grafika u realnom vremenu

Page 6: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz6

Aktuelni paketi/sistemi

� Danas su aktuelni de facto standardi u računarskoj grafici � 2D celobrojni rasterski grafički paketi:

– QuickDRAW (Apple) – Xlib (X Window System) – Java2D (multiplatformski)

� 3D grafički paketi:– OpenGL (multiplatformski)

� GL (Silicon Graphics), rane 90-te� open-source inicijativa, kontrolisana evolucija (ARB-Architecture Review Board:

jedan glas po kompaniji: Microsoft, SUN, SGI, nVidia, ATI)� podržava samo izlaz

– DirectX (Microsoft, Windows platforma)� OO grafički paket� podržava i ulaz podataka

– Java 3D (multiplatformski)

Page 7: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz7

Grafički formati

� Razlikovati – grafičke pakete: biblioteke grafičkih funkcija ili klasa – grafičke formate: formati datoteka sa grafičkim sadržajem

� Grafički formati– rasterski: TIFF, JPG/JPG2, BMP(MS Win), ...– 2D vektorski: CGM(ISO), DXF(CAD), PS/EPS, CDR(Corel), ...– 3D vektorski: VRML/X3D, 3DS, MD2, ...– animacija: GIF, SWF(Flash), ...

� VRML (Virtual Reality Markup Language) – jezik za modeliranje virtuelne realnosti, 1994 – VRML interpreteri se ugrađuju u veb-čitače– X3D novija varijanta, standard ISO/IEC 19775-1

Page 8: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz8

Grafički sistemi na kursu RG

� Simple Raster Graphics Package (SRGP)– jednostavan paket za 2D rastersku grafiku, nezavisan od uređaja

� Simple PHIGS (SPHIGS)– jednostavan paket za 3D grafiku

� SRGP i SPHIGS su edukativni paketi– u duhu osnovne linije standardnih grafičkih paketa– veći deo znanja dobijenog kroz SRGP i SPHIGS

je dirketno primenljiv na komercijalne pakete� Na kursu RG se studiraju najpre 2D grafički paketi:

– koncepti se proučavaju na primeru SRGP (Simple Raster Graphics Package) – za praktičan rad (vežbe i domaći zadatak) se koristi Java2D

� U drugom delu kursa se studiraju 3D grafički paketi:– koncepti se proučavaju na primeru SPHIGS-a, koji je podskup PHIGS-a:– za praktičan rad (vežbe i domaći zadatak) se koristi OpenGL

Page 9: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz9

SRGP

� Repertoar primitiva SRGP-a: – linije, pravougaonici, poligoni, elipse i znakovne niske– repertoar primitiva sličan

� QuickDraw (Macintosh) � Xlib paketu za X Windows System

� Mogućnosti obrade interakcija su podskup onih iz SPHIGS� Teme koje se izučavaju koristeći SRGP su:

– operacije za crtanje – specifikacija primitiva i njihovih atributa– operacije za manipulacija pikselima (samo na rasterskim uređajima)– operacije za ulaz koje aplikacija koristi za interakciju sa korisnikom

� SRGP je projektovan tako da radi u prozorskim okruženjima� SRGP kontroliše unutrašnjost prozora – prozor je virtuelni ekran� Programer ne brine o detaljima pod kontrolom prozorskog sistema

Page 10: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz10

Crtanje pomo ću SRGP

� Crtanje pomoću paketa SRGP – kao crtanje na grafičkom papiru sa veoma finom rešetkom– postoje operacije kojima se specificira crtanje grafičkih primitiva

� Rešetka (raster, matrica, grid)– od 70-120 tačaka po inču (dpi) za konvencionalne prikazivače – od 300 tačaka po inču za prikazivače sa visokom rezolucijom

� Slika prikazuje površinu prikazivača u celobrojnom desnom kartezijanskom koordinatnom sistemu

– prikazivač je širok 1024 piksela i visok 800 piksela– prikazani piksel se nalazi u tački (2,3)– pikseli se nalaze na preseku linija rešetke

� ponekad se smatra da su pikseli u centrima ćelija rešetke

x

y

799

10230

0

Page 11: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz11

Primitive

� Na rasterskom uređaju linija se može crtati samo između tačaka koje leže na rešetci

� Sve tačke linije se aproksimiraju tako što se prikažu pikseli koji takođe leže na rešetci

� Popunjene površine se kreiraju prikazivanjem piksela koji leže u unutrašnjosti (ponekad i na granici)

� Bilo bi izuzetno naporno specificirati svaki piksel na liniji ili u oblasti� Grafički paketi dopuštaju programeru

da specificira primitive preko njihovih temena:– aplikacija šalje paketu koordinate koje definišu oblik primitive– grafički paket popunjava detalje koristeći algoritme za sken-konverziju

� SRGP poseduje procedure koji su generatori primitiva� Legalno je da se zada tačka izvan ekrana (prozora)

– samo delovi primitiva unutar ekrana (prozora) se prikazuju

Page 12: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz12

Linija

� Linija u RG – pravolinijski segment između 2 tačke (duž)� Sledeća SRGP procedura crta liniju od (x1,y1) do (x2,y2):

void SRGP_lineCoord(int x1, int y1, int x2, int y2);

� Primer poziva za crtanje linije – linija se crta od koordinatnog početka do piksela (100,300):

SRGP_lineCoord(0,0,100,300);

� Drugi (prirodniji) način crtanja linije je:typedef struct{ int x,y; } point;

void SRGP_line(point pt1, point pt2);

Page 13: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz13

Polilinija

� Polilinija – sekvenca linija čija su susedna temena povezana� SRGP ima dve procedure za crtanje polilinije

– analogija sa gornjim oblicima zadavanja linijevoid SRGP_polyLineCoord(int vertexCount,

int *xArray, int *yArray);void SRGP_polyLine(int vertexCount,

point *vertices);

� Prvi oblik je pogodan– kada su vrednosti x fiksirane, a vrednosti y se računaju

� Drugi oblik je pogodan – za crtanje proizvoljnih oblika specificiranih nizom tačaka

Page 14: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz14

Primer linije i polilinije

� Ekonomska analiza - vrednosti trgovinskog prometa za svaki mesec– celobrojni vektor meseci reprezentuje 12 meseci x-vrednostima– celobrojni vektor promet sadrži sračunate y-vrednosti

// Crtanje osa

SRGP_lineCoord(175,200,320,200);

SRGP_lineCoord(200,140,200,280);

// Crtanje grafika

SRGP_polyLineCoord(12,meseci,promet);

(175,200)

(200,140)

(200,280)

(320,200)

Page 15: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz15

Primer polilinije – drugi oblik

� Crtanje “leptir-mašne”– niz tačaka leptirMasna sadrži tačke sa koordinatama iz donje tabele

SRGP_polyLine(7,leptirMasna);

( 100,100 )

1001006

841205

1001404

601403

761202

601001

1001000

yx

Page 16: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz16

Markeri i polimarkeri

� Markeri su simboli koji se pozicioniraju na grafik da nešto označe� Mogu biti: tačke, zvezdice, kružići, …� SRGP procedure za markere odgovaraju onima za linije i polilinije� Kreiranje simbola markera centriranog na (x,y):

void SRGP_markerCoord(int x, int y);void SRGP_marker(point pt);

� Stil i veličina markera se mogu menjati pomoću atributa� Kreiranje sekvence identičnih markera na skupu zadatih tačaka:

void SRGP_polyMarkerCoord(int vertexCount, int *xArray, int *yArray);

void SRGP_polyMarker(int vertexCount, point *vertices);

Page 17: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz17

Primer polimarkera

� Sledeći poziv će dodati markere na graf sa prethodne slike:SRGP_polyMarkerCoord(12, meseci, promet);

Page 18: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz18

Poligoni

� Mogući načini crtanja poligona:– specificira se polilinija koja se sama zatvara (kao na slici leptir-mašne)– koristiti se SRGP poziv koji sam zatvara figuru

void SRGP_polygon(int vertexCount, point *vertices);

� Na primer, prethodna leptir-mašna bi se crtala:SRGP_polygon(6, leptirMasna);

� Nije potrebno ponoviti prvo teme u nizu

( 100,100 )

Page 19: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz19

Pravougaonici

� Pravougaonik bi se mogao crtati kao poligon sa 4 temena� Pravougaonik sa ivicama paralelnim ivicama ekrana

– predstavlja posebnu SRGP primitivu– može da se nacrta jednom od sledećih SRGP procedura:

void SRGP_rectangleCoord(int leftX, int bottomY, int rightX, int topY);

void SRGP_rectanglePt(point bottomLeft,point topRight);

void SRGP_rectangle(rectangle rect);– pri čemu je rectangle deklarisan na sledeći način:

typedef struct{ point bottomLeft, topRight; } rectangle;

Page 20: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz20

Primer pravougaonika

� Pravouganik širine 101 piksel i visine 151 piksel:SRGP_rectangleCoord(50, 25, 150, 175);

� SRGP pruža sledeće uslužne funkcije za kreiranje pravougaonika i tačaka iz koordinatnih podataka:

point SRGP_defPoint(int x, int y);rectangle SRGP_defRectangle(int leftX,

int bottomY,int rightX,int topY);

� Prethodni primer crtanja pravougaonika bi sad izgledao:rectangle rect;rect = SRGP_defRectangle(50, 25, 150, 175);SRGP_rectangle(rect);

Page 21: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz21

Krugovi i elipse

� Termin luk elipse se koristi za sve oblike: – kružne i eliptične – zatvorene i otvorene

� SRGP crta samo “standardne” elipse – elipse čije su ose paralelne sa koordinatnim osama

� Pogodno je da se luk elipse zadaje pravougaonikom u koji je elipsa upisana

– opisani pravougaonik se naziva granična kutija (bounding box) ili opseg (extents)

� Da li je luk elipse otvoren ili zatvoren zavisi od para uglova koji specificiraju početak i kraj luka

Page 22: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz22

Procedura za crtanje elipse

� Generalna SRGP procedura za crtanje elipse:void SRGP_ellipseArc(rectangle extRect,

double startAng, double endAng);� Uglovi se mere:

– u stepenima nasuprot kretanja kazaljke– 0° odgovara pozitivnom smeru x-ose

� Primer: luk elipse definisan uglovima od 45° do 270°

Page 23: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz23

Atributi

� Pojava primitive može biti kontrolisana specifikacijom njenih atributa� SRGP atributi:

– stil linije, debljina linije, boja i stil pera– primenjuju se na linije, polilinije, poligone, pravougaonike i lukove elipse

� Atributi se postavljaju “modalno”– oni su globalne promenljive stanja i menjaju se eksplicitno– pogodnost: štede trud navođenja brojnih parametara svake primitive

� Primitive se crtaju primenom aktuelnih vrednosti atributa u vreme crtanja� Promena vrednosti atributa ne utiče na do tada nacrtane primitive� Svaki atribut ima početnu vrednost � Preporuka dobrog stila programiranja:

– da se dodela vrednosti atributa vrši u svakoj proceduri – razlog – bolja modularnost

Page 24: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz24

Stil i debljina linije

� Linija i druge linearne primitive imaju sledeće atribute:– stil – debljina

� Atributi linija se postavljaju sledećim pozivima:typedef enum {CONTINOUS, DASHED, DOTTED, ...}

lineStyle;void SRGP_setLineStyle(lineStyle line_style);void SRGP_setLineWidth(int width);

� Debljina linije se meri u jedinicama ekrana – u pikselima� Svaki atribut ima početno (default) stanje:

– stil linije: CONTINOUS – debljina linije: 1

Page 25: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz25

Primer

� Tri linije različitih širina i stilova: SRGP_setLineWidth(4);SRGP_lineCoord(5,155,105,155); //SRGP_setLineStyle(DASHED);SRGP_setLineWidth(6);SRGP_lineCoord(5,105,105,105); //SRGP_setLineWidth(2);SRGP_setLineStyle(DOTTED);SRGP_lineCoord(5,55,105,55); //

Page 26: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz26

Implementacija stila linije

� O stilu linije se može razmišljati kao o bitskoj masci– bitska maska se koristi za selektivno prikazivanje piksela duž linije

� Maska se koristi pri sken-konverziji primitive koju vrši SRGP� Nula u masci označava "transparentan piksel“

– na tom mestu se zadržava stara vrednost u video memoriji

� Na primer:– vrednost CONTINOUS odgovara svim jedinicama: 111111111111...– vrednost DASHED odgovara nizu: 111100111100...

� gornji primer je za slučaj da je dužina crtice dva puta veća od praznine

Page 27: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz27

Stil i veli čina markera

� Markeri imaju sledeće atribute:– stil – veličina

� Atributi markera se postavljaju sledećim pozivima:typedef enum {MARKER_CIRCLE, MARKER_SQUARE,...} mark erStyle;void SRGP_setMarkerStyle(markerStyle marker_style);void SRGP_setMarkerSize(int markerSize);

� Veličina se zadaje u broju piksela stranice opisanog kvadrata� Početna vrednost za stil

– krug

Page 28: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz28

Boja

� Za razliku od nekih specifičnih atributa primitiva, boja se odnosi na sve primitive

� Barem dve vrednosti "boje“ postoje na svakom sistemu– jedine vrednosti na dvonivoskim (binarno-monohromatskim) sistemima

– 1 je "aktivna" boja kojom se crta

– interpretacija 0 i 1 se razlikuje:� 0 je crno, a 1 belo na “belo-na-crnom” uređaju� 0 je belo, a 1 crno na “crno-na-belom” uređaju

– na sistemu koji prikazuje RGB (red, gree, blue) boju:� crno=(0,0,0) – odsustvo sve tri komponente� belo=(max,max,max) – maksimalno prisustvo sve tri komponente

Page 29: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz29

SRGP tabela boja

� SRGP: celobrojni atribut boje ne određuje direktno boju: – on predstavlja indeks ulaza u tabeli boja (color/video look-up table)

� Svaki ulaz tabele definiše neku boju ili vrednost na skali sivog� Ako je d dubina bafera slike (broj bita po pikselu u video memoriji)

– tada postoji 2d ulaza tabele boja � SRGP programer

– ne treba da bude svesan načina na koji se implementira boja– on je svesan samo imena boja

� Imena boja su simboličke konstante – vrednosti indeksa– određuju ulaze tabele gde se podrazumevano nalaze vrednosti boje

� Vrednosti u tabeli zavise od uređaja � U nekim implementacijama aplikacija može da menja tabelu boja

– tada imena boja mogu da prevare – odgovornost programera

Page 30: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz30

Crno i belo

� SRGP podržava barem dva imena za boje:COLOR_BLACKCOLOR_WHITE

� Implementacija za monohromatski uređaj “belo-na-crnom”:COLOR_BLACK=0(0 je vrednost indeksa, r.br. ulaza u tabeli boja)COLOR_WHITE=1(1 je vrednost indeksa)color_table[COLOR_BLACK]=0color_table[COLOR_WHITE]=1

� Implementacija za uređaj sa 8 bita po osnovnoj RGB boji:color_table[COLOR_BLACK]=RGB(0,0,0)color_table[COLOR_WHITE]=RGB(255,255,255)

Page 31: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz31

SRGP postavljanje boja

� Boja kojom se crta (foreground) se postavlja pomoću:void SRGP_setColor(int colorIndex);

� Boja pozadine (background) se postavlja pomoću:void SRGP_setBackgroundColor(int colorIndex);

� Podrazumevane vrednosti indeksa u tabeli boja: – 0 – za pozadinu (background) – 1 – za boju crtanja (foreground)

Page 32: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz32

Popunjene primitive i njihovi atributi

� Primitive koje obuhvataju neku površinu mogu biti crtane na dva načina:– oivičeno (outlined) – popunjeno (filled)

� Verzije SRGP primitiva sa popunjavanjem – crtaju piksele u unutrašnjosti bez kontrastne ivice

� Ako se želi popunjena i oivičena primitiva – mora se eksplicitno nacrtati pomoću dva poziva operacija SRGP-a

� Za crtanje popunjenih poligona: – SRGP_fillPolygon sa istom listom parametara kao za poligon

� I ostale primitive za popunjene površine se definišu na sličan način: – u imenu operacije - prefiks fill

� Način popunjavanja (prekrivanja unutrašnjosti) se definiše atributom stila

Page 33: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz33

Definisanje s tila popunjavanja

� Atribut stila popunjavanja – definiše način popunjavanja zatvorene primitive

� Postoje četiri stila (načina, režima) popunjavanja:typedef enum {

SOLID, BITMAP_PATTERN_OPAQUE, BITMAP_PATTERN_TRANSPARENT,PIXMAP_PATTERN} drawStyle;

� Operacija za postavljanje atributa stila popunjavanja:void SRGP_setFillStyle(drawStyle draw_style);

Page 34: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz34

Vrednosti stila popunjavanja

� SOLID– proizvodi ravnomerno popunjavanje tekućom vrednosti atributa boje

� BITMAP_PATTERN_OPAQUE– popunjava primitive binarnim uzorkom

prekrivajući sve piksele tekućom ili bojom pozadine� BITMAP_PATTERN_TRANSPARENT

– popunjava primitive binarnim uzorkom prekrivajući neke piksele tekućom bojom, a ostavljajući druge da se provide

� PIXMAP_PATTERN– popunjava primitive uzorkom sa pikeslima proizvoljnih vrednosti– uvek netransparentno

� Uzorak se regularno ponavlja pri popunjavanju – mozaički efekat (tiling)

Page 35: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz35

Popunjavanje bit-mapom (1)

� Bit-mapirani uzorci popunjavanja – matrice jedinica i nula izabrane iz tabele raspoloživih uzoraka– svaki uzorak u tabeli je mala matrica (8x8) bitova

void SRGP_setFillBitmapPattern(int patternIndex);

� U netransparentnom režimu BITMAP_PATTERN_OPAQUE– 0 se crta u boji pozadine– 1 se crta u tekućoj boji

� U transparentnom režimu BITMAP_PATTERN_TRANSPARENTpopunjava se na sledeći način:

– na mestu gde je u uzorku 1, crta se tekuća boja (foreground color)– na mestu gde je u uzorku 0, ne crta se, providi se pozadina

Page 36: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz36

Popunjavanje bit-mapom (2)

� U TRANSPARENTrežimu– bit mapa predstavlja masku za dozvoljen upis u memoriju – kao što je to i bit-maska stila linije za linije i oivičene primitive

� U OPAQUErežimu– tekuća i boja pozadine moraju da budu različite

� u protivnom se bitmapa ne vidi– na uređaju u boji – kombinacije osnovne boje i pozadine

� dvo-tonski efekti

� Prednost dvo-tonskih efekata preko bit-mapiranih uzoraka – boja nije specificirana eksplicitno već je određena aktuelnim atributima

� Nedostatak (i razlog za podršku uzorcima sa piksel-mapom) – samo dve boje prikazuju

Page 37: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz37

Popunjavanje piksel-mapom

� Često je od interesa da se površina popuni uzorkom sa više boja� Za popunjavanje površine uzorkom u boji, stil je PIXMAP_PATTERN� Procedura za izbor uzorka:

void SRGP_setFillPixmapPattern(int patternIndex);

� Piks-mapa je matrica celobrojnih indeksa na tabelu boja– pošto je svaki piksel eksplicitno postavljen u piks-mapi, nema koncepta

rupa,pa nema ni razlike između transparentnog i netransparentnog režima

� Ako programer menja tabelu boja, boja popunjenih primitiva se menja� SRGP ne podržava, ali bi i piks-mapa mogla da se crta uz

transparenciju– jedna boja (na primer boja pozadine) bi mogla da bude transparentna

Page 38: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz38

Stil i u zorak olovke

� Tehnika crtanja po uzorku se koristi i za uticaj na izgled linija� Postoje atribut stila i odgovarajući uzorci olovke za linije i oivičene primitive� Slično stilu popunjavanja:

– stil olovke se bira od iste 4 opcije koje ima i stil popunjavanja– uzorci olovke se biraju od istih uzoraka za stil popunjavanja

� koriste se iste tabele uzoraka (bit-mape, odnosno piksel-mape)

� Koriste se različiti indeksi (posebni atributi)– da se ne bi promenom stila olovke uticalo na stil popunjavanja

� SRGP procedure za stil olovke i uzorak olovke:void SRGP_setPenStyle(drawStyle draw_style);void SRGP_setPenBitmapPattern(int patternIndex);void SRGP_setPenPixMapPattern(int patternIndex);

� Koristeći atribute debljine linije, stila linije i stila olovke moguće je nacrtati– npr. 5 piksela debelu, crta-tačka-crta elipsu, čije crtice slede neki uzorak

Page 39: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz39

Primer

� Potrebno je na tekućoj pozadini nacrtati 4 linije i to:– (a) kontinualna neprozirna linija– (b) isprekidana neprozirna linija– (c) isprekidana linija sa neprozirnim uzorkom– (d) isprekidana linija sa prozirnim uzorkom

� Program koji crta, je dat na sledećem slajdu� Ne preporučuje se korišćenje uzorka kod tankih linija (1-2 piksela)� Interakcija između stila linije i stila olovke je jednostavna:

– 0 u masci stila linije potpuno štite piksele na kojima se nalaze, – stil olovke utiče samo na one piksele za koje je maska stila linije jednaka 1

Page 40: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz40

Primer - rešenje

� Primer se realizuje sledećim programom (pretpostavlja se da pozadina postoji):

SRGP_setLineWidth(4)SRGP_setLineStyle(CONTINUOUS);SRGP_setPenStyle(SOLID);SRGP_line(pta1,pta2); // a) kontinualna neprozirnaSRGP_setLineStyle(DASHED);SRGP_line(ptb1,ptb2); // b) isprekidana neprozirnaSRGP_setPenBitmapPattern(DIAGONAL_BIT_PATTERN);SRGP_setPenStyle(BITMAP_PATTERN_OPAQUE);SRGP_line(ptc1,ptc2); // c) isprekidana neprozirna sa uzorkomSRGP_setPenStyle(BITMAP_PATTERN_TRANSPARENT);SRGP_line(ptd1,ptd2); // d) isprekidana prozirna sa uzorkom

Page 41: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz41

Pozadina ekrana aplikacije

� Korisnik očekuje da se na ekranu prikazuju primitive preko neke pozadine� SRGP inicijalizuje pozadinu ekrana na boju sa indeksom 0� Mnoge aplikacije crtaju po ekranu sa podrazumevanom pozadinom� Ponekad pozadina treba da je u drugoj boji

– tada je aplikacija odgovorna za postavljanje pozadine ekrana – pozadina ekrana se postavlja crtanjem pravougaonika

popunjenog željenim uzorkom preko celog ekrana� Jedna tehnika brisanja primitiva je njihovo crtanje

u boji uzorka pozadine ekrana aplikacije– ova "brza i prljava" tehnika daje oštećenu sliku

kada se brisana primitiva preklapa sa drugim primitivama– popravka oštećenja uključuje odlazak u bazu podataka aplikacije

i ponovo crtanje (svih ili samo nekih) primitiva

Page 42: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz42

Čuvanje i restauracija atributa

� Individualni atributi se mogu sačuvati za kasniju restauraciju� Korisno za pisanje potprograma koji nemaju bočne efekte

(ne utiču na globalno stanje)� Za svaku proceduru koja postavlja neki atribut

postoji procedura koja vraća tekuću vrednost atributa� Na primer, za upit o tekućem stilu linije se koristi:

lineStyle SRGP_inquireLineStyle(void);

� SRGP omogućava upit i restauraciju celog skupa atributa: void SRGP_inquireAttributes(attributeGroup *group);

void SRGP_setAttributes(attributeGroup *group);

Page 43: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz43

Struktura attributeGroup

� U implementaciji SRGP omogućen je pristup internim poljima strukture attributeGroup :

typedef struct {int write_mode;rectangle clip_rectangle;int font;lineStyle line_style;int line_width;int marker_size;markerStyle marker_style;int color, background_color;int plane_mask;drawStyle fill_style;int fill_pixmap_pattern_id;int fill_bitmap_pattern_id;drawStyle pen_style;int pen_pixmap_pattern_id;int pen_bitmap_pattern_id;

} attributeGroup;

Page 44: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz44

Tekst

� Specificiranje i implementiranje crtanja teksta – uvek je kompleksno u grafičkim paketima

� Postoji veliki broj opcija i atributa teksta:– vrsta (font) znakova (Times Roman, Helvetica, Courier , ...)– stil (običan-normal, iskošen-italic, naglašen-bold , podvučen-underlined, ...)

– visina, tipično merena u broju tačaka: 10 12 14 16 18 20� tačka je jedinica u izdavaštvu, približno 1/72 inča

– širina – pozicija– prostor između susednih znakova (horizontal spacing)– prostor između susednih linija (vertical spacing)– ugao pod kojim se znaci ispisuju– efekat (npr. oivičeno: , urezbareno )

� PostScript standard nudi mnoge napredne mogućnosti za opis teksta (i drugih grafičkih primitiva)

ABC

Page 45: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz45

SRGP tekst

� Najrudimentarnija podrška u grafičkim paketima: – karakteri jednake širine i jednaka rastojanja između njih

� Druga krajnost: – proporcionalni karakteri – varira širina znaka i rastojanje između njih

� SRGP:– tekst je horizontalno poravnat, širina karaktera varira, ali je razmak fiksan

� Tekst se generiše pomoću:void SRGP_text(point origin, char *text);

– lokaciju tekst primitive određuje origin, takođe poznat kao “tačka sidrenja”– osnovna linija (baseline) je hipotetička linija na kojoj leže karakteri– neki karakteri ("q") imaju rep (descender) ispod osnovne linije

quit Height

DescentBaseline

Text origin

Width

Page 46: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz46

Implementacija teksta i operacije

� Pojava primitive teksta je određena sa samo dva atributa– tekućom bojom i fontom

� Font je samo jedan indeks u tabeli fontova različitih stilova i veličina– tabela je implementaciono zavisna

� Svaki znak u fontu je definisan kao pravougaona bit-mapavoid SRGP_setFont(int fontIndex);

� SRGP crta karakter popunjavajući pravougaonik koristeći bit-mapu kao uzorak u BITMAP_PATTERN_TRANSPARENTrežimu

� Jedinice definišu unutrašnjost karaktera, a nule "rupe"� Neki sofisticiraniji paketi definišu piksel-mape karaktera � Piksel-mapa omogućava da unutrašnjost karaktera ima šaren uzorak� SRGP obezbeđuje proceduru za upit o okviru sa tekstom:

void SRGP_inquireTextExtent(char *text, int *width, int *height, int *descent);

� SRGP ne podržava bit-mapirani netransparentni režim za ispis karaktera

Page 47: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz47

Primer - formatiranje teksta

� Primer: crni tekst u tekućem fontu, centriran u belom okružujućem pravougaonikuvoid MakeQuitButton(rectangle buttonRect) {

point centerOfButton, textOrigin;int width, height, descent;SRGP_setFillStyle(SOLID);SRGP_setColor(COLOR_WHITE);SRGP_fillRectangle(buttonRect);SRGP_setColor(COLOR_BLACK);SRGP_setLineWidth(2);SRGP_Rectangle(buttonRect);SRGP_inquireTextExtent("quit", &width, &height, &de scent);centerOfButton.x=(buttonRect.bottomLeft.x+buttonRec t.topRight.x)/2;centerOfButton.y=(buttonRect.bottomLeft.y+buttonRec t.topRight.y)/2;textOrigin.x=centerOfButton.x-(width/2);textOrigin.y=centerOfButton.y-(height/2);SRGP_text(textOrigin,"quit");

}

Page 48: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz48

Posebne mogu ćnosti rasterske grafike

� Tema:– mogućnosti izlaza koje posebno koriste prednosti rasterskog hardvera

� Problemi:– kreiranje kompleksnih slika koje treba da se brzo pojave na ekranu:

� priprema u memoriji � zatim kopiranje na ekran (u video memoriju)

– rad sa menijima: meni treba da se brzo pojavi, ali i da nestane sa ekrana� prilikom nestajanja, potrebno je brzo restaurirati sliku koja može biti složena� nema vremena da se tada slika crta – rešenje je u kopiranju na ekran

� Rešenje:– rad sa kanvasima (kanvas=“slikarsko platno”)– kanvasi omogućavaju smeštanje u memoriju i restauraciju delova ekrana

koji su privremeno preklopljeni drugim sadržajem (prozorima ili menijima)

Page 49: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz49

Kanvasi

� Kanvasi su memorijski baferi za bit-mape ili piks-mape – u baferima se priprema deo slike

� Tehnika je efikasna zahvaljujući mogućnosti kopiranja blokova piksela� Kanvas je okarakterisan:

– strukturom podataka (2D matrica) za smeštanje piksela – vlastitim (kartezijanskim) koordinatnim sistemom i veličinom – atributima crtanja slike

� Sam ekran je takođe kanvas – specifičan je po tome što je jedini koji se prikazuje

� Da bi se slika iz nekog kanvasa privremeno prikazala, aplikacija:– kopira piksele iz dela ekrana na kojem treba da se pojavi slika

u neki privremeni kanvas – zatim kopira željeni ranije pripremljeni kanvas na deo ekranskog kanvasa– nakon završetka aktivnosti za koju je bio potreban privremeni sadržaj,

restaurira dati deo ekrana iz privremenog kanvasa

Page 50: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz50

SRGP kanvas

� Aktivan kanvas – onaj u kojem se crtaju nove primitive i na koji se odnose promene atributa

� Aktivni kanvas može biti kanvas ekrana (do sada podrazumevano) ili neki koji se ne prikazuje

� Koordinate koje se šalju funkcijama sistema za crtanje primitivasu u koordinatnom sistemu aktivnog kanvasa

� Svaki kanvas ima vlastiti skup atributa koji su na podrazumevanim vrednostima kada se kanvas kreira

� SRGP kanvas je virtuelni ekran programski specificiranih dimenzija sa pridruženim svojstvima:

� piks-mapom� koordinatnim sistemom � grupom atributa

� Svojstva kanvasa se nazivaju i stanjem ili kontekstom kanvasa

Page 51: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz51

Kreiranje i aktiviranje kanvasa

� Pri inicijalizaciji SRGP-a ekranski kanvas se:– kreira i postaje aktivni kanvas

� SRGP konstanta SCREEN_CANVASpredstavlja ID ekranskog kanvasa� Ostali kanvasi se kreiraju procedurom:

canvasID SRGP_createCanvas(int width, int height);� Novi kanvas automatski postaje aktivni, a pikseli se inicijalizuju na boju 0� Nakon kreiranja kanvasa

– veličina mu se ne može promeniti (neke implementacije to mogu da dopuste)� Programer ne može kontrolisati broj bita po pikselu kanvasa

– to definiše hardver� Atributi kanvasa se čuvaju kao lokalna informacija stanja� Aplikacija aktivira postojeći kanvas sledećim pozivom:

void SRGP_useCanvas(canvasID id);

Page 52: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz52

Operacije sa kanvasima

� Nema načina da se aktivirani kanvas učini direktno vidljivim – njegova slika (ili samo njen deo) se kopira na ekranski kanvas

� Detekcija aktivnog kanvasa:canvasID SRGP_inquireActiveCanvas();

� Kanvas se uništava procedurom:void SRGP_deleteCanvas(canvasID id);

� Ne može se uništiti ekranski kanvas i aktivni kanvas� Sledeće procedure omogućavaju upit o dimenzijama kanvasa:

rectangle SRGP_inquireCanvasExtent(canvasID id);void SRGP_inquireCanvasSize(canvasID id,

int *width, int *height);

Page 53: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz53

Odsecaju ći pravougaonik

� Često je poželjno ograničiti primitive na podoblast aktivnog kanvasa� SRGP podržava atribut pravougaonika za odsecanje (clip rectangle)

– odsecanje i isecanje su sinonimi u ovom kontekstu� Sve primitive se crtaju samo do granice pravougaonika za odsecanje� Atribut se može menjati, kao i drugi atributi

– njegova poslednja vrednost je zapamćena u grupi atributa kanvasa– podrazumevana vrednost atributa je ceo kanvas

� Pravougaonik se može smanjiti, ali ne i povećati izvan granica kanvasa� Funkcije za postavljanje i upit o pravougaoniku za odsecanje:

void SRGP_setClipRectangle(rectangle clipRect);rectangle SRGP_inquireClipRectangle(void);

� Aplikacije za crtanje i slikanje, treba da koriste ovaj atribut– da ograniče oblast za crtanje/slikanje i spreče da oblast menija bude oštećena

� PostScript nudi višestruke proizvoljne poligone za odsecanje

Page 54: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz54

Operacija kopiranja piksela

� Operacija copyPixel()– još se naziva bitBlt (bit block transfer) ili pixBlt, kada je realizovana hardverski

� Prvi put se pojavila na ALTO bit-mapiranoj radnoj stanici u Xerox-u (1970)� Komanda se koristi za kopiranje niza piksela

– iz pravougaone oblasti izvornog kanvasa– u odredišnu oblast u tekuće aktivnom kanvasu

� SRGP podržava samo mogućnost da izvorni i odredišni pravougaonik oblasti budu iste veličine

� Napredniji paketi: – različite dimenzije izvornog i odredišnog pravougaonika uz automatsko skaliranje – selektivno maskiranje izvornih ili odredišnih piksela

Page 55: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz55

SRGP funkcija za kopiranje piksela

� SRGP funkcija:void SRGP_copyPixel(canvasID sourceCanvas,

rectangle sourceRect, point destCorner);

Izvorni pravougaonik

Izvorni kanvas

Odredišni pravougaonik

Odredišno teme

Aktivni kanvas

Page 56: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz56

Rezultat kopiranja piksela

� Rezultat operacije kopiranja piksela je u oblasti koja je presek: – pravougaonika aktivnog kanvasa,

– odredišnog pravougaonika i

– poligona (pravougaonika) za odsecanje

Izvorni kanvas

Izvorni pravougaonik

Odredišni pravougaonik

Aktivni kanvas

Pravougaonik za odsecanje

Page 57: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz57

Primer operacija sa kanvasima (1)

� Problem: kopiranje slike tela menija na ekran

Page 58: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz58

Primer operacija sa kanvasima (2)

� Rešenje: saveCanvasID=SRGP_inquireActiveCanvas();

SRGP_useCanvas(SCREEN_CANVAS);

saveClipRectangle=SRGP_inquireClipRectangle();

SRGP_setClipRectangle(SCREEN_EXTENT);

SRGP_copyPixel(menuCanvasID,menuBodyExtent,

menuBodyScreenExtent.bottomLeft);

SRGP_setClipRectangle(saveClipRectangle);

SRGP_useCanvas(saveCanvasID);

Page 59: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz59

Režim upisa ili rasterski operator

� Funkcija SRGP_copyPixel() može da izvršava i logičku operaciju nad svakim korespondentnim parom piksela izvornog i odredišnog regiona

� Simbolički: D <-- S op D– op se naziva rasterski operator (RasterOp) ili režim upisa (write mode) – u opštem slučaju predstavlja jedan od 16 Bulovih operatora

� Najčešće korišćena 4 su: replace, or, xor i and – njih podržava SRGP

BLACK_COLOR=1WHITE_COLOR=0

op =

replace or xor and

S D

Page 60: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz60

Postavljanje režima upisa

� Režim upisa utiče ne samo na SRGP_copyPixel() nego i na nove primitive koje se crtaju na kanvasu

� Atribut upisnog režima se postavlja sledećim pozivom:typedef enum {WRITE_REPLACE, WRITE_XOR,

WRITE_OR, WRITE_AND} writeMode;void SRGP_setWriteMode(writeMode write_mode);

� Podrazumevana vrednost atributa je WRITE_REPLACE� Rasterske operacije se vrše nad vrednostima piksela u kanvasu

– u SRGP-u vrednosti piksela su vrednosti indeksa u tabeli boja– na binivoskom sistemu

� postoje samo dve vrednosti indeksa (0 i 1), reprezentovane jednim bitom � interpretacija veoma prirodna

– na sistemu sa n bita po pikselu� RasterOp se obavlja bitskom širinom nad n-bitnim indeksima� rezultat može da bude neprirodan, jer rezultantni indeks daje novu boju

Page 61: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz61

Interpretacija rasterOp

� Interpretacija pojedinih upisnih režima:– replace režim je destruktivan

i ima efekat crtanja preko postojećeg crteža� koristi se za crtanje primitiva i osvežavanje sadržaja prozora

– or režim na dvonivoskim sistemima predstavlja nedestruktivno dodavanje na postojeću sliku

� koristi se često za slikanje (četkica je S sa pikselima vrednosti 1)– xor režim na dvonivoskim sistemima invertuje odredišni region

na mestu gde izvorni region ima vrednost 1� koristi se često za invertovanje selektovanog ekranskog tastera,

za rubberband eho i eho kurzora– and režim selektivno resetuje piksele odredišta

koji odgovaraju pikselima izvorišta sa vrednošću 0� koristi se za brisanje gumicom (gumica je S sa pikselima vrednosti 0)

Page 62: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz62

Primer koriš ćenja rasterskih operatora

� Formiranje kanvasa scene SC sastavljene od transparentnih slojeva � Pretpostavka:

– ne radi se sa VLU tabelom (paletom) kao u SRGP, vrednosti piksela su RGB boje

� Koraci za dodavanje novog sloja na scenu:– kreira se kanvas sloja LC (piks-mapa)

� LC se inicijalizuje RGB bojom 0 (000...02) (crna boja, pozadina)� svi objekti koji pripadaju sloju se iscrtaju u LC proizvoljnom bojom

– kreira se kanvas koji sadrži monohromatsku masku MC � MC se inicijalizuje belom (111...12)� svi objekti koji pripadaju datom sloju se iscrtaju crnom bojom (000...02) � u MC je dobijena bela slika sa crnim rupama na mestima objekata

– SC and MC --> SC => crne rupe na mestima objekata u novom sloju, a ostatak scene neizmenjen

– SC or LC --> SC => scena kojoj je dodat transparentni sloj

Page 63: 02 SRGP - izlazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/02 SRGP... · 2 SRGP - izlaz 04.03.2015. Portabilnost softvera Softver za grafi čke primene u prvo vreme bio

04.03.2015.SRGP - izlaz63

Ilustracija primera

SC

SC and MC SC or LC

SC SC

LC crno: 000...02

MCcrno: 000...02

belo: 111...12