1. rasterski prikazivaČirti.etf.bg.ac.rs/rti/ri5rg/materijali/rg_vezbe_2009-03-12.pdf · ako je a...

68
ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG) Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 1 od 68 1. RASTERSKI PRIKAZIVA ČI Sledeća slika prikazuje izgled signala slike za vreme trajanja jedne horizontalne linije (t H ) t HFP : horizontal front porch time t HBP : horizontal back porch time t HB : horizontal blanking time t HA : horizontal active time t H : horizontal time

Upload: others

Post on 22-Feb-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 1 od 68

1. RASTERSKI PRIKAZIVAČI Sledeća slika prikazuje izgled signala slike za vreme trajanja jedne horizontalne linije (tH)

tHFP : horizontal front porch time tHBP : horizontal back porch time tHB : horizontal blanking time tHA : horizontal active time tH : horizontal time

Page 2: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 2 od 68

1. Zadatak

Date su sledeće karakteristike monohromatskog monitora: - horizontalna frekvencija: fH = 22.7kHz - vertikalna frekvencija: fV = (43-50.7)Hz - minimalno vreme zamračenja (blanking):

- horizontalnog: tHB(min) = 9µs - vertikalnog: tVB(min) = 1000µs

- tipično vreme zamračenja (blanking): - horizontalnog: tHB(typ) = 12µs - vertikalnog: tVB(typ) = 2112µs

- tipično trajanje prednje stepenice (front porch) zamračenja: - horizontalnog: tHFP(typ) = 4µs - vertikalnog: tVFP(typ) = 528µs

- tipično trajanje sinhronizacije: - horizontalnog: tHS(typ) = 2µs - vertikalnog: tVS(typ) = 528µs

- tipično trajanje zadnje stepenice (back porch) zamračenja: - horizontalnog: tHBP(typ) = 6µs - vertikalnog: tVBP(typ) = 1056µs

- tipitčno aktivno vreme horizontalne linije: tHA(typ) = 32µs

i releventni podaci za kontroler grafičkog displeja (GDC): - širina reči W = 16 bita, - GDC generiše paran broj aktivnih reči po liniji, - ako je tWD vreme prikazivanja jedne reči, ograničenja kod horizontalnog zamračenja su sledeća:

tHFP ≥ 2 tWD; tHS ≥ 3 tWD; tHBP ≥ 3 tWD; Za odnos širina/visina ekrana (aspect ratio) A.R = 4/3, radnu vertikalnu učestanost fV = 50Hz i sliku (Frame) koja se generiše bez protkivanja (non-interlaced), odrediti: a) broj aktivnih linija AL i aktivnih piksela AP b) učestanost taktnog signala za prikazivanje piksela (pixel ili dot clock) fpix c) stvarne vrednosti za tHFP, tHS, tHBP, i tVFP, tVS, tVBP

Literatura: “82720/GDC Application Manual”, Intel Corp.

REŠENJE:

a) Broj aktivnih linija (AL) slike jednak je razlici ukupnog broja linija (TL) i broja linija u vertikalnom zamračenju (BL):

AL = TL-BL Pošto se slika (frame) generiše bez protkivanja, ona se sastoji iz samo jednog video-polja (field) pa je ukupni broj linija:

4541

1

===

H

V

LINE

FIELD

f

fttTL

Page 3: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 3 od 68

Broj linija u vertikalnom zamračenju je: BL = VFP + VS + VBP

Pošto je perioda linije (sweep time):

sf

tH

LINE µ053.441==

broj linija u prednjoj stepenici vertikalnog zamračenja je:

1298.11)( ==

=

LINE

typVFP

tt

VFP

(Uzima se veća celobrojna vrednost da bi tajming bio “robusniji”, tj. da vreme potrebno za vertikalni zamračeni povratak elektronskog malza ne bi bilo prekratko) Po analogiji: VS = 12, VBP = 24, pa je broj linija u zamračenju:

BL = 12 + 12 + 24 = 48, a broj aktivnih linija:

AL = 454-48 = 406 Da bi širina i visina pikela bili približne veličine, uzima se da je približan broj piksela po liniji:

AP(approx) = A.R. ⋅ AL = 541.33 Broj aktivnih reči po liniji je:

AW(approx) = AP(approx) / W = 33.83 Prema uslovu zadatka, AW mora biti paran broj, pa se uzima najbliža parna vrednost: AW=34. Tačan broj piksela po liniji je:

AP = AW ⋅ W = 34 ⋅ 16 = 544

b) Učestanost taktnog signala za prikazivanje piksela je:

WDpixpix t

Wt

f ==1

Vreme prikazivanja reči izračunava se kao:

TWtt LINE

WD =

gde je TW ukupan broj reči u liniji: TW = AW + BW

Aktivan broj reči AW je određen u tački (a) i iznosi AW = 34, a broj reči u horizontalnom zamračenju BW se može proceniti na sledeći način:

=

)(

)(

approxWD

typHB

tt

BW

gde se približna vrednost vremena prikazivanja reči izračunava kao:

nsAW

tt typHA

approxWD 176.941)()( ==

Sledi:

1375.12 ==BW , (BW > 2 + 3 + 3 = 8) TW = 34 + 13 = 47

tWD = 937.298ns fpix = 17.070347MHz

Page 4: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 4 od 68

Naravoučenije: 1. Broj aktivnih linija (AL) koji određuje vertikalnu (Y) rezoluciju ekrana direktno je proporcionalan

horizontalnoj učestanosti (fH) za datu vertikalnu učestanost (fV) prikazivača. 2. Broj aktivnih piksela (AP) koji određuje horizontalnu (X) rezoluciju ekrana direktno je proporcionalan

učestanosti taktnog signala za prikazivanje piksela (fpix) za datu horizontalnu učestanost (fH) prikazivača c) Izračunavanje stvarnih vremenskih intervala u zamračenju: Horizontalno zamračenje

Broj reči prednje stepenice:

267.4)()( ==

WD

typHFPapprox t

tHFP

Pošto je tHFP ≥ 2 tWD => HFP = 4 => tHFP = 4 tWD = 3.75µs Broj reči sinhro-impulsa:

13.2)()( ==

WD

typHSapprox t

tHS

Pošto je tHS ≥ 3 tWD => HS = 3 => tHS = 3 tWD = 2.81µs Broj reči zadnje stepenice:

4.6)()( ==

WD

typHBPapprox t

tHBP

Pošto je tHBP ≥ 3 tWD => HBP = 6 => tHBP = 6 tWD = 5.62µs

Vertikalno zamračenje tVFP = VFP ⋅ tLINE = 528.636µs tVS = VS ⋅ tLINE = 528.636µs tVBP = VBP ⋅ tLINE = 1057.272µs

2. Zadatak Dužina reči video memorije iznosi 32 bita. Horizontalna učestanost slike na monitoru iznosi fH=15.504kHz, a vreme horizontalnog zamračenja mlaza tHB=16.5µs. Odrediti učestanost taktnog signala za pomerački registar video memorije (pixel ili dot clock) tako da rezolucija slike bude 1024x512.

REŠENJE:

Perioda linije iznosi:

sf

tH

LINE µ5.641==

Aktivno vreme horizontalne linije je: sttt HBLINEHA µ48=−=

Pošto je horizontalna rezolucija (broj aktivnih piksela po liniji) AP = 1024, vreme za ispisivanje jednog piksela na ekranu je:

nsAPt

t HApix 875.46==

pa je tražena učestanost: fpix = 21.3MHZ

PROVERA: broj piksela u zamračenju mora biti celobrojni umnožak dužine reči video memorije.

16.5 35248.875

352 1132

HB

pix

t sBPt ns

PBw

µ= = =

= =

Page 5: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 5 od 68

3. Zadatak Rezoluciuja ekrana je 720x348, a učestanost slike fV = 50Hz. Slika se generiše bez protkivanja (non-interlaced). Ako je broj linija u zamreačenju za izmenu slike BL=20, a broj piksela u zamračenju za povratak mlaza sa jedne na drugu liniju BP=16 odrediti učestanost taktnog signala pomeračkog registra video memorije fpix.

REŠENJE:

AL = 348 => TL = AL + BL = 368 AP = 720 => TP = AP + BP = 736

vFIELD f

t 1=

TLt

t FIELDLINE =

TPTLfTPtt

v

LINEpix ⋅⋅

==1

fpix = 13.5424MHZ 4. Zadatak

Na jednom binarno-monohromatskom rasterskom prikazivaču slika se prikazuje bez protkivanja. Vertikalna učestanost slike je fV, horizontalna učestanost fH, a učestanost taktnog signala pomeračkog registra video memorije je fP. Horizontalno zamračenje elektronskog mlaza traje tHB, a vertikalno zamračenje tVB. Odrediti minimalan broj adresnih linija video memorije NAddr ako je adresibilna jedinica video memorije jedan bajt.

REŠENJE:

NAddr = log2 ( AL ⋅ AP / 8) = log2(AL ⋅ AP) – 3 AL = TL – BL AP = TP – BP TL = tV / tH = fH / fV TP = tH / tP = fP / fH

BL = tVB / tH = tVB ⋅ fH BP = tHB / tP = tHB ⋅ fP NAddr = log2 [fH ⋅ (1/ fV - tVB) ⋅ fP ⋅ (1/ fH - tHB)] – 3 5. Zadatak

Vertikalna učestanost slike je fV = 50Hz, horizontalna fH=36.8KHz, a učestanost taktnog signala pomeračkog registra video memorije fpix = 27.0848MHz. Slika se generiše bez protkivanja. Ako je broj linija u vertikalnom zamračenju BL = 11, a broj piksela u horizontalnom zamračenju BP = 16 odrediti horizontalnu i vertikalnu rezoluciju datog ekrana.

REŠENJE:

Horizontalna rezolucija je: AP = TP – BP = tLINE / tpix – BP = fpix/fH – BP = 736 -16 = 720 Vertikalna rezolucija je:

AL = TL – BL = tFRAME / tLINE - BL = fH / fV – BL = 736-16 = 720

Page 6: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 6 od 68

2. Mapiranje tačke iz koordinatnog sistema ekrana u video memoriju

Pretpostavke: • Levi koordinatni sistem sa početkom u levom gornjem uglu ekrana • Koordinatni početak se mapira u MSB bajta sa najnižom adresom u video memoriji • Binarno – monohromatski prikaz (bit po pikselu) • Vrednost 1 u bitskoj lokaciji video memorije odgovara osvetljenom stanju pridruženog piksela Sekvencijalno mapiranje Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, onda ja a+1 adrresa prvog bajta koji pripada liniji i+1.

Nesekvencijalno mapiranje Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada liniji i+1 nije na adresi a+1. Unutar jedne linije, uobičajeno je da su bajtovi kojima pripadaju susednii pikseli na susednim adresama.

PRIMER:

Hercules grafika (720 x 348) 1. Koordinatni početak (0,0) se mapira u MSB bajta na adresi B000:0h (segmentna adresa je B000h, adresa ofseta

je 0). 2. VM je organizovana u 4 ‘banke” kapaciteta po 8K. 3. Prvoj banci pripadaju linije 0,4,8,…, drugoj 1,5,9,…, trećoj 2,6,10,…, a četvrtoj 3,7,1,… . 4. Ako je poslednji bajt linije i na adresi a, tada je prvi bajt linije i+4 (koja pripada istoj banci) na adresi a+1 y offset adrese bajtova 0 0h 1h … (720/8)-1=59h 4 5Ah 5Bh … 1 2000h 2001h 5 205Ah 205Bh … 2 4000h 4001h 6 405Ah 405Bh … 3 6000h 6001h 7 605Ah 605Bh … ByteAddr = LineAddr + ByteInLine = = VMStartAddr + BankStartAddr + LineInBank + ByteInLine = 0 + 2000h*(y mod 4) + (720 div 8)*(y div 4) + (x div 8) BitPosition = 7 – (x mod 8)

• Da bi se smanjila kompleksnost izračunavanja adrese bajta kod nesekvencijalnog mapiranja – koristi se tablica preslikavanja broja linije (y) u adresu početka te linije: tablica je niz čiji je indeks broj linije, a odgovarajući element adresa početka linije u VM

Page 7: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 7 od 68

3. Primeri modernijih grafičkih adaptera i tehnologija za sintezu slika

INTEL i740 GRAFIČKI AKCELERATOR Terminologija • AGP – Accelerated Graphics Port : koncept koji omogućava visok nivo performansi i realizma u prikazu nove

generacije 3D grafičkih akceleratora. Principijelni benefit potiče od brzog R/W (read/write) pristupa opisima (teksturama) površina u glavnoj memoriji sistema.

• VGA – Video Graphics Array • SDRAM – Synchronous DRAM • SGRAM – Synchronous Graphics RAM • PPI – Precise Pixel Interpolation: tehnika • DME – Direct Memory Execution: tehnika smeštanja i izvršenja tekstura iz sistemske memorije • PDP – Parallel Data Processing: tehnika izvršavanja naredbi paralelno u protočnoj obradi • RAMDAC – RAM-based Digital-to-Analog Converter • BLT – (BitBlT) Bit Block Transfer: hardverska implementacija za brzo kopiranje bitmapa • STRBLT – Stretch BLT: podrška za hardversko zumiranje bitmapa • texel – texture map pixel: piksel teksture • sideband adresiranje: mogućnost da se izda više zahteva, a da se između ne čeka da stignu podaci

Karakteristike • Visoko integrisan grafički akcelerator projektovan za AGP • Arhitektura: mašine koje rade paralelno da postignu performanse 2D i 3D grafike, i videa

o 3D i 2D mašinama upravlja 3D/2D protočni pretprocesor o pretprocesor omogućava značajan protok grafičkih podataka

• 3D mašina ima duboku protočnost i omogućava: o podršku za mapiranje teksture sa korektnom perspektivom o 4 vrste MIP-mapiranja o ravno i gouraud senčenje o alfa-mešanje (alpha-blending ) za postizanje efekta transparentnosti o stippling o smanjivanje efekta nazupčenosti (antialiasing ) o zamagljivanje (fogging) za postizanje efekta gustine atmosfere o Z-bafer (Z-buffering) za uklanjanje nevidljivih površina o bogat set 3D instrukcija koje dopuštaju da se pojedine funkcije omoguće ili onemoguće

• Teksture se lociraju u AGP memoriju (oslobađa se lokalna memorija za Z-bafer i bitmape) • 2D mogućnosti obuhvataju:

o BLT i STRBLT mašine o hardverski kursor o širok skup 2D registara i instrukcija

• 64-bitna BitBLT mašina obezbeđuje hardversku akceleraciju mnogih opštih prozorskih operacija • Namenske video mašine za podršku video konferencija i drugih aplikacija

o VMI (Video Module Interface) sa Host Port i Video Port koji čine interfejs prema DVD čipu o bidirekcionalni VMI Host Port se koristi za jeftino hardversko MPEGII DVD dekodovanje o Video Port interfejs obezbeđuje prihvat slike sa video ulaznih uređaja o Video Port uključuje podršku za full motion video , MPEGII/DVD, Intercast, VBI, NTSC, PAL TV izlaz

Page 8: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 8 od 68

Pregled arhitekture

3D mašina • Postiže visoke performanse 3D grafike uz bogat skup 3D funkcija • Konstantan visok nivo performansi se postiže hiper-protočnom 3D arhitekturom • Korišćenjem DME tehnike postuže se potpuno iskorišćenje propusnog opsega AGP i memorije

o DME tehnikom se postižu visoke performanse ali i neograničena veličina tekstura o sideband adresiranje daje mogućnost da se izda više zahteva bez čekanja na podatke o podrška za Type1, Type2 i Type3 sideband cikluse => 533MB/s vršni transferi podataka o Type3 omogućava da teksture budu locirane bilo gde u 32-bitnom adresnom prostoru

• Grafička protočna obrada (pipeline) omogućava izvršenje više komandi u paraleli (PDP tehnika) • Memorijska lokalnost trouglova koji se dohvataju ne zavisi od njihove veličine ni orijentacije • Memorijska lokalnost smanjuje stranične promašaje i povećava efikasnost keširanja • Tehnika PPI doprinosi kvalitetu mašine tekstura preciznim interpolacijama vrednosti piksela

o detaljno procesiranje piksela održava visok nivo kvaliteta slike

Page 9: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 9 od 68

• Optimizacija za paketni režim obrade trouglova o paketna obrada oslobađa CPU inteligentnih i kompleksnih 3D geometrijskih obrada o CPU može pripremiti jedan paket trouglova i smestiti ih u memoriju,

pa započeti rad na drugom paketu, bez komunikacije sa i740 grafičkim akceleratorom

• Direktnim izvršavanjem iz AGP memorije izbegava se trešing lokalne memorije

(koji bi postojao u arhitekturi koja mora da puni lokalnu memoriju iz AGP memorije) • Arbitrirani paralelni rendering iz lokalne memorije sa izvršavanjem teksture iz AGP memorije • Arbitraža dopušta da vršni propusni opseg bude 1.3GB/s • Mogućnost dve otvorene stranice lokalne memorije i jednog memorijskog kanala u AGP memoriji

podržava 3D rendering model: boja, z i tekstura • i740 podržava i 2D rendering kroz korišćenje tri rasterska operanda (izvor, odredište, uzorak)

• U arhitekturu su ugrađena i namenska poboljšanja 3D protočne obrade • 3D protočna jedinica obrađuje 3D podatke sa visokim paralelizmom • 3D rasterizer izračunava u 1 ciklusu 4 senčena, zamagljena i Z-baferisana piksela sa teksturom

Page 10: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 10 od 68

2D mašina • 64-bitna BitBLT mašina obezbeđuje hardversku akceleraciju za mnoge opšte prozorske operacije • Dve primarne BitBLT funkcije: fiksni BitBLT (BLT) i rastegljivi (Stretch) BitBLT (STRBLT) • BitBLT – blokovski transfer podataka piksela između dve memorisjke lokacije • BLT mašina ubrzava grafički korisnički interfejs (GUI) operativnog sistema Microsoft Windows • Hardverski su podržani svih 256 rasterskih operatora (ROP), uključujući transparentan BitBLT • BLT mašina se koristi za različite namene koje uključuju:

o prenos pravougaonih blokova podataka između memorisjkih lokacija o konverziju formata piksela o poravnavanje podataka o obavljanje logičkih operacija

• Displej funkcija sadrži RAM-based Digital-to-Analog Converter (RAMDAC) o transformiše digitalne podatke iz grafičkog i video podsistema u analogne podatke za monitor o tri 8-bitna D/A konvertora generišu R, G i B signale za monitor o integrisani 220MHz RAMDAC podržava rezoluciju do 1600x1200 o sinhronizacioni signali se pomeraju tako da odgovaraju kašnjenju D/A konverzije o svakom D/A konvertoru je pridružena paleta od 256 nijansi boje o RAMDAC može raditi u direktnom ili indeksiranom režimu o podržan je režim slike bez protkivanja (non-interlaced )

3D primitive • 3D primitive su linije, trouglovi i promenljive stanja • Sve primitive prikazane posle promene stanja u njihovoj promenljivoj stanja reflektuju novo stanje • Slika prikazuje strukturu podataka trougla koju vide drajveri za i740

o slika prikazuje i kako se tekstura mapira iz koordinatnog sistema teksture (U,V) u normalizovani koordinatni sistem objekta (S,T) gde se na teksturu primenjuje korekcija perspektive kao i simulirana krivina pre nego što se mapira u koordinatni sistem ekrana (X,Y)

o struktura trougla se prosleđuje i740 drajverima kroz DirectX ili OpenGL API

Page 11: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 11 od 68

MIP mapiranje • Podrška za 11 nivoa detaljnosti (Levels-of-Details, LODs) • Detaljnost mape teksture varira u rasponu od 1024x1024 do 1x1 teksela. • Nije neophodno da teksture budu kvadratne. • Mali keš ugrađen u procesor teksture obezbeđuje efikasno mip-mapiranje. • Podrška za 4 tipa mip-mapiranja

o Najbliže – teksel sa koordinatama najbližim željenom pikselu se koristi (samo 1 LOD) o Linearno – težinski prosek površine 2x2 teksela koji okružuju željeni piksel se koristi (samo 1 LOD) o Mip najbliže – odgovarajući LOD se izabere i teksel sa koordinatama najbližim željenom pikselu se koristi o Mip linearno – odgovarajući LOD se izabere i težinski prosek površine 2x2 teksela koji okružuju piksel se

koristi (naziva se i bi-linearnim mip-mapiranjem)

Blok dijagram sistema u kojem se koristi Intel740™ grafički akcelerator

Page 12: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 12 od 68

ATI RADEON 9700 (kodno ime grafičkog procesora R300)

Materijal preuzet sa Internet adrese www.digit-life.com Terminologija • DX9 – Direct X 9, grafički sistem, proizvod kompanije Microsoft • DDR – Double Data Rate • Shader – Program (realizacija može biti softverska ili hardverska) koji se primenjuje u toku obrade temena

poligona ili crtanja pojedina čnih piksela o Vertex Shader – program za obradu temena o Pixel Shader – program za obradu piksela

Termin "Shader" se takođe koristi i da se nazna či hardverska jedinica koja vrši odgovaraju ću obradu. Pregled arhitekture

Karakteristike

• 0.15 µ technology • 107 million transistors • Core clock speed: 300 MHz (possibly 315/325) • Memory bus: 256bit DDR (later DDR II) • Local memory: up to 256 MB • Memory clock speed: 300 DDR (600) MHz or more, 20 GB/s bandwidth; • Interface bus: AGP 8x, 2 GB/s throughput;

Page 13: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 13 od 68

• Full support of basic DX9 capabilities: o Floating, 64 and 128bit data formats for textures and frame buffer (vectors of 4 components of F16

or F32); o Pixel shaders with floating arithmetic (4*F32 computation format); o Pixel Shaders 2.0; o independent vertex pipelines; o Vertex Shaders 2.0;

• Hardware tessellation of N-Patches with Displacement Mapping, and, optionally , adapting detail level; • 8 independent pixel pipelines • 8 texture units (one per pixel pipeline) able to fulfill trilinear filtering without speed losses and (at last)

combine anisotropic and trilinear filtering. • 4-channel (4 64bits channels) memory controller connected with the accelerator's core and AGP with a full

crossbar; • HyperZ III memory optimization technology (quick cleanup and compression of the Z buffer using 8x8

units, hierarchical Z buffer for quick visibility determination); • Early Z test (pixel shader is used only for visible pixels); • Hardware acceleration of MPEG 1/2 decompression and compression, possibility to process a video stream

arbitrarily with pixel shaders (VIDEOSHADER technology); • 2 independent CRTC; • 2 integrated 10bit 400MHz RAMDACs with hardware gamma correction; • Integrated TV-Out; • Integrated DVI (TDMS transmitter) interface, up to 2043*1536. • Integrated general-purpose digital interface for connection of an external RAMDAC or a DVI transmitter or

coupling with a TV tuner. • FC packaging (FlipChip).

Memorijski kontroler 4-Kanalni memorijski kontroler i interni switch na čipu

Page 14: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 14 od 68

Tehnologija za optimizaciju Z-bafera i pristupa memoriji: HyperZ III

Tehnologija omogućava brzu kompresiju i brisanje Z-bafera koristeći blokove 4x4 i 3 nivoa hijerarhijske prezentacije Z-bafera za rano određivanje vidljivosti većih blokova poligona.

Na slici (1) je prikazan osenčen poligon, smešten blizu posmatrača. Dodaje se poligon 2, pozicioniran iza postojećeg poligona (slika (2)), tako da je delimično vidljiv. Najpre se pretražuje najviši nivo hijerarhijskog Z–bafera u kome su dubine smeštene po blokovima 4x4 i obeležava se ono polje koje ne treba sen čiti (slika (3)) – time se eliminiše 16 piksela iz dalje obrade. Zatim se ista procedura primenjuje nad blokovima 2x2 (slika (4)), a potom nad blokovima 1x1 (slika (5)) odnosno pojedinačnim pikselima.

Kao i kod svih modernih akceleratora, podržan je Early Z Test. Ideja ovog testa je jednostavna: stvarne boje piksela (tekstura, osvetljenje, itd.) se računaju samo za vidljive piksele, čime se značajno štedi na propusnom opsegu memorije. Na tipičnim test–scenama, odbacuje se od 25 do 33% piksela, a u najboljem slučaju (sortirani objekti scene) i do 50%.

Page 15: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 15 od 68

Pajplajnovi za piksele i jedinice za teksture Postoji 8 pajplajnova za piksele, a svaki pajplajn ima svoj procesor za senčenje piksela (eng. pixel shader). Iz tog razloga – što je duži program za senčenje, bolje je iskorišćenje procesora. Računske operacije se vrše u pokretnom zarezu (formati F32 i F16), a postoji i kompatibilnost sa starijim procesorima preko celobrojnih računskih radnji (format I12). Konfiguracija na kojoj se bazira R300 je 8x1 – svaki pajplajn za piksele spojen je sa samo jednom jedinicom za teksture. Na slici je prikazan izgled jednog od 8 pajplajnova.

Pajplajnovi za temena i jezici visokog nivoa Jedinice za obradu temena (eng. vertex shaders) mogu da kontrolišu tok instrukcija i podržavaju potprograme, petlje, uslovne i bezuslovne skokove. Sledeća tabela prikazuje unapređenja u odnosu na prethodnu verziju (1.0)

Verzija 1.0 2.0 Max. instrukcija 128 256

Upravljanje tokom instrukcija No Yes

Format podataka F32[4] F32[4]

Broj registara za konstante 96 256

Broj registara opšte namene 8 16

Između ostalog, povećao se maksimalan broj instrukcija kojima može da se programira jedinica. Očekuje se da će kompleksnost programa za obradu temena/piksela uskoro postati približna kompleksnosti programa koji se izvršavaju na konvencionalnim procesorima.

Page 16: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 16 od 68

Video obrada R300 uvodi VideoShader tehnologiju: koristi računske mogućnosti pajplajnova za piksele za obavljanje operacija kodovanja/dekodovanja MPEG1/2 video tokova, konverziju prostora boja, rasplitanje (eng. deinterlacing) i drugih operacija za obradu video tokova.

Iako ova tehnologija u svom nazivu ima ime "Shader", radi se o neprogramabilnoj jedinici koja se nalazi unutar jedinice za obradu piksela.

Page 17: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 17 od 68

NVIDIA GEFORCE 6800 Materijal preuzet sa Internet adrese www.digit-life.com

Terminologija • PCI Express (PCIe) – moderan koncept interkonekcijske tehnologije koji omogućava visoku propusnu moć

preko serijske veze sa niskim brojem pinova. Namenjen je da zameni AGP8X. • GPU – Graphics Processing Unit – zaseban procesor na grafičkom adapteru čija je primarna funkcija obrada

grafike i priprema za prikazivanje • TMU – Texture Management Unit – jedinica za manipulisanje teksturama u okviru GPU • GDI – Graphics Device Interface – softverska komponenta za komunikaciju između aplikacije i drajvera

grafičkog adaptera Pregled arhitekture 6 nezavisnih procesora za temena 4 nezavisna procesora za piksele od kojih svaki radi nad fragmentima od 2x2 piksela 2 stepena keša za teksture

Page 18: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 18 od 68

Karakteristike • Chip codenamed NV40 • 130nm FSG (IBM) technology • 222 million transistors • FC case (flip chip with no metallic cover) • 256-bit memory interface • Up to 1 GB of DDR / GDDR -2/ GDDR -3 memory • Bus interface AGP 3.0 8x • A special APG 16x mode (both ways), for PCI Express of HSI bridge • 16 pixel processors, each having a texture unit with an optional filtering of integer and float-point textures (anisotropy up to 16x). • 6 vertex processors, each having one texture unit with no value filtration (discrete selection) • Calculates, blends, and writes up to 16 full pixels (colour, depth, stencil buffer) per clock • Calculates and writes up to 32 values of depth and stencil buffer per clock (if no operation with colour is executed) • Supports a two-way stencil buffer • Supports special optimisations of geometry rendering for acceleration of shadow algorithms based on the stencil buffer (the so-called Ultra Shadow II technology) • Supports pixel and vertex shaders 3.0, including dynamic branchings in pixel and vertex processors, texture value selection from vertex processors, etc. • Texture filtering in the floating-point format • Supports framebuffer in the floating-point format (including blending operations) • MRT (Multiple Render Targets - rendering into several buffers) • 2x RAMDAC 400 MHz • 2x DVI interfaces (require external chips) • TV-Out and TV-In interface (requires separate chips) • Programmable streaming GPU (for video compression, decompression and post-processing) • 2D accelerator supporting all GDI+ functions Karakteristike referentne kartice • 400 MHz core frequency • 1.1 GHz (2*550 MHz) effective memory frequency • GDDR-3 memory type • 256-MB memory size • 35.2 GBps memory bandwidth • Theoretical filling speed: 6.4 Gpps • Theoretical texture selection speed: 6.4 Gtps • 2 DVI-I connectors • TV-Out • Up to 120 W energy consumption (the card has two additional power connectors, the power sources are recommended to be no less than 480 W)

Page 19: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 19 od 68

Pregled arhitekture procesora za temena

Postoji 6 nezavisnih procesora za temena. U jednom ciklusu takta, jedan NV40 procesor za temena može da izvrši:

• jednu vektorsku operaciju (do četiri FP32 komponenti) • jednu skalarnu FP32 operacuju • pristup jednoj teksturi

Procesor podržava formate tekstura u pokretnom zarezu i celobrojne kao i mip–mapiranje. Do četiri različite teksture se mogu upotrebiti u jednom programu za obradu temena, bez filtriranja

Page 20: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 20 od 68

Procesori za piksele i popunjavanje Postoji četiri nezavisna procesora za piksele koji obrađuju blokove od četiri (2x2) piksela. Svaki procesor ima svoj red za obradu piksela a za svaki od 2x2 piksela koje obrađuje ima posebnu jedinicu za teksture (TMU) – što ukupno daje 16 TMU. Svaki TMU podržava anizotropno filtriranje sa maksimalnim odnosom 16:1. Filtriranje tekstura zadatih formatom u pokretnom zarezu može da se vrši ako komponente imaju 16–bitnu (FP16) preciznost (ne može da radi sa FP32).

Svaki procesor ima svoj L1 keš čime je redukovano sudaranje sa zahtevima od procesora temena. Takođe, svaki procesor sadrži dve ALU jedinice, svaka sposobna da izvrši dve različite FP32 operacije na različitom broju (do četiri) odabranih vektorskih komponenti u jednom koraku. ALU jedinice su sposobne da u jednoj operaciji izvrše normalizaciju vektora što ima značajan uticaj na performanse nekih algoritama.

Page 21: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 21 od 68

ANIZOTROPNO FILTRIRANJE Materijal preuzet sa sajta korporacije NVidia www.nvidia.com

Terminologija • Piksel (pixel) : kovanica nastala od Picture Cell ili Picture Element. Označava najsitniji (nedeljivi) element slike

prikazivača • Teksel (texel): kovanica nastala od Texture Cell ili Texture Element, po uzoru na piksel. Označava najsitniji

(nedeljivi) deo teksture, koja se često koristi kao sinonim za digitalnu sliku • Mapiranje teksture (texture mapping): proces popunjavanja unutrašnjosti poligona teksturom. Tokom ovog

procesa, jedan teksel može da se preslika na jedan ili više piksela, ali može i obrnuto – da se više teksela preslika na jedan piksel

• mipmapiranje (mipmapping): potiče od reči MIP mapa (ili mipmapa), gde je MIP akronim sa latinskog jezika multum in parvo , što u slobodnom prevodu znači mnogo u malom. Tehnika kojom se ubrzava proces mapiranja tekstura kada se više teksela mapira na jedan piksel, uz izbegavanje neželjenih vizuelnih artefakata

Filtriranje Filtriranje teksture je proces uzorkovanja teksture. Formalno, tekstura je funkcija (jednodimenziona, dvodimenziona, itd), a vrednost funkcije u datoj tački u prostoru je boja odgovarajućeg teksela. Filtriranje može biti složen proces jer učestanost uzorkovanja u prostoru teksture može biti sasvim drugačija od učestanosti uzorkovanja u prostoru sintetizovane slike. S obzirom na to da prostorne koordinate objekata variraju nezavisno od koordinata teksture, rešetka piksela, koja je u prostoru sintetizovane slike najčešće pravougaonog oblika, može imati različite projekcije (otiske – footprint) u prostoru teksture.

Najjednostavniji slučajevi filtriranja su: 1. više teksela se preslikava na jedan piksel (slika 3.1b)

2. više teksela se ne preslikava na jedan piksel (slika 3.1c)

Slučaj 1. predstavlja situaciju umanjenja teksture: u idealnom slučaju, rezultujuća boja piksela predstavlja kombinaciju boja teksela koje ovaj pokriva. Broj pokrivenih teksela može da naraste do te mere da vreme njihove obrade postane neprihvatljivo veliko. Tehnika koja se tada koristi je mipmapiranje: unapred se stvara niz pre-filtriranih (umanjenih 2x, 4x, itd) tekstura i prema potrebi koristi jedna od njih, tako da se najviše nekoliko teksela upotrebljene teksture preslikava na jedan piksel.

U slučaj pod 2. spada i specijalan slučaj (relativno redak) prikazan na slici 3.1a, na kojoj se jedan teksel preslikava približno u jedan piksel. Problem koji se u prethodnom slučaju pojavljivao ovde ne postoji. Ponekad se

a)

b)

c)

Slika 3.1: primeri jednostavnih filtriranja. Rešetka piksela je predstavljena belo. Levi deo svake slike predstavlja detalj sintetizovane slike u prostoru ekrana, a desni detalj iz prostora teksture gde je prikazan odgovarajući otisak.

Page 22: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 22 od 68

primenjuje interpolacija u prostoru teksela, tako da se dobije gladak prelaz boja u prostoru sintetizovane slike. Anizotropno Filtriranje Anizotropija je pojava kod koje se određen fenomen različito manifestuje u zavisnosti od pravca. Na primer, u elektrotehnici su poznati materijali čija dielektrična svojstva nisu ista u svim pravcima.

Anizotrono filtriranje teksture je proces uzorkovanja (funkcije) teksture kada se rešetka piksela značajno deformiše prilikom projekcije u prostor teksture. Ovo je prikazano na slici 3.2a: nakon projekcije, rešetka je do te mere deformisana da gornja vrsta rešetke pokriva nekoliko redova teksela, a krajnje donja vrsta rešetke samo jedan red teksela. Na slikama 3.2b do 3.2e je prikazan značaj anizotropnog filtriranja: bez anizotropnog filtriranja (3.2b i 3.2c) crni i beli kvadrati se stapaju u sivu i slika postaje mutna na relativno malom rastojanju od posmatrača. Kada se koristi anizotropno filtriranje, beli i crni kvadrati se jasno mogu razlikovati na značajno većem rastojanju od posmatrača.

a)

b)

c)

d)

e)

Slika 3.2: anizotropno filtriranje; a) primer mogućeg načina deformacije rešetke piksela prilikom projekcije u prostor teksture; primeri prikazivanja teksture na kojoj su jasno vidljive razlike u načinima filtriranja. b) izotropno bilinearno; c) izotropno trilinearno; d) anizotropno bilinearno; e) anizotropno trilinearno

Page 23: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 23 od 68

4. Parametarske krive

BEZJEOVE KRIVE Pjer Bezјe (Pierre Bézier), inženjer pri kompaniji Reno (Renault) i Pol d Kastelžo (Paul de Casteljau), inženjer pri kompaniji Sitroen (Citroën) su nezavisno jedan od drugog početkom 1960. godina došli do otkrića o metodi predstavljanja krivih koje su danas izuzetno zastupljene u računarskoj grafici. Iako su neznatno prethodili Bezjeovim, Kastelžoovi istraživački izveštaji iz ove oblasti su ostali neobjavljeni do 1975. godine, zbog čega su ove krive nazvane po Bezjeu. Bezjeove krive se formiraju nad nizom od n tačaka (n>2) u oznaci P0 .. Pn-1, kod kojih prva tačka u nizu predstavlja početnu, a poslednja tačka u nizu krajnju tačku krive. Izgled krive određuje međusobni položaj tačaka, pa se one nazivaju kontrolne tačke. Kriva prolazi jedino kroz prvu (P0) i poslednju (Pn-1) tačku u pomenutom nizu. Kriva ne prolazi kroz ostale tačke. Parametar t ( [0,1]∈t ), na osnovu kojeg se određuje pozicija svake tačke koja pripada krivoj, ima vrednost 0 za tačku P0 i vrednost 1 za tačku Pn-1. Bezjeove krive se mogu predstavljati u polinomijalnom ili matričnom zapisu. Broj tačaka nad kojim se Bezjeove krive mogu definisati nije ograničen. U praksi se najčešće koriste kvadratna (n=3) i kubna (n=4), a svoja imena su dobila po stepenu polinoma kojim su predstavljene. Razvoj kvadratne Bezjeove krive Kvadratna Bezjeova kriva se formira nad nizom od tri tačke (P0, P1 i P2). Na dužima 0 1P P i 1 2PP treba uočiti tačke

P01 i P11, kao što je prikazano na slici 4.1. Slično tome, na duži 01 11P P treba uočiti tačku P02 kao što je prikazano na slici 4.2. Tačka P02 pripada krivoj: promenom parametra t od 0 do 1, dobija se niz tačaka koje pripadaju krivoj. Za t=0, P02=P0, a za t=1, P02=P2. Ovo je ilustrovano na slici 4.3 za nekoliko vrednosti parametra t.

= + −

= + −01 1 0

11 2 1

(1 )(1 )

P tP t PP tP t P

Slika 4.1

= + −02 11 01(1 )P tP t P

Slika 4.2

Page 24: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 24 od 68

Razvoj kvadratne Bezjeove krive se može jednostavno izvesti u analitičkom obliku na osnovu slika 4.1 i 4.2. Sa slike 4.1. je poznato:

01 1 0

11 2 1

(1 )(1 )

= + −= + −

P tP t PP tP t P

(1)

Sa slike 4.2. je poznato: 02 11 01(1 )= + −P tP t P (2)

Zamenom (1) u (2) se dobija:

02 2 1 1 0

2 2 2 202 2 1 1 1 1 0

2 202 0 1 2

( (1 ) ) (1 )( (1 ) )

(1 )(1 ) 2 (1 )

= + − + − + −

= + − + − + −

= − + − +

P t tP t P t tP t PP t P tP t P tP t P t PP t P t t P t P

(3)

Odnosno: 2 2

0 1 2( ) (1 ) 2 (1 ) , [0,1]P t t P t t P t P t= − + − + ∈

gde je P(t) tačka koja pripada krivoj, za datu vrednost parametra t. Razvoj kubne Bezjeove krive Kubna Bezjeova kriva se formira nad skupom od četiri tačke (P0, P1, P2 i P3). Slično kao i kod razvoja kvadratne krive, na dužima 0 1P P , 1 2PP i 2 3P P treba uočiti tačke P01, P11 i P21, kao što je prikazano na slici 4.4. Uočene tačke se sada koriste da bi se nad njima formirala kvadratna Bezjeova kriva, na ranije opisan način. Na slici 4.5 je ilustrovano određivanje pozicije tačaka koje pripadaju krivoj, za nekoliko vrednosti parametra t.

Slika 4.3

Page 25: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 25 od 68

Slično razvoju kvadratne Bezjeove krive, razvoj kubne krive se može jednostavno izvesti u analitičkom obliku na osnovu slike 4.4.

01 1 0

11 2 1

21 3 2

(1 )(1 )(1 )

P tP t PP tP t PP tP t P

= + −= + −= + −

(4) 02 11 01

12 21 11

(1 )(1 )

P tP t PP tP t P

= + −= + −

(5) 03 12 02(1 )P tP t P= + − (6)

Zamenom (4) i (5) u (6) se dobija:

3 2 2 3

03 0 1 2 3(1 ) 3 (1 ) 3 (1 )P t P t t P t t P t P= − + − + − + (7) Odnosno:

3 2 2 3

0 1 2 3( ) (1 ) 3 (1 ) 3 (1 ) , [0,1]P t t P t t P t t P t P t= − + − + − + ∈ (8)

gde je P(t) tačka koja pripada krivoj, za datu vrednost parametra t.

= + −

= + −

= + −

01 1 0

11 2 1

21 3 2

(1 )(1 )(1 )

P tP t PP tP t PP tP t P

= + −

= + −

= + −

02 11 01

12 21 11

03 12 02

(1 )(1 )

(1 )

P tP t PP tP t P

P tP t P

Slika 4.5

Page 26: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 26 od 68

Matrični zapis kubne Bezjeove krive Matrični zapis je značajan kada je na raspolaganju hardver koji je u stanju da brzo množi matrice. Polazeći od (8), može se dobiti odgovarajući matrični izraz:

0

13 2 2 3

2

3

( ) [(1 ) 3 (1 ) 3 (1 ) ]

PP

P t t t t t t tPP

= − − −

Daljim razvojem prve matrice (vektora), dobija se:

0

12 3

2

3

1 0 0 03 3 0 0

( ) [1 ]3 6 3 01 3 3 1

PP

P t t t tPP

− = − − −

Razvoj Bezjeove krive proizvoljnog stepena Metoda koja je upotrebljena za razvoj kvadratne i kubne Bezjeove krive je slična metodi "podeli i osvoj" (eng. divide and conquer): počevši od ulaznog niza (kontrolnih) tačaka, u svakom koraku deljenja se dobijaju nove kontrolne tačke čiji je broj za jedan manji u odnosu na broj kontrolnih tačaka u prethodnom koraku. Procedura se zaustavlja kada ostane samo jedna kontrolna tačka – ona pripada krivoj. Primenom opisane metode se može razviti Bezjeova kriva proizvoljnog reda. Analitički oblik krive proizvoljnog reda se može odrediti bez primene prethodno opisane metode, na sledeći način: neka je ( ), [0,1]P t t ∈ tačka koja se nalazi na krivoj. Za niz tačaka (P0, P1, ..., Pn) nad kojim se formira kriva, vrednost P(t) se može izraziti sledećom formulom:

,0

( ) ( ), [0,1]n

i i ni

P t P B t t=

= ⋅ ∈∑

gde je , ( )i nB t Bernštajnov (Bernstein) polinom:

, ( ) (1 )i n ii n

nB t t t

i−

= −

Može se uočiti zanimljiva osobina Bernštajnovog polinoma:

,0

( ) 1, [0,1]n

i ni

B t t=

= ∈∑

Osobine Bezjeovih krivih Bezjeove krive imaju nekoliko interesantnih osobina:

• početna i krajnja tačka (P0 i Pn) leže na krivoj; u opštem slučaju ostale tačke ne leže na krivoj • kriva je neprekidna, diferencijabilna u svakoj tački proizvoljan broj puta • u tački P0, tangenta krive je duž 0 1P P , u tački Pn, tangenta krive je duž 1n nP P− • kriva se nalazi unutar konveksnog omotača koji formiraju kontrolne tačke • na izgled krive utiču sve tačke iz zadatog niza nad kojim se kriva formira: pomeranjem makar jedne tačke

kriva menja svoj oblik

Page 27: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 27 od 68

KATMUL-ROMOVA KRIVA Katmul-Romova (E.Catmull, R.Rom, 1974) kriva je objavljena desetak godina nakon Bezjeove [E. Catmull je jedan od osnivača studija Pixar; njemu se u velikoj meri pripisuje otkrivanje Z-bafer algoritma, mapiranja teksturom i bi-kubnih zakrpa]. Za razliku od Bezjeove, radi se o lokalnoj interpolativnoj krivoj: kriva prolazi kroz sve kontrolne tačke, a izgled krive lokalno zavisi samo od nekoliko susednih kontrolnih tačaka. Fergusonova parametarska kriva Razvoj Katmul-Romove krive se oslanja na Fergusonove (H. Ferguson) parametarske kubne krive. Fergusonova parametarska kubna kriva se zasniva na tačkama P0 i P1, za koje su date pozicija i nagibi tangenta krive u tim tačkama (P0' i P1' respektivno). U zavisnosti od parametra t, pozicija neke tačke na krivoj se može opisati polinomom trećeg stepena:

2 30 1 2 3( )P t a a t a t a t= + + + (14)

Parametar t uzima vrednost u opsegu [0,1]. Potrebno je odrediti koeficijente a0 do a3 uz pretpostavku da P(0)=P0 i P(1)=P1, što daje sledeće jednačine:

0

0 1 2 3

(0)(1)

P aP a a a a

== + + +

1

1 2 3

'(0)'(1) 2 3

P aP a a a

== + +

(15)

Rešavanjem ovih jednačina, dobijaju se sledeće vrednosti:

0

1

(0)'(0)

a Pa P

==

2

3

3[ (1) (0)] 2 '(0) '(1)2[ (0) (1)] '(0) '(1)

a P P P Pa P P P P

= − − −= − + +

(16)

Smenom (16) u (14) dobija se sledeći izraz :

2 3 2 3 2 3 2 3( ) (1 3 2 ) (0) (3 2 ) (1) ( 2 ) '(0) ( ) '(1)P t t t P t t P t t t P t t P= − + + − + − + + − + (17)

Svaki od polinoma po promenljivoj t, koji u izrazu (17) figuriraju kao koeficijenti uz tačke ili njihove izvode, su u tzv. Ermitovom obliku (C. Hermite), pa se ova kriva još naziva kubna Ermitova kriva. Matrični zapis Fergusonove krive Kao i kod kubne Bezjeove krive, (17) se može predstaviti u matričnom zapisu:

2 3

1 0 0 0 (0)0 0 1 0 (1)

( ) 13 3 2 1 '(0)

2 2 1 1 '(1)

PP

P t t t tPP

= − − − −

(18)

Razvoj Katmul-Romove krive Katmul-Romova kriva se razvija nad nizom od n+1 tačaka (u oznaci P0 do Pn). Kriva se lokalno definiše, deo po deo, nad lukom ¼i i 1P P+ . Nagib tangente u tačkama Pi i Pi+1 se određuje na sledeći način:

i 1 i 1 i 2 ii i 1

P P P PP ' , P '2 2

+ − ++

− −= = (19)

Treba napomenuti da je Katmul-Romova kriva specifičan slučaj opštije kardinalne krive (eng. cardinal spline), jer je za određivanje tangente krive u početnoj odnosno krajnjoj tački nekog luka uzet koeficijent 0.5.

Page 28: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 28 od 68

Na slici 4.6 je ilustrovana konstrukcija jednog dela krive, nad lukom ¼

i i 1P P+ . Zamenom (19) u (18) dobija se konačan izraz za posmatrani deo krive (u matričnom obliku):

1

2 3

1

2

0 1 0 01 10 02 2

( ) 1 5 11 22 2

1 3 3 12 2 2 2

i

i

i

i

PP

P t t t tPP

+

+

− = − −

− −

(20)

Izrazom (20) se definiše kubna kriva koja predstavlja deo željene krive između dve uzastopne tačke (Pi i Pi+1). Izraz se može primeniti na sve delove krive sem za početni i krajnji luk gde se nagibi tangente (P'0 i P'n respektivno) moraju drugačije definisati. Osobine Katmul-Romove krive

• Kriva je interpolativna: kriva prolazi kroz sve kontrolne tačke. • Kriva je lokalna: promenom pozicije jedne kontrolne tačke se lokalno menja oblik krive • Kriva je neprekidna, diferencijabilna u svakoj tački proizvoljan broj puta

Slika 4.6

Page 29: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 29 od 68

5. Java2D™ API za rad sa grafikom

UVOD: ISTORIJA, ZAŠTO, KAKO Operativni sistemi su u poslednjoj deceniji pored upravljanja osnovnim resursima dobili zadatak da kontrolišu i ekran, odnosno grafički korisnički interfejs. S obzirom na činjenicu da su operativni sistemi 90-ih uglavnom multiprocesni, funkcionalni zahtev za kontrolu ekrana bio je: svaki proces, koji to želi – i ako to korisnik želi, mora imati svoje mesto na ekranu, odnosno, interfejs ka korisniku. Prvi pokušaji zasnivali su se na switchovanju celog “ekrana”. Prednosti ovakvog pristupa su što u trenutku kada je proces prikazan – ima ceo ekran samo za sebe, što je ranije i bio slučaj = kompatibilnost. V elika mana je nezgrapnost i teška iskoristljivost sistema. Današnje rešenje grafičkog dela operativnog sistema zasniva se na modelu prozora. Prozor je, naravno, pravougaono parče ekrana na kojoj jedna aplikacija može iscrtavati željene oblike, i preko koga aplikacija prima želje korisnika. Na taj način prozor postaje i jedinica interakcije aplikacije sa korisnikom. Aplikacija, naravno, može imati više prozora. Prozori su smešteni u 3D prostoru – postoji preklapanje (zaklanjanje) prozora koji su “dalji” od korisnika prozorima koji su bliži. Operativni sistem kontroliše sve akcije sa prozorima: otvaranje, zatvaranje, pomeranje, aktiviranje, deaktiviranje, ikonifikaciju, zoom–iranje, pozicija na Z osi, sakrivanje, prikazivanje, itd. Kao što OS održava liste FCBova ili PCBova, može se zamisliti i lista W(indow)CB-ova. Operativni sistem je takođe dužan da zaštiti aplikaciju od drugih aplikacija. Poznati su primeri zaštite memorije, disk prostora. Grafički gledano – objekat zaštite za operativni sistem je opet prozor. Ni jedan proces ne može da crta u tuđ prozor. Prozor zbog toga, bar što se tiče operativnih sistema, postaje jedinica za dodelu ekranskog prostora. Ulaz i prozori – miš kao pokazivački ulaz – lak: na koji prozor miš pokazuje – na taj prozor se akcija miša i odnosi. Šta sa tastaturom? Uveden pojam fokusiranog prozora – prozora u koji se “šalje” ulaz sa tastature. Event driven programiranje dobija svoju punu afirmaciju upravo kroz sisteme prozora. Ceo event driven sistem zasniva se na porukama, svaki event u sistemu praćen je porukom. Postoje, naravno, event-i koje iniciraju korisnici pomoću ulaznih uređaja, i event-i koje inicira OS u nekim važnim trenucima. Tipična arhitektura:

Proces 1 Proces 2

Prozor 1

Prozor 2Prozor 3

8

MessageQueue event

handlerevent

handler

eventhandler

MessageLoop

*

Prozor u sebi nema memoriju! Iscrtavanje se vrši kada je to potrebno. Kada se prozor prvi put prikaže, ili kada se neki njegov deo “otkrije” ili kada mu se promeni veličina, dakle u bilo kojoj situaciji u kojoj je neki njegov deo vidljiv a neiscrtan. O potrebi za iscrtavanje prozora račun vodi isključivo operativni sistem. U trenutku kada je prozor potrebno iscrtati – OS štalje tzv. paint poruku kojom traži od programa da popuni sadržajem određeni deo prozora ili ceo prozor. Operativni sistemi, naravno, imaju zadatak da grafički sistem iznesu na što je moguće većem broju platformi (grafičkih karti, monitora, itd.) Aplikaciju sa druge strane ne bi trebalo da zanima da li sadržaj iscrtava na ekran

Page 30: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 30 od 68

jedne rezolucije ili druge sa x ili y boja ili možda sadržaj štampa ili sl. Naravno, aplikacija ne bi trebalo da bude i skroz nesvesna situacije u kojoj se štampa, ali samo u pojedinim detaljima i vrlo pažljivo. Rešenje je uvođenje DeviceContext-a. Device Context je apstraktni, virtuelni, univerzalni uređaj. Može se reći da se crtanje obavlja u device kontekstu! DeviceContext se može dalje proširiti kako bi se obezbedilo “bogatije” crtanje: doda se boja crtanja, boja ispunjavanja, oblici linija, itd, i tako zapravo nastaje PaintContext. Priča o grafici ima dva raspleta: - “slobodna” grafika podrazumeva odgovor na paint poruku, ulazne event-e.

Pogodno za grafički orjentisane aplikacije - kontrole – paint poruku i ulazne event-e obrađuje OS na bazi standardnih oblika

izgleda i ponašanja – kontrola. Pogodno za UI baza podataka, i drugih opštih aplikacija.

Simple.java Java ne može mnogo pobeći od OS, ali zato to može korektno objektno izmodelirati. U početku nam je dovoljno da koristimo jednostavan prozor u kome se može crtati. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Simple extends JPanel { static JFrame frame; public Simple() { } public void paint (Graphics g) { Graphics2D g2 = (Graphics2D) g; // . . . ovde se crta } public static void main(String s[]) { Simple panel = new Simple(); frame = new JFrame("Simple"); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); frame.getContentPane().add("Center", panel); frame.setSize(new Dimension(200,200)); frame.setVisible(true); } }

HARDWARE

OS

HAL

Device drivers

Aplikacija

Device Context

apstraktni GAPI

Page 31: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 31 od 68

Graphics2D Rendering Context Skup atributa stanja pridružen Graphics2D objektu naziva se Graphics2D rendering context. Da bi se iscrtale primitive, tekst, ili slike potrebno je prethodno postaviti Graphics2D rendering context i onda pozvati neku od Graphics2D metoda kao što su draw i fill. Graphics2D rendering context sadrži nekoliko atributa:

Stil olovke (pen style) se primenjuje na objekte koji se crtaju linijama. Stroke atribut This stroke omogućava da se linije crtaju proizvoljno debelom olovkom, sa određenim patternom i da se završeci linija mogu crtati sa proizvoljnom dekoracijom.

Stil popunjavanja (fill style) se primenjuje na unutrašnjost objekata. Paint atribut omogućava da se oblici iscrtavaju u boji, gradijentu ili patternu.

Stil kompozicije (compositing style) se koristi pri preklapanju objekata koji se iscrtavaju

Transformacije se primenjuju tokom crtanja radi konverzije objekata iz korisničkog u device koordinatni sistem. Transformacije koje postoje su translacija, rotacija, skaliranje i iskošivanje.

Odsecanje onemogućava iscrtavanje u površinu izvan dozvoljenog clip path-a. Svaki Shape objekat ‘ odnosno oblik koji se iscrtava može da posluži i za definiciju odsecajućeg regiona.

Font se koristi za iscrtavanje teksta.

“Rendering hints” omogućavaju zadavanje atributa koji obezbeđuju kompromis između brzine i kvaliteta slike. Na primer, moguće je uključiti ili isključiti korišćenje antialiasing-a

Da bi se postavio neki atribut Graphics2D rendering contexta mogu se koristiti metode: - void setStroke( Stroke s ) - void setPaint ( Paint p ) - setComposite ( Composite c ) - setTransform ( AffineTransform tx ) - clip ( Shape s ) - setFont ( Font f ) - setRenderingHints (RenderingHints.Key hintKey, Object hintValue) Napr.

gp = new GradientPaint(0f,0f,blue,0f,30f,green); g2.setPaint(gp);

Ovo znači da je zadavanje atributa praktično prebačeno u odgovarajuće objekte i njihove hijerarhije. Graphics2D sadrži direktne reference na objekte-atribute i ne kopira ih. Međutim, posle izmene bilo koje osobine atributa za vreme za vreme iscrtavanja mora se pozvati set metod. Takođe, sama izmena atributa van konteksta u toku iscrtavanja može dovesti do nepredvidljivih crteža.

Page 32: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 32 od 68

Graphics2D Rendering Methods Graphics2D obezbeđuje sledeće opšte metode za iscrtavanje geometrijskih primitiva, teksta i slika. - void draw (Shape s ) - void fill (Shape s) - void drawString(String s, float x, float y) - drawImage Koordinatni sistemi Java 2D sistem održava dva koordinatna prostora: - Korisnički prostor – za specificiranje grafičkih primitiva - Device prostor za konkretni izlaz uređaj – ekran, prozor, štampač. Korisnički prostor je nezavisan od device prostora i koristi se za tumačenje koordinata svih primitiva koje do sistema dođu putem Java 2D API-ja Ako se ne primenjuju transformacije, koordinatni početak nalazi se u gornjem levom uglu ekrana, a jedinica odgovara jednom pikselu. Shapes

Arc2D Ellipse2D QuadCurve2D Area GeneralPath Rectangle2D CubicCurve2D Line2D RectangularShape Dimension2D * Point2D * RoundRectangle2D

Page 33: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 33 od 68

Demonstracioni program: X-OX Napomena: program služi kao ilustracija jednostavnog crtanja primenom grafičkog paketa Java2D. Određeni delovi programa nisu napisani na najefikasniji način. Na primer, prilikom svakog crtanja nepotrebno se dinamički stvaraju novi objekti linija, poligona, itd. import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; public class XoX extends JPanel implements KeyListener, MouseListener { private static final int IKS = 1; private static final int OKS = 2; private static final int NISTA = 0; private int a[][]; private int n; public XoX() { a=new int[3][3]; n=3; clear(); } protected void clear() { for(int i=0;i<3;i++) for(int j=0;j<3;j++) a[i][j]=NISTA; } public void paint (Graphics g) { super.paint(g); Graphics2D g2 = (Graphics2D) g; Dimension d = getSize(); // draw grid g2.setStroke(new BasicStroke( 2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL)); g2.setPaint(Color.gray); for(int i=1;i<n;i++) { Line2D grid_horizontal = new Line2D.Float(0,i*d.height/n, d.width,i*d.height/n); Line2D grid_vertical = new Line2D.Float(i*d.width/n,0 ,i*d.width/n, d.height); g2.draw(grid_horizontal); g2.draw(grid_vertical); } //draw elements for(int i=0;i<n;i++) for(int j=0;j<n;j++) { AffineTransform tx=new AffineTransform(); tx.translate(i*d.width/n, j*d.height/n); tx.scale(d.width/n/10, d.height/n/10); g2.setTransform(tx); switch(a[i][j]) { case IKS: int xc[]={2,5,8,9,6,9,8,5,2,1,4,1}; int yc[]={1,4,1,2,5,8,9,6,9,8,5,2}; Polygon ox = new Polygon(xc,yc,12); g2.setStroke(new BasicStroke(1)); g2.setPaint( new GradientPaint(1,9,Color.white, 9,1,Color.green)); g2.fill(ox); break; case OKS: g2.setStroke(new BasicStroke(0)); g2.setPaint( new GradientPaint(0,5, Color.white, 10,5,Color.red)); g2.fill(new Ellipse2D.Float(2,2,6,6)); break; case NISTA: break; } }

Page 34: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 34 od 68

} //KeyListener implementation public void keyPressed(KeyEvent e) {} public void keyReleased(KeyEvent e) {} public void keyTyped(KeyEvent e) { switch(e.getKeyChar()) { case '7':a[0][0]=OKS; break; case '8':a[1][0]=OKS; break; case '9':a[2][0]=OKS; break; case '4':a[0][1]=OKS; break; case '5':a[1][1]=OKS; break; case '6':a[2][1]=OKS; break; case '1':a[0][2]=OKS; break; case '2':a[1][2]=OKS; break; case '3':a[2][2]=OKS; break; case '0': clear(); break; } repaint(); } //MouseListener implementation public void mouseClicked(MouseEvent e) { Dimension d=getSize(); int x=(int)((float)e.getX()/d.width*n); int y=(int)((float)e.getY()/d.height*n); a[x][y]=IKS; repaint(); } public void mouseReleased(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mousePressed(MouseEvent e){} public void mouseEntered(MouseEvent e){} public static void main(String s[]) { XoX panel = new XoX(); panel.setOpaque(true); JFrame frame = new JFrame("XoX"); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); frame.getContentPane().add(panel); frame.setSize(new Dimension(200,200)); frame.setVisible(true); frame.addKeyListener(panel); frame.addMouseListener(panel); } }

Page 35: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 35 od 68

Pregled klasa paketa AWT.GEOM

Class Summary: Package java.awt.geom

AffineTransform The AffineTransform class represents a 2D affine transform that performs a linear mapping from 2D coordinates to other 2D coordinates that preserves the "straightness" and "parallelness" of lines.

Arc2D Arc2D is the abstract superclass for all objects that store a 2D arc defined by a bounding rectangle, start angle, angular extent (length of the arc), and a closure type (OPEN, CHORD, or PIE).

Arc2D.Double An arc specified in double precision,

Arc2D.Float An arc specified in float precision,

Area The Area class is a device-independent specification of an arbitrarily-shaped area.

CubicCurve2D The CubicCurve2D class defines a cubic parametric curve segment in (x, y) coordinate space.

CubicCurve2D.Double A cubic parametric curve segment specified with double coordinates.

CubicCurve2D.Float A cubic parametric curve segment specified with float coordinates.

Dimension2D The Dimension2D class is to encapsulate a width and a height dimension.

Ellipse2D The Ellipse2D class describes an ellipse that is defined by a bounding rectangle.

Ellipse2D.Double The Double class defines an ellipse specified in double precision.

Ellipse2D.Float The Float class defines an ellipse specified in float precision.

FlatteningPathIterator The FlatteningPathIterator class returns a flattened view of another PathIterator object.

GeneralPath The GeneralPath class represents a geometric path constructed from straight lines, and quadratic and cubic (Bézier) curves.

Line2D This Line2D represents a line segment in (x, y) coordinate space.

Line2D.Double A line segment specified with double coordinates.

Line2D.Float A line segment specified with float coordinates.

Point2D The Point2D class defines a point representing a location in (x, y) coordinate space.

Point2D.Double The Double class defines a point specified in double precision.

Point2D.Float The Float class defines a point specified in float precision.

QuadCurve2D The QuadCurve2D class defines a quadratic parametric curve segment in (x, y) coordinate space.

QuadCurve2D.Double A quadratic parametric curve segment specified with double coordinates.

QuadCurve2D.Float A quadratic parametric curve segment specified with float coordinates.

Rectangle2D The Rectangle2D class describes a rectangle defined by a location (x, y) and dimension (w x h).

Rectangle2D.Double The Double class defines a rectangle specified in double coordinates.

Page 36: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 36 od 68

Class Summary: Package java.awt.geom

Rectangle2D.Float The Float class defines a rectangle specified in float coordinates.

RectangularShape RectangularShape is the base class for a number of Shape objects whose geometry is defined by a rectangular frame.

RoundRectangle2D The RoundRectangle2D class defines a rectangle with rounded corners defined by a location (x, y), a dimension (w x h), and the width and height of an arc with which to round the corners.

RoundRectangle2D.Double The Double class defines a rectangle with rounded corners all specified in double coordinates.

RoundRectangle2D.Float The Float class defines a rectangle with rounded corners all specified in float coordinates.

GRAFPRIMER – PRIMER JEDNOSTAVNOG ALATA ZA CRTANJE PRIMITIVA

Figura

#x1, y1, x2, y2: integer#popunjena: boolean

+sirina(): integer+visina(): integer+levo(): integer+desno(): integer+vrh(): integer+dno(): integer#crtajFiguru(Graphics2D)+crtaj(Graphics2D)

Linija Pravougaonik

Kvadrat

Elipsa

Krug

java.awt.Paint<<interface>>

GrafPrimer

javax.swing.JPanel

Page 37: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 37 od 68

Program GrafPrimer – primer programa za slobodno crtanje jednostavnih figura // Figura.java import java.awt.*; public abstract class Figura { protected boolean popunjena; protected Paint paint; protected int x1, y1, x2, y2; protected Shape oblik; public int sirina() { return Math.abs(x2-x1); } public int visina() { return Math.abs(y2-y1); } public Figura(boolean pop, int xx1, int yy1, int xx2, int yy2, Paint p) { popunjena = pop; paint = p; x1 = xx1; x2 = xx2; y1 = yy1; y2 = yy2; } int vrh() { if( y2 < y1 ) return y1-visina(); else return y1; } int dno() { if( y2 > y1 ) return y1+visina(); else return y1; } int levo() { if( x2 < x1 ) return x1-sirina(); else return x1; } int desno() { if( x2 > x1 ) return x1+sirina(); else return x1; } protected void crtajFiguru(Graphics2D g2d) { if( popunjena ) g2d.fill( oblik ); else g2d.draw( oblik ); } public void crtaj(Graphics2D g2d) { g2d.setPaint(paint); crtajFiguru(g2d); } } // Linija.java import java.awt.*; import java.awt.geom.*; public class Linija extends Figura { public Linija(int xx1, int yy1, int xx2, int yy2, Paint p) { super(false, xx1, yy1, xx2, yy2, p); oblik = new Line2D.Float(x1, y1, x2, y2); } }

Page 38: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 38 od 68

// Pravougaonik.java import java.awt.*; public class Pravougaonik extends Figura { public Pravougaonik(boolean pop, int xx1, int yy1, int xx2, int yy2, Paint p) { super(pop, xx1, yy1, xx2, yy2, p); oblik = new Rectangle( levo(), vrh(), sirina(), visina() ); } } // Kvadrat.java import java.awt.*; public class Kvadrat extends Pravougaonik { public Kvadrat(boolean pop, int xx1, int yy1, int xx2, int yy2, Paint p) { super(pop, xx1, yy1, xx2, yy2, p); } public int sirina() { return super.sirina() > super.visina() ? super.sirina() : super.visina(); } public int visina() { return sirina(); } } // Elipsa.java import java.awt.*; import java.awt.geom.*; public class Elipsa extends Figura { public Elipsa(boolean pop, int xx1, int yy1, int xx2, int yy2, Paint p) { super(pop, xx1, yy1, xx2, yy2, p); oblik = new Ellipse2D.Float(levo(), vrh(), sirina(), visina() ); } } // Krug.java import java.awt.*; public class Krug extends Elipsa { public Krug(boolean pop, int xx1, int yy1, int xx2, int yy2, Paint p) { super(pop, xx1, yy1, xx2, yy2, p); } public int sirina() { return super.sirina() > super.visina() ? super.sirina() : super.visina(); } public int visina() { return sirina(); } }

Page 39: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 39 od 68

// GrafPrimer.java import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; public class GrafPrimer extends JPanel implements KeyListener, MouseListener, MouseMotionListener { static JFrame frame; private static final int LINIJA = 1, PRAVOUGAONIK = 2, KVADRAT = 3; private static final int ELIPSA = 4, KRUG = 5; private static final String[] naziviFigura = { "Linija", "Pravougaonik", "Kvadrat", "Elipsa", "Krug" }; private int tip; private static final int JEDNOBOJNO = 1, NIJANSIRANO = 2; private static final String[] naziviBojenja = { "Jednobojno", "Nijansirano" }; private int nacinBojenja; private Color primarnaBoja, sekundarnaBoja; private boolean popunjen; private Font font = new Font("Helvetica", Font.BOLD, 18); private int x1, y1, x2, y2; private int kursorX, kursorY; private class ElementListe { Figura f; ElementListe sledeci; ElementListe(Figura ff) { f = ff; } } private ElementListe prvi, poslednji; private Figura radna; private Paint napraviPaint(int x1, int y1, int x2, int y2) { Paint ret = null; switch( nacinBojenja ) { case JEDNOBOJNO: ret = primarnaBoja; break; case NIJANSIRANO: ret = new GradientPaint(x1, y1, primarnaBoja, x2, y2, sekundarnaBoja); break; } return ret; } private Figura napraviFiguru() { Figura ret = null; Paint paint = napraviPaint(x1, y1, x2, y2); switch(tip) { case LINIJA: ret = new Linija(x1, y1, x2, y2, paint); break; case PRAVOUGAONIK: ret = new Pravougaonik(popunjen, x1, y1, x2, y2, paint); break; case KVADRAT: ret = new Kvadrat(popunjen, x1, y1, x2, y2, paint); break; case ELIPSA: ret = new Elipsa(popunjen, x1, y1, x2, y2, paint); break; case KRUG: ret = new Krug(popunjen, x1, y1, x2, y2, paint); break; } return ret; }

Page 40: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 40 od 68

private Color izborBoje(String naslov, Color boja) { Color rezultat = JColorChooser.showDialog(this, naslov, boja); if( rezultat != null ) return rezultat; else return boja; } private void dodajFiguru(Figura f) { ElementListe elem = new ElementListe(f); if( prvi != null ) poslednji.sledeci = elem; else prvi = elem; poslednji = elem; } private void isprazni() { prvi = poslednji = null; } public GrafPrimer() { tip = LINIJA; nacinBojenja = JEDNOBOJNO; popunjen = false; x1 = y1 = x2 = y2 = -1; primarnaBoja = Color.black; sekundarnaBoja = Color.red; prvi = poslednji = null; radna = null; addMouseListener(this); addMouseMotionListener(this); } public void paint (Graphics g) { super.paint(g); Graphics2D g2 = (Graphics2D) g; ElementListe tekuci = prvi; while( tekuci != null ) { tekuci.f.crtaj(g2); tekuci = tekuci.sledeci; } if( radna != null ) radna.crtaj(g2); g2.setFont(font); g2.setPaint( Color.black ); g2.drawString("X=" + x2 + " Y=" + y2, 10, 30); if( tip >= LINIJA && tip <= KRUG ) g2.drawString("[1-5]" + naziviFigura[tip-1], 10, 30 + fm.getHeight() ); else g2.drawString("[1-5]" + " ???", 10, 30 + fm.getHeight() ); if( popunjen ) g2.drawString("[0] Popunjen", 10, 30 + fm.getHeight()*2); else g2.drawString("[0] Okvir", 10, 30 + fm.getHeight()*2); g2.setPaint(primarnaBoja); FontMetrics fm = g2.getFontMetrics(); g2.drawString("[Q] Primarna boja", 10, 30 + fm.getHeight()*4); g2.setPaint(sekundarnaBoja); g2.drawString("[W] Sekundarna boja", 10, 30 + fm.getHeight()*5); String s = naziviBojenja[nacinBojenja-1]; int sirina = fm.stringWidth(s); g2.setPaint( napraviPaint(10, (int)(30 + fm.getHeight()*6.5), sirina, (int)(30 + fm.getHeight()*6.5) ) ); g2.drawString("[E] " + s, 10, 30 + fm.getHeight()*6 ); }

Page 41: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 41 od 68

//KeyListener implementation public void keyPressed(KeyEvent e) {} public void keyReleased(KeyEvent e) {} public void keyTyped(KeyEvent e) { if( x1 == -1 ) { switch(e.getKeyChar()) { case '0': popunjen = ! popunjen; repaint(); break; case 'q': case 'Q': primarnaBoja = izborBoje("Primarna boja", primarnaBoja); repaint(); break; case 'w': case 'W': sekundarnaBoja = izborBoje("Sekundarna boja", sekundarnaBoja); repaint(); break; case 'e': case 'E': if( nacinBojenja == JEDNOBOJNO ) nacinBojenja = NIJANSIRANO; else nacinBojenja = JEDNOBOJNO; repaint(); break; case ' ': isprazni(); repaint(); break; default: tip = e.getKeyChar() - '0'; repaint(); } } } // MouseListener implementation public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { if( x1 == -1 ) { x1 = e.getX(); y1 = e.getY(); } } public void mouseReleased(MouseEvent e){ x2 = e.getX(); y2 = e.getY(); radna = null; Figura f = napraviFiguru(); if( f != null ) dodajFiguru(f); x1 = y1 = -1; repaint(); }

Page 42: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 42 od 68

public void mouseExited(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseMoved(MouseEvent e) { kursorX = e.getX(); kursorY = e.getY(); } public void mouseDragged(MouseEvent e) { kursorX = e.getX(); kursorY = e.getY(); x2 = e.getX(); y2 = e.getY(); radna = napraviFiguru(); repaint(); } public static void main(String s[]) { GrafPrimer gp = new GrafPrimer(); gp.setOpaque(true); frame = new JFrame("Primer alata za crtanje u Java2D"); frame.addWindowListener ( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); frame.getContentPane().add(gp); frame.setSize(new Dimension(800,600)); frame.setVisible(true); frame.addKeyListener(gp); } } Predlog modifikacija programa u okviru samostalne vežbe

• Tokom definisanja nove figure, kod svakog crtanja stvara se nov objekat. Prepraviti program da bi se ovo izbeglo

• Meni: pozicija svake stavke se računa u apsolutnim vrednostima, čineći meni nefleksibilnim (otežano dodavanje stavki, promena pozicije, itd). Meni treba rešiti novom objektno-orijentisanom implementacijom. Za pozicioniranje koristiti transformacije koordinatnog sistema.

• Osvežavanje: svako osvežavanje prozora podrazumeva crtanje svih prethodno definisanih figura. Prepraviti program tako da se slika koja sadrži prethodno definisane figure pamti u objektu Image pre crtanja na ekran. Objekat Image se ažurira kada se dodaje nova figura ili kada se menja veličina prozora (tada se ponovo crtaju sve figure).

Page 43: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 43 od 68

1. Zadatak (Kolokvijum 2008. godine)

Napisati klasu sa potrebnim atributima i metodom paint() koja u prozoru crta klatno prikazano na slici. Dužina klatna je proporcionalna visini prozora u kojem se klatno prikazuje. Ugao pod kojim se klatno nalazi u odnosu na vertikalnu osu je dato atributom deklarisanim na sledeći način: double ugao; Smatrati da je izračunavanje ugla i obaveštavanje da je potrebno ažuriranje sadržaja prozora u pravilnim vremenskim intervalima realizovano metodom run(), koju ne treba pisati. Nije potrebno pisati niglavni program.

REŠENJE

import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; public class K1 extends JPanel implements Runnable { double ugao; // deg AffineTransform tr = new AffineTransform(); Rectangle2D rect1 = new Rectangle2D.Double(); Ellipse2D ellipse1=new Ellipse2D.Double(-15,-15,30,30); Ellipse2D ellipse2=new Ellipse2D.Double(-5,-5,10,10); public void paint (Graphics g){ super.paint(g); Graphics2D g2d = (Graphics2D) g; Dimension d = getSize(); 1 tr.setToIdentity(); 2 tr.translate( d.width/2, 0 ); 3 tr.rotate( ugao*Math.PI/180.0 ); g2d.setTransform(tr);

g2d.setPaint( Color.black ); rect1.setRect( -5, 0, 10, d.height*0.8 ); 4 g2d.fill( rect1 );

5 tr.translate(0, d.height*0.8); g2d.setTransform(tr);

g2d.setPaint( Color.red ); 6 g2d.fill( ellipse1 ); g2d.setPaint( Color.black ); g2d.fill( ellipse2 );

} }

1 2 3 4 5 6

x

y

d.width

x

y x

y

x y

x y

x y

Page 44: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 44 od 68

6. Rasterizacija primitiva: kružnica

Pretpostavka: crta se kružnica sa centrom u koordinatnom početku.

TRIVIJALAN ALGORITAM Na osnovu parametarskih jednačina kružnice: x = R cosα, y = R sinα, za α∈[0,2π] Menjajući α sa malim korakom, dobije se skup tačaka koje aproksimiraju kružnicu. Loše osobine: • spore trigonometrijske funkcije Oprez: • korak α je inverzno proporcionalan poluprečniku kružnice: za veći poluprečnik, manji mora biti korak

Potprogram za crtanje kružnice sa centrom u tački (cx, cy):

void circle(int cx, int cy, int r) { float alfa; for(alfa=0;alfa<6.28;alfa+=(atan(1.0f/r))) { plot(cx+r*cos(alfa),cy+r*sin(alfa)); } }

EFIKASNIJI ALGORITAM Treba uočiti da je krug visoko simetrična figura. Delimo ga u lukove koji pripadaju oktantima, pa za sračunatu tačku koja pripada luku u prvom oktantu jednostavno nalazimo simetrične tačke na lukovima u ostalih sedam oktanata.

M2

M1

M3

M4

M5

M6 M7

M8

Važi:

M1 = (x,y) M5 = (-x,-y) M2 = (y ,x) M6 = (-y,-x) M3 = (-y,x) M7 = (y ,-x) M4 = (-x,y) M8 = (x,-y)

Page 45: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 45 od 68

Potprogram za crtanje kružnice sa centrom u tački (cx, cy):

void plot8(float cx, float cy, float dx, float dy) { plot(cx+dx,cy+dy); plot(cx-dx,cy+dy); plot(cx+dx,cy-dy); plot(cx-dx,cy-dy); plot(cx+dy,cy+dx); plot(cx-dy,cy+dx); plot(cx+dy,cy-dx); plot(cx-dy,cy-dx); } void circle(int cx, int cy, int r) { float alfa; for(alfa=0;alfa<1.57;alfa+=(atan(1.0f/r))) { plot8(cx,cy, r*cos(alfa), r*sin(alfa)); } }

BRESENHAM-OV ALGORITAM Posmatrajmo luk u prvom oktantu, koji počinje tačkom (R, 0) i napreduje u smeru nasuprot kretanja kazaljke sata, do ugla 45°. Bresenham-ov algoritam za crtanje kružnice se svodi na odlučivanje o izboru između dve kandidat-tačke (A i B) između kojih prolazi kružna linija.

C

A B

P

Pretpostavimo da je kružnica prošla kroz tačku P(x,y) i da treba odlučiti da li će “proći” kroz A(x-1, y+1) ili B(x, y+1). Da li je moguće da “prođe” kroz C? Ne, jer posmatrani luk pripada prvom oktantu. Uvodimo pojam kvadradtne greške (odstupanja u odnosu na geometrijski tačnu kružnicu) u tački K: e(K) = xk

2 + yk

2 – R2, i to

e(K) > 0, za K izvan kruga, e(K) = 0, za K na kružnici, e(K) < 0, za K unutar kruga.

U tački A (e<0): e(A) = (x-1)2 + (y+1)2

- R2

U tački B (e>0): e(B) = x2 + (y+1)2

- R2

Page 46: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 46 od 68

Algebarski zbir grešaka je: d=e(A) + e(B) 1. A, B unutar kruga (teoretski): e(A)<0, e(B)<0 _ d<0, bira se B 2. A, B izvan kruga (teoretski): e(A)>0, e(B)>0 _ d>0, bira se A 3. A unutar, B izvan kruga: e(A)<0, e(B)>0

a) |e(A)| > |e(B)| _ d<0, bira se B b) |e(A)| < |e(B)| _ d>0, bira se A

Uočava se zakonitost: d<0 _ bira se B; d>0 _ bira se A

U početnom koraku: d0 = di|(R,0) = 3-2R U i-tom koraku: di = (x-1)2 + (y+1)2

– R2 + x2 + (y+1)2 – R2 = 2x2 + 2y2 – 2R2 + 3 – 2x +4y U (i+1) koraku: za di > 0 (A): di+1 = (x-2)2 + (y+2)2 – R2 + (x-1)2 + (y+2)2 – R2 = 2x2 + 2y2 – 2R2 + 3 – 2x +4y + 10 –4x+4y = = di + 4(y-x) + 10 za di < 0 (B) di+1 = (x-1)2 + (y+2)2 – R2 + x2 + (y+2)2 – R2 = 2x2 + 2y2 – 2R2 + 3 – 2x +4y + 6 + 4y = = di + 4y + 6 Na osnovu izvedenog, sledi algoritam: typedef struct { int x; int y; } Point; void circle(int cx, int cy, int r) { Point p; int d; p.x=r; p.y=0; d= 3-2*r; while(p.x>p.y) { plot8(cx,cy, p.x, p.y); if(d<0) d+=4*p.y+6; else { d+=4*(p.y-p.x)+10; p.x--; } p.y++; } if(p.x==p.y) plot8(cx, cy, p.x, p.y); }

Page 47: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 47 od 68

2. Zadatak a) U jednostavnom algoritmu za crtanje kružnice uz pomoć trigonometrijskih funkcija izvesti zavisnost koraka ugla

∆α od poluprečnika kružnice. Korak ugla mora biti maksimalan, ali istovremeno mora da obezbedi neprekidnost kružnice. Kružnica je neprekidna ukoliko je udaljenost svake njene dve susedne tačke (za dva ugla udaljena za korak ∆α) po svakoj od koordinata najviše 1. Pretpostaviti da je r dovoljno veliko i da važi sin(∆α )= ∆α .

b) Naći odnos broja poziva procedure za drtanje tačke jednostavnog trigonometrijskog algoritma kome je korak ugla postavljen kao pod a) i broja poziva procedure za crtanje tačke Bresenhamovog algoritma za drttanje kružnice istog poluprečnika. Odnos dati za dovoljno velike poluprečnike kružnice

c) Koji efekat nije uzet u obzir odnosom izračunatim u tački (b), a značajno doprinosi relativnoj prednosti brzine Bresenhamovog algoritma?

REŠENJE

a) ∆α=arctg(1/r)1r

b) Jednostavan algoritam: j2n 2 rπ

= = π∆α

Bresenhamov algoritam: osmina kruga se crta uz inkrementiranje y, sve dok ne postane x=y. 2 2 2 2

br 8rr x y 2y y n2 2

= + = ⇒ = ⇒ =

Dakle, odnos je j

b

n 2 r 1.11n 4 2r

π= ≈

c) Nije uzeta u obzir činjenica da Bresenhamov algoritam radi samo sa celim brojevima, dok jednostavan

trigonometrijski algoritam radi sa realnim brojevima. 3. Zadatak

Korišćenjem Bresenhamovog algoritma za crtanje kružnice kao osnove i rutine za crtanje linije Line(x1,y1,x2,y2) koja crta liniju od tačke (x1,y1) do tačke (x2,y2), napisati program za crtanje popunjenog prstena sa centrom u tački (xp,yp), spoljnog poluprečnika Rs i unutrašnjeg poluprečnika Ru (smatrati da je Rs>Ru).

REŠENJE

// smesta u niz izracunatu tacku i njoj simetricnu tacku void ubaci2(int tacke[][], int index, int x, int y) { tacke[y][index] = x; tacke[x][index] = y; }

(xp,yp)Ru

Rs

Page 48: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 48 od 68

void crtaj2(int tacke[][], int y, int xc, int yc) { Line(xc-tacke[y][1], yc+y, xc+tacke[y][1], yc+y); Line(xc-tacke[y][1], yc-y, xc+tacke[y][1], yc-y); } void crtaj4(int tacke[][], int y, int xc, int yc) { Line(xc-tacke[y][1], yc+y, xc-tacke[y][0], yc+y); Line(xc+tacke[y][0], yc+y, xc+tacke[y][1], yc+y); Line(xc-tacke[y][1], yc-y, xc-tacke[y][0], yc-y); Line(xc+tacke[y][0], yc-y, xc+tacke[y][1], yc-y); } void prsten(int xp, int yp, int Ru, int Rs) { int tacke[MAX_INDEX][2]; int x,y,d; // unutrasnji krug x=Ru; y=0; d=3-2*Ru; while(x>=y) { ubaci2(tacke,0,x,y); if( d < 0 ) d += 4*y+6; else { d += 4*(y-x)+10; x--; } y++;

} // spoljasnji krug x=Rs; y=0; d=3-2*Rs; while(x>=y) { ubaci2(tacke,1,x,y); if(d < 0 ) d += 4*y+6; else

{ d += 4*(y-x)+10; x--; } y++;

} // crtanje do visine unutrasnjeg poluprecnika for(y=0; y<=Ru; y++) crtaj4(tacke,y,xp,yp); // crtanje ostatka for(y=Ru+1; y<=Rs; y++) crtaj2(tacke, y, xp, yp);

}

Page 49: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 49 od 68

7. Popunjavanje oblasti Oblast je grupa susednih, povezanih piksela. Uobičajeno, oblast se definiše na jedan od dva načina: 1. Svi pikseli koji pripadaju oblasti imaju datu vrednost 2. Pikseli koji su na ivici oblasti imaju datu vrednost Tipovi oblasti Prema načinu definisanja 1. Oblast definisana unutrašnjošću (interior-defined) - popunjavanja poplavljivanjem (flood-fill) 2. Oblast definisana granicom (boundary-defined). algoritmi popunjavanja oivičene oblasti (boundary-fill) Prema povezanosti piksela 1. Četvoro-susedna oblast (4-connected). 2. Osmo-susedna oblast (8-connected). 1. Zadatak

U memoriji rasterskog prikazivača se nalazi na crvenoj pozadini “šahovska tabla” sa plavim i žutim poljima. Polja su veličine jednog piksela. a) Napisati proceduru koja koristi jednostavni rekurzivni algoritam za izmenu boje svih polja jedne (plave ili žute)

boje, za zadate koordinate piksela koji pripada proizvoljnom polju date početne boje b) napisati sekvencu poziva gornje procedure koja će zameniti boje polja (plava da postanu žuta i žuta da postanu

plava). Pretpostaviti da je jedno izvršenje procedure mnogo kraće od (1/24)s. c) Koji su nedostaci navedenog algoritma pod (a) d) Kako se nedostaci navedeni pod (c) mogu otkloniti? Ukratko obrazložiti.

REŠENJE

a) S obzirom na to da se radi o šahovskoj tabli – očito je da treba popunjavati osmosusednu oblast, a s obzirom na to da jednu boju treba zameniti drugom – očito je da je oblast definisana unutrašnjošću:

void FloodFill8(int X, int Y, Color new_val, Color old_val) { if(GetPixel(X,Y)==old_val) { SetPixel(X,Y,new_val); FloodFill8(X-1,Y, new_val, old_val); FloodFill8(X+1,Y, new_val, old_val); FloodFill8(X1,Y-1, new_val, old_val); FloodFill8(X1,Y+1, new_val, old_val); FloodFill8(X-1,Y-1, new_val, old_val); FloodFill8(X-1,Y+1, new_val, old_val); FloodFill8(X+1,Y-1, new_val, old_val); FloodFill8(X+1,Y+1, new_val, old_val); } } b) FloodFill8(x,y,zelena,plava); FloodFill8(x+1,y,zelena,plava); FloodFill8(x,y,plava,zuta); FloodFill8(x+1,y,plava,zuta); FloodFill8(x,y,zuta,zelena); FloodFill8(x+1,y,zuta,zelena);

Page 50: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 50 od 68

2. Zadatak

Data je sledeća slika na jednom izlaznom uređaju:

poč etnatač ka

Ako se na prikazani slučaj primeni jednostavan rekurzivni algoritam popunjavanja: a) oivičene četvorosusedne oblasti (Boundary_fill4) sa vrednostima:

boundary_value = tačkice i new_value=karo b) oivičene osmosusedne oblasti (Boundary_fill8) sa vrednostima:

boundary_value = tačkice i new_value=karo skicirati efekat nakon izvršenja odgovarajuće procedure, precizno navodeći boje oblasti.

REŠENJE

a)

b)

Linijski (rekurzivan) algoritam za popunjavanje oblasti #include "fill.h" int HLine(int x, int y) { int f, from=x, to=x+1; if(getPixel(x,y)) return to; while(from>0 && !getPixel(from,y)) setPixel(from--,y,1); while(to < limitx && !getPixel(to,y)) setPixel(to++,y,1); if(y<limity) for (f=from+1;f<to;f=HLine(f,y+1)); if(y>0) for (f=from+1;f<to;f=HLine(f,y-1)); return to; } void Fill(int x, int y) { HLine(x,y); }

Page 51: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 51 od 68

8. Odsecanje 1. Zadatak

U dvodimenzionalnom koordinatnom sistemu realnog sveta definisan je prozor (“Window”) pozivom: SetWindow(3.0, 6.0, 2.0, 5.0);

gde parametri poziva primaju semantiku prema datoj dekleraciji: SetWindow(float XwMin, float XwMax, float YwMin, float YwMax); Navesti prema Cohen-Sutherland algoritmu: a) položajne kodove (outcode) tačaka:

A(4,3), B(5,4), C(2,1), D(8,1), E(1,3), F(5,6), G(5,1), H(9,3) b) uslov trivijalnog odbacivanja proizvoljne linije PQ c) uslov trivijalnog prihvatanja proizvoljne linije PQ d) Koji se od linijskih segmenata mogu trivijalno odbaciti CD, EF, GH, AE? e) Ako je u normalizovanim koordinatama uređaja definisan prikazni prozor(“Viewport”) pozivom:

SetViewPort(0.5,0.75, 0.25, 0.95) gde parametri poziva primaju semantiku prema deklaraciji: Procedure SetViewPort(XvMin, XvMax, YvMin, YvMax: Real); napisati jednačine transformacije tačke (Xw,Yw), iz prozora definisanog u ovom zadatku u dati prikazni prozor. Koordinate transformisane tačke označiti sa (Xv, Yv)

REŠENJE

a) Ako se sa Cp obeleži outcode tačke P: Ca=0, Cb=0, Cc=5, Cd=6, Ce=1, Cf=8, Cg=4, Ch=2

10 1001 1000 1010 00 0001 0000 0010 01 0101 0100 0110

V/N 01 00 10 V – Viši par bitova = vertikalni položaj N – Niži par bitova = horizontalni položaj

b) Uslov trivijalnog odbacivanja segmenta PQ je:

(Cp & Cq) != 0 c) Uslov trivijalnog prihvatanja segmenta PQ je:

(Cp == 0) && (Cq == 0), odnosno (Cp | Cq) == 0 d) Trivijalno se može odbaciti samo segment CD

e) 25.0083.0)( +⋅=−−−+= XwXwMinXw

XwMinXwMaxXvMinXvMaxXvMinXv

217.0233.0)( +⋅=−−−+= YwYwMinYw

YwMinYwMaxYvMinYvMaxYvMinYv

2. Zadatak

Ukoliko se Cohen-Sutherlandov algoritam za 2D-grafiku proširi za primenu u 3D prostoru a) koliko različitih načina dodele položajnih kodova (outcode) u 3D prostoru postoji? b) koliko postoji različitih položajnih kodova za jedan usvojen načIn kodiranja ako je “3D-prozor” oblika kvadra čije ivice leže paralelno sa koordinatnim osama zadat opsezima koordinata x∈[10,50], y∈[20,30], z∈[30,60], koliko zajedničKih postavljenih bitova u položajnom kodu imaju sledeći parovi tačaka: A1(5,5,5) i B1(70,70,70);

Page 52: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 52 od 68

A2(15,10,15) i B2(30,50,15); A3(5,40,70) i B3(5,500,10);

REŠENJE

a) Outcode u 2D prostoru ima onoliko bitova koliko ima i strana prozora – 4. U 3D prostoru Outcode ima 6 bitova. Svaki od tih bitova može biti dodeljen jednom od strana prozora. Ako strane prozora obeležimo brojevima 0..5 problem kreiranja jednog načina kodovanja, svodi se na problem razvrstavanja broja strane po bitovima outcodea, što je jedna permutacija bez ponavljanja brojeva 0..5. Dakle broj načina dodele outcodeova je 6! = 720.

b) Stranama kvadra prostor je podeljen na 33 dela. Dakle tolko ima i položajnih kodova - 27. Zamisliti Rubikovu

kocku. c) Na osnovu sledeće tabele

tačka/bit levo x<xw

desno x>xw

dole y<yw

gore y>yw

iza z<zw

ispred z>zw

A1 1 0 1 0 1 0 B1 0 1 0 1 0 1 A2 0 0 1 0 1 0 B2 0 0 0 1 1 0 A3 1 0 0 1 0 1 B3 1 0 0 1 1 0

Sledi broj zajedničkih “jedinica”: A1-B1: 0; A2-B2: 1; A3-B3: 2 3. Zadatak

Šta se dobija kada se Sutherland-Hodgman-ov algoritam upotrebi za odsecanje »C« poligona »S« poligonom.

REŠENJE

Sutherland-Hodgman-ov algoritam vrši odsecanje proizvoljnog poligona konveksnim poligonom. Poligon "S" nije konveksan, pa se ne dobija očekivan rezultat prikazan na sledećoj slici. Skup rezultujućih temena posle odsecanja (rezultat odsecanja) je prazan skup, odnosno nema rezultujućeg poligona.

9.

Page 53: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 53 od 68

4. Zadatak Šta se dobija kada se Sutherland-Hodgman-ov algoritam upotrebi za odsecanje »C« poligona datim trouglom.

REŠENJE

Trougao jeste konveksan poligon, pa rezultat neće biti prazan skup temena, za razliku od prethodnog zadatka. Ovaj zadatak ilustruje kako osobina Sutherland-Hodgman-ovog algoritma da zatvara poligon koji se odseca ivicom prozora može dati neželjene efekte.

Page 54: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 54 od 68

10. Elementarne transformacije Translacija Koordinatni početak se pomera u tačku O’(x1,y1):

−−=

111010001

yxM T

Rotacija Koordinatni sistem rotira oko koordinatnog početka za ugao α. Pozitivan smer rotacije je nasuprot kretanja kazaljke časovnika.

−=

1000cossin0sincos

αααα

RM

Skaliranje Faktori skaliranja po X i y osi: SX i SY:

=

1000000

Y

X

S SS

M

SX = -1, SY = 1 => refleksija prema Y osi SX = 1, SY = -1 => refleksija prema X osi 1. Zadatak

U X-Y koordinatnom sistemu trougao je određen temenima: A(2,6), B(4,6) i C(3,8). Ukoliko se koordinatni sistem translatorno pomeri u tačku O1(1,1), zatim rotira u smeru suprotnom od kretanja kazaljke na časovniku za ugao 30° i konačno skalira faktorima za X-osu Sx=2, odnosno Y-osu: Sy=1, odrediti: a) kompozitnu matricu transformacije b) nove koordinate datog trougla c) Da li se menja kompozitna matrica transformacije ako se elementarne transformacije izvrše po redosledu:

1. rotacija, translacija, skaliranje 2. translacija, skaliranje, rotacija

REŠENJE

a) Matrice elementarnih transformacija su:

−−=

111010001

T

°°°−°

=100030cos30sin030sin30cos

R

=

100010002

S

Kompozitna matrica je:

−−

−=⋅⋅=

1366.0732.20866.0105.0732.1

SRTM

b) A’ = (2,6,1)*M = (6.732, 3.83, 1) B’ = (4,6,1)*M = (10.196, 2.83, 1) C’ = (3,8,1)*M = (10.464, 5.062, 1); c) 1. Da. 2. Da.

Page 55: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 55 od 68

2. Zadatak Trougao ABC nalazi se na ekranu u položaju definisanom koordinatama tačaka A(1,3), B(3,1), C(3,3). (Koordinatni početak se nalazi u levom donjem uglu ekrana). Odrediti kompozitnu matricu transformacija pokretne “virtuelne kamere” tako da se postigne efekat promene položaja trougla ABC u položaj: a) A’B’C’, gde su koordinate tačaka A’(7,5), B’(5,7), C’(5,5) b) A’’B’’C’’, gde su koordinate tačaka A’’(5,7), B’’(7,5), C’’(5,5).

REŠENJE

a) 1. Translacija koordinatnog početka u tačku O’(3,3) 2. Rotacija koordinatnog sistema nasuprot kretanja kazaljke na časovniku za ugao α=π 3. Translacija koordinatnog početka u tačku (-5,-5): Kompozitna matrica:

−=

−⋅

−−=⋅⋅=

188010001

155010001

100010001

133010001

21 TRTM

b) 1. Translacija koordinatnog početka u tačku O’(3,3) 2. Refleksija prema X-osi 3. Rotacija nasuprot kretanja kazaljke za ugao α=90° 4. Translacija koordinatnog početka u tačku O’’(-5,-5). Kompozitna matrica:

−=

−⋅

−⋅

−−=⋅⋅⋅=

188001010

155010001

100001010

100010001

133010001

21 TOOTM YX

Page 56: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 56 od 68

3. Zadatak Izračunati kompozitnu matricu preslikavanja objekata iz prozora (Window) sa slike 1 u prikazni prozor (Viewport) na slici 2. Prozor se nalazi u koordinatnom sistemu realnog sveta, a prikazni prozor u normalizovanom koordinatnom sistemu prikaznog uređaja.

x

y(10,9)

(2,3)

x

ya b

r

α

α = 30°a = 0.4b = 0.6r = 0.5

REŠENJE

M = TW ⋅ S ⋅ TVP ⋅ R

−−=

132010001

WT

=

1000000

y

X

SS

S

64.0

86.0

=

=

y

x

S

S

=

15.00010001

VPT

°°°−°

=100030cos30sin030sin30cos

R

−=

13348.00201.000577.00333.000375.00649.0

M

Page 57: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 57 od 68

11. Geometrijske transformacije u 3D grafici 1. Zadatak

U desnom pravouglom koordinatnom sistemu (X-Y-Z) zadata je piramida temenima: A(2,0,2); B(2,0,0); C(4,0,0); D(4,0,2); E(3,1,1). Ukokliko se koordinatni sistem najpre rotira oko X-ose u suprotnom smeru od kazaljke sata za ugao α=45°, zatim translira u pravcu i smeru pozitivne X-ose tako da se tačka E nađe u Y-Z ravni i konačno rotira oko Y ose u smeru kazaljke sata za ugao β=45°, odrediti: a) kompozitnu matricu transformacije b) koordinate svih temena u transformisanom koordinatnom sistemu c) koordinate projekcija svih temena u perspektivi, ako se posmatrač nalazi u tački P(0,0,5)

REŠENJE

Po konvenciji, u desnom pravouglom koordinatnom sistemu, "rotacija oko X ose u suprotnom smeru od kazaljke na satu" podrazumeva da se za posmatrača koji se nalazi na pozitivnom delu X ose i gleda ka koordinatnom početku, ravan YoZ okreće oko koordinatnog početka u smeru suprotnom od smera kazaljki na satu. a) Kompozitna matrica transformacije: M=Rx*T*Ry

−−

=

=

12

2302

23

021

22

21

021

22

21

02

2022

1000

0220

22

0010

02

2022

1003010000100001

1000

022

220

02

2220

0001

M b)

A’: (2,0,2,1)*M = (0.293, 1.414, 1.707) B’ = (-0.707, 0, 0.707) C’ = (0.707, 0, -0.707) D’ = (1,707, 1.414, 0.293) E’ = (0, 1.414, 0)

d) Matrica projekcije u perspektivi:

−=

100051000

00100001

PP

Projektovane tačke: A’’: A’*PP = (0.445, 2.15, 0) B’’ = (-0.823, 0, 0) C’’ = (0.620,0,0) D’’ = (1.814, 1.502, 0) E’’ = (0,1.414,0)

Page 58: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 58 od 68

2. Zadatak Pokretna kamera rotira u smeru kretanja kazaljke časovnika oko X-ose desnog pravouglog koordinatnog sistema za ugao α=30°, zatim se pomeri u pravcu i smeru negativne X-ose za 5 jedinica dužine i konačno rotira u smeru suprotnom od smera kretanja kazaljke na časovniku oko ose-Y za ugao β=15°. Smatrajući da je koordinatni sistem realnog sveta vezan za pokretnu kameru i da se ortogonalna projekcija originalne tačke M(x,y,z) nakon izvršenih transformacija nalazi u prozoru (Window) definisanom u X-Y ravni pomoću tačke A(-15,-5) u donjem levom uglu i tačke B(15,5) u gornjem desnom uglu, vrši se preslikavanje date projekcije tačke iz koordinatnog sistema realnog sveta u prikazni prozor (Viewport) definisan tačkama A’(0.1,0.1), B’(0.5, 0.25) datim u normalizovanim koordinatama uređaja. Postavljanjem “ogledala” na pravu x=0.6, dobija se konačna slika u ogledalu M’ date tačke. Postaviti (jednu) matričnu jednačinu koja definiše sliku M’ u funkciji originalne tačke M. Napomena: nije potrebno izračunavati kompozitnu matricu, već samo uvrstiti konkretne vrednosti elemenata u elementarne matrice.

REŠENJE

M’ = M * transformacije u 3D * ortogonalna projekcija * preslikavanje u prikazni prostor * ogledanje M’ = M * ( (RX * TX * RY) * Po * (TW * S * TVP )* (Tx1 * OY * TX2))

−⋅

°°−

°°

°°−°°

⋅=

106.0010001

100010001

106.0010001

11.01.0010001

100

01015.00

0030

4.0

1515010001

100000010001

1000015cos015sin0010015sin015cos

1005010000100001

1000030cos30sin0030sin30cos00001

' MM

Page 59: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 59 od 68

3. Zadatak

U desnom pravouglom koordinatnom sistemu posmatrani objekti se nalaze u prostoru definisanom kvadrom: x∈[10,50], y∈[10,30], z∈[-50,0]. Prostim sažimanjem dati prostor se preslikava na prostor definisan kockom: x∈[10,20], y∈[10,20], z∈[-10,0]. a zatim projektuje sa perspektivom na XoY ravan sa centrom projekcije u tački D(0,0,10). Delove projekcije objekata koji se nalaze u prozoru prikazane ravni definisanom sa x∈[5,15], y∈[5,10], potrebno je preslikati u prikazni proszor, definisan slikom 1, uređaja sa normalizovanim koordinatama, tako da se stranica prozora y=5 preslika u stranicu prikaznog prrozora AB, pri čemu se tačka prozora (5,5) preslikava u tačku prikaznog prozora A. Postaviti matrične jednačine preslikavanja tačke iz zadatog 3D prostora u dati prikazni prozor.

x

y

a

B

b

α

α = 56.31°a = 0.3b = 0.2

A = (0.2,0.3)A

Napomena: potrebno je postaviti sve jednačine koje definišu preslikavanje originalne tačke (3D) u njenu sliku, i u sve matrice elementarnih transformacija uvrstiti konkretne vrednosti elemenata. Nije potrebno množiti matrice.

REŠENJE

1. Translacija koordinatnog sistema u tačku O1(10,10,0); 2. Skaliranje faktorima Sx=0.25, Sy=0.5, Sz=0.2; 3. Inverzna traslacija u tačku O(-10,-10,0) 4. Projekcija sa perspektivom tačke P(x,y,z) iz centra projekcije D(0,0,10) 5. Translacija koordinatnog početka u O2(5,5) 6. Skaliranje skala faktorima Sx = a/10, Sy=b/5 7. Rotacija u smeru kazaljke na satu za ugao α 8. Translacija koordinatnog početka u tačku O3(-0.2, -0.3) 4. Zadatak

a) Koristeći matrični račun i matrice elementarnih transformacija, odrediti matricu projekcije sa perspektivom na ravan x=5 za posmatrača koji se nalazi u tački P(0,0,5). Smatrati da se tačka M(x,y,z) koja se projektuje nalazi u desnom pravouglom koordinatnom sistemu.

b) Koristeći matricu projekcije iz tačke (a) izračunati koordinate projekcije tačke M(2.5, 5, 2.5)

REŠENJE

a) Matrica projekcije se dobija na sledeći način: T(5,0,5) * Ry(-π/2) * Pp(0,0,5) * Ry(π/2) * T(-5,0,-5) =

Page 60: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 60 od 68

=

−⋅

−⋅

−−

05000100001051101

1505010000100001

1000000100100100

100051000

00100001

1000000100100100

1505010000100001

b) Projekcija tačke M(x,y,z) je M’(x’=xw/w, y’=yw/w. z’=zw/w) gde je:

[ ] [ ]

⋅=

05000100001051101

1zyxwzyx www

M’ = (5,10,0)

5. Zadatak Postaviti matričnu jednačinu koja određuje projekciju sa perspektivom iz centra projekcije P(0,0,6) na projekcionu ravan y=5, slike proizvoljne tačke (u desnom 3D koordinatnom sistemu) u ogledalu postavljenom na ravan z=-x+2. U sve matice elementarcnih transformacija koje učestvuju u matričnoj jednačini uvrstiti konkretne vrednosti elemenata, ali ne izračunavati kompozitnu matricu.

REŠENJE

Matrica projekcije se dobija na sledeći način: M = T(0,0,2) * Ry(π/4) * Oxy * Ry(-π/4) * T(0,0,-2) * T(0,0,6) * Rx(π/2) * T(0,0,-5) * Pp(0,0,5) * T(0,0,5) *Rx(-π/2) * T(0,0,-6)

−⋅

−⋅

−⋅

=

1600010000100001

1000001001000001

1500010000100001

10002.0000

00100001

1500010000100001

1000001001000001

1600010000100001

1200010000100001

100000001000

1000010000100001

100000001000

0200010000100001

aa

aa

aa

aa

M

Page 61: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 61 od 68

12. OpenGL – Open Graphics Library OpenGL je softverski interfejs ka grafičkom hardveru. Interfejs se sastoji iz skupa od nekoliko stotina procedura i funkcija koje omogućavaju programeru da specificira objekte i operacije prilikom izrade kvalitethnih grafičkih prikaza – pogotovu obojenih, 3D objekata. OpenGL zahteva postojanje frame buffer-a. Iako će primitive moći da se iscrtaju, način na koji će se iscrtavanje vršiti i kvalitet iscrtavanje zavisi od postojanja i kvaliteta frame-buffer-a. Programerski & Implementatorski pogled na OpenGL - Programer: OpenGL – skup komandi koje omogućavaju prikaz 3D sveta - OpenGL kontekst – klasična paradigma konteksta za crtanje - Implementator: Treba realizovati svaku od funkcija uz maksimalno korišćenje akceleratorskih mogućnosti

zadatog hardvera - OpenGL se može posmatrati i kao state mašina - OpenGL operation - OpenGL je biblioteka koja se bavi isključivo pisanjem u i čitanjem iz frame buffer-a. OpenGL ne podržava

druge periferije, ulazne uređaje. OpenGL je zapravo sistem koji mora biti ugrađen u OS i programer je dužan da napravi ugradnju i koegzistenciju OpenGL sistema i OS.

- Jednostavnost OpenGL-a: postoje primitive i modovi. - Primitive su jednostavne: tačke (temena), segmenti linije, poligoni i pravougaonici. Primitive se definišu

grupom više čvorova (Vertex). Za svaki čvor vezani su podaci o boji, normali, teksturi. - Modovi su razni i nezavisni – svi modovi se postavljaju nezavisno od drugih modova. Naravno,

interakcijom, ili bolje reći kombinacijom modova – kreira se izlaz u frame buffer-u. - Komande se procesiraju po redu po kojem su primljene, iako može biti zastoja pre nego što se efekti komande

prikažu. Ovo praktično znači da se prvo zadata primitiva mora skroz iscrtati pre nego što sledeća primitiva dobije priliku da izmeni frame buffer.

- OpenGL podržava isključivo on call data binding. - OpenGL podržava direktnu kontrolu nad osnovnim 2D i 3D grafičkim osobinama: direktno se vide matrice,

formule za boju, i sl. - OpenGL ne podržava specifikaciju kompleksnih objekata i interakcija! Slično RISC hardveru – podržavati

sredstva a ne i samu situaciju. - OpenGL radi na klijent – server principu. Mrežna transparentnost. Server = OpenGL kontekst. - OS/ Window sistem alocira frame buffer, ne postoji OpenGL komanda za alociranje ili inicijalizaciju OpenGL-a,

takve operacije postoje van OpenGL-a i vezane su za host OS. - OpenGL je Open, tj. predviđen je da kao standard radi na nizu platformi => Specificira idealno ponašanje i

predviđa odstupanja. - Komande počinju sa gl. Specifične komande, koje se realizuju za potrebe implementacije OpenGL na određenoj

platformi imaju proširen prefiks. Na primer, komande za Microsoft Windows platformu imaju prefiks wgl, a komande za X-Windows okruženje imaju prefiks xgl.

- Sva izračunavanja su floating point tipa uz predviđene opsege brojeva! - OpenGL state: server & client. Frame buffer nije deo OpenGL stanja. Serverski state = modovi. - Sintaksa komande: void glVertex3f(float x, float y, float z) - Greške: glGetError() - Begin/End Paradigma

void glBegin(enum mode ); ... (niz instrukcija koje opisuju jednu vrstu primitive) void glEnd( void ); void glFlush( void );

Page 62: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 62 od 68

Slika 11.1

Na slici 11.1 su prikazane primitive koje OpenGL može da crta. Brojevima je označen redosled u kome se zadaju temena. Naziv primitive (ispisan ispod slike primitive) predstavlja predefinisanu simboličku konstantu koja se zadaje instrukciji glBegin(). Na primer: glBegin(GL_TRIANGLE_FAN);

Slika 11.2

Na slici 11.2 je prikazan OpenGL u vidu konačnog automata.

Page 63: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 63 od 68

- Zadavanje stanja: void glEnable(GLenum capability); void glDisable(GLenum capability);

GL_POINT_SMOOTH GL_LINE_SMOOTH GL_LINE_STIPPLE

void glColor3f (0.0, 1.0, 0.0); void glPointSize(GLfloat size); void glLineWidth(GLfloat width); void glLineStipple(GLint factor , GLushort pattern);

- Koordinatne transformacije

Slika 11.3

void glMatrixMode(GLenum mode)

mode: GL_MODELVIEW, GL_PROJECTION void glLoadIdentity() void glTranslate(TYPE x, TYPE y, TYPE z) void glRotate(TYPE angle, TYPE x, TYPE y, TYPE z) void glScale(TYPE x, TYPE y, TYPE z) void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near , GLdouble far). void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near , GLdouble far). void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)

- Display liste

void glNewList(GLuint name, GLenum mode) void glEndList() void glCallList(GLuint name).

- 3D Animacija

- Double buffering - Swap buffera posle glFlush - IdleFunc

Page 64: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 64 od 68

- Tipična organizacija OpenGL programa main: find GL visual and create window initialize GL states (e.g. viewing, color, lighting) initialize display lists loop check for events (and process them) if window event (window moved, exposed, etc.) modify viewport, if needed redraw else if mouse or keyboard do something, e.g., change states and redraw redraw: clear screen (to background color) change state(s), if needed render some graphics change more states render some more graphics . . . swap buffers

- Biblioteke

GLU

Aplikacija

OpenGL

Aux/GLUT

Host OS

Page 65: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 65 od 68

13. Uklanjanje skrivenih površi 1. Zadatak (Backface removal)

Neprozirni tetraedar definisan je sledećim temenima: A(7,5,-8), B(2,4,-5), C(6,3,-3) i D(3,8,-4) Metodom za određivanje površi koje su okrenute licem, odnosno naličjem, prema posmatraču odrediti vidljivost svih površi tetraedra posmatranog iz tačke P(9,5,-10)

REŠENJE

Skalarni proizvod vektora noramle na površ nr i vektora pogleda wr određen je sledećim izrazom:

)()()( uvuvwuvuvwuvuvw xyyxzxzzxyyzzyxwn −+−−−=⋅rr

zPzPzyPyPyxPxPxzPzPzyPyPyxPxPxzPzPzyPyPyxPxPx

uuu

vvv

www

.2.1,.2.1,.2.1

.2.3,.2.3,.2.3.2.,.2.,.2.

−=−=−=−=−=−=−=−=−=

P1, P2 i P3 su tri sukcesivna temena određenog trougla u smeru nasuprot kretanja kazaljke časovnika (posmatrano izvan tetraedra), a P tačka u kojoj se nalazi posmatrač. Poligon je vidljiv ukloliko je 0≥⋅ wn rr

. ACB se vidi, BCD je zaklonjen, CAD se vidi, ABD se vidi. 2. Zadatak (Z-Buffer)

Dat je trougao A(3,3,3), B(5,7,1), C(7,1,5). a) Koristeći ideju Z-bafer algoritma, odrediti da li ravan određena datim trouglom zaklanja tačke P(4,4,1), Q(2,5,4)

i R(4,6,2) za posmatrača koji se nalazi u tački X(0,0,+∞). b) Ako je u z-bafer postupku analize trougla ABC određena koordinata z tačke M(x,y,z) koja pripada trouglu,

kolika je koordinata z’ tačke M’(x+1, y, z’)?

REŠENJE

a) Jednačina ravni određene trougloma ABC:

0353137313735333

det =−−−−−−−−− zyx

4x - 12y - 20z + 84 = 0

5213 +−= yxz

ZP’=2.5> 1 = ZP, zaklanja P ZQ’=1.6< 4 = ZQ, ne zaklanja Q ZR’=1.4< 2 = ZR, ne zaklanja R

b) 51

51

5213

5213)1(' +=+

+−=

+−+= zyxyxz

rw

rurvrn

= ×r r rn u v

Page 66: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 66 od 68

3. Zadatak (Z-Buffer) Trougao A(3,3,3), B(5,7,2), C(7,2,5) posmatra se kamerom koja se nalazi u tački (2,2,10) koja sliku projektovanu ortogonalnom projekcijom na XY ravan na prozor zadat temenima L(0,0) R(10,10). Slika se prikazuje na monitoru u viewportu oblika pravougaonika sa temenima (0.1, 0.1), (0.9, 0.9). Naći vrednost Z-buffera u tački D(0.5,0.5).

REŠENJE

Slika se na ekranu dobija transformacijom: )1.0,1.0()08.0,08.0()10,2,2()10,2,2( −−⋅⋅−−−⋅⋅= TSTPTM ortho :

Av(0.34,0.34) Bv(0.5, 0.67) Cv(0.66,0.26). Tačka (0.5,0.5) nalazi se u Z bufferu! Treba naći poziciju tačke D(0.5, 0.5) u prozoru, primenom transformacije:

)5.12,5.12()1.0,1.0(' STM ⋅= D’= D⋅M’= (5, 5) Jednačina ravni određene trougloma ABC:

0353237323735333

det =−−−−−−−−− zyx

7x - 8y - 18z + 57 = 0

8888.218

57585718

5787 =+⋅−⋅=+−= yxz

Page 67: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 67 od 68

14. Animacija 1. Zadatak

Pokretna virtuelna kamera postavljena u koordinatni početak desnog koordinatnog sistema rotira u smeru nasuprot kretanja kazaljke časovnika oko ose definisane pravom (x=4; z=-6). Ako punu rotaciju kamera obavi za 10s a) koliko slika je potrebno formirati u toku jedne rotacije kamere za dobru animaciju? b) Odrediti kompozitnu matricu transformacije proizvoljne tačke u prostoru između dve sukcesivne animacione

slike

REŠENJE

a) Pošto perzistencija čovekovog vida dozvoljava razlikovanje najviše 24 slike u vremenu 1s, broj slika za dobru animaciju iznosi:

2402410 1 =⋅= sslika sN b) Ugao za koji se pomeri kamera između dve animacione slike iznosi:

°=°= 5.1240360α

−⋅

=⋅⋅=

1604010000100001

10000cos0sin00100sin0cos

1604010000100001

αα

αα

iy TRTM

6cos6sin44sin6cos4

100cos0sin00100sin0cos

−+−=+−−=

−=

αααα

αα

αα

BA

BA

M

2. Zadatak U jednoj animaciji u realnom vremenu u kojoj se koriste dve ravni video memorije potrebno je translatorno pomerati popunjen romboid čija je jedna ivica u početnoj poziciji definisana tačkama A(10,10) i B(20,60), a druga ivica paralelna horizontalnoj osi ekrana. Na svakoj novoj poziciji romboid menja nijansu a za sobom ostavlja trag, tj. pozadinia se ne restaurira. Kolika može biti maksimalna dužiina horizontalne ivice ya dobru animaciju u realnom vremenu, ako se na sukcesivnim slikama romboid pomera najviše za jedan piksel na “osmo-susednu” poziciju? Prosečno vreme izračunavanja i iscrtavanje jednog piksela je Tpix=8µs.

REŠENJE

Pod pretpostavkom da se na svakoj novoj poziciji popunjeni romboid iscrtava u celini i da se radi sa dve ravni video memorije, u toku prikazivanja slike iz jedne ravni (1/25s), u kojoj je romboid na poziciji (x,y), potrebno je u aktivnoj ravni dva puta iscrtati romboid: na poziciji (x,y) i sledećoj poziciji. Sa više od dve ravni broj romboida koje treba iscrtati za vreme (1/25s) je veći od 2, pa bi dužina horizontalne stranice bila manja. Znači, za iscrtavanje jednog romboida na raspolaganju je 1/50s. Ako se broj piksela koje treba iscrtati obeleži sa N, a dužina horizontalne stranice romboida sa K:

4951/2500)11060(

2500108

max

6501

max

=⇒≤⋅+−≥

=⋅

=−

KKKN

N

Page 68: 1. RASTERSKI PRIKAZIVAČIrti.etf.bg.ac.rs/rti/ri5rg/materijali/RG_Vezbe_2009-03-12.pdf · Ako je a adresa poslednjeg bajta video memorije koji pripada liniji i, prvi bajt koji pripada

ELEKTROTEHNIČKI FAKULTET RAČUNARSKA GRAFIKA (IR4RG,MS1RG, SI4RG)

Đurđević Đorđe / MATERIJALI SA VEŽBI (V2009-03-12) STRANA 68 od 68

15. Literatura § A. Watt, "3D Computer Graphics", Second Edition, Addison–Wesley § N. Magnenat-Thalmann, D. Thalmann, "Image Synthesis, Theory and Practice", Springer-Verlag,

1987 § Materijali o parametarskim krivama i površima, Kenneth I. Joy, Visualization and Graphics Research

Group, Department of Computer Science, University of California, Davis § “82720/GDC Application Manual”, Intel Corp. § www.digit-life.com § www.opengl.org § Wikipedia – the free encyclopedia