Praeita paskaita Grafika ir vizualizavimas Atkirtimai dvimatėje erdvėje Atkarpos Tiesės lgtis = mx+ b kur m krpties koeficientas, o b aukštis, kuriame tiesė kerta ašį Susikirtimo taško apskaičiavimui sulginamos dviejų atkarpų koordinatės, apskaičiuojamas x, o pagal x apskaičiuojamas ir. m 1xi + b1= m 2 xi+ b2 Praeita paskaita Atkarpos - kaip aprašomos? Atkarpos nurodomos dviejų galinių taškų koordinatėmis pvz. P 1 (x 1, 1 ) ir P 2 (x 2, 2 ). Atkarpai aprašti gali būti taikomos ir parametrinės lgts: x = x 1 + t (x 2 x 1 ) = 1 + t ( 2 1 ) kur t 1 Kuomet t =, gaunamas pradinis atkarpos taškas, kai t = 1 galinis taškas, o tarpinės t reikšmės nusako tarpinių atkarpos taškų koordinates. 2D Transformacijos Visos transformacijos dvimatėje erdvėje atliekamos koordinačių sistemos pradžios taško atžvilgiu. Transformacijos atliekamos naudojant homogenines koordinates. Pvz. Dekarto koordinačių sistemos taškas P(x,) atvaizduojamas homogeninėje koordinačių sistemoje kaip P(x, ) aprašomas P(xh, h, h) Trikampis Dekarto ir homogeninėse koordinatėse aprašomas OpenGL bibliotekoje: [] [] trikampis trikampis x1 = 1 x1 = x 2 x3 x 2 2 1 2 3 x3 3 [] trikampis x1 = x2 x3 1 2 3 1 1 1 x1 x2 x3 [] trikampis = 1 2 3 1 1 1 Dvimatė grafika, atkirtimai 1
2D Transformacijos Transformacijos ra aprašomos matricomis, kurių bendras pavidalas ra: A D G C F I Postūmio transformacija: G,H Pasukimo transformacija: A, B, D, E Mastelio keitimo, atspindžio transformacijos: A, E, I Šlties transformacija: B, D B E H Sudėtinės transformacijos Atliekant keletą transformacijų iš eilės ra labai svarbu teisinga tvarka sudauginti matricas. ((([xh,h,h] T Postūmio ) T Pasukimo ) T Postūmio ) [xh,h,h] (T Postūmio (T Pasukimo T Postūmio )) 1 T 1 R T2 = 1 cosθ sinθ 1 sinθ cosθ 1 x 1 1 x 1 c c c c 1 cosθ sinθ = 1 sinθ cosθ x 1 xc 1 c c c cosθ sinθ = sinθ cosθ xc cosθ + c sinθ + xc xc sinθ c cosθ + c 1 Vaizdavimo veiksmai Atkirtimai dvimatėje erdvėje Objekto modelio atvaizdavimui displėjaus ekrane grafinėse sistemose atliekami šie veiksmai: 1. Nurodoma, kuri modelio dalis bus rodoma displėjaus ekrane ir kokioje jo dalje. 2. Modelio koordinatės ra transformuojamos į ekrano koordinates: tiesiogiai, arba per normuotą įrenginį Aplinkos koordinačių sistema Normuota įrenginio koordinačių sistema Įrenginio koordinačių sistema Displėjus Dvimatė grafika, atkirtimai 2
Vaizdavimas ekrane Vaizdavimas ekrane Dažnai tenka ekrane vaizduoti tam tikrą objekto dalį, arba objektą reikia pavaizduoti konkrečiame ekrano plote. (x w max, w max) (x w, w) (x w min, w min) (x v max, v max) (x v, v) (1,1) (x v min, v min) Displėjaus ekrane norima matti vaizdo dalis Aplinkos koordinačių sistema Vaizdavimo sritis displėjaus ekrane Ekrano koordinačių sistema Aplinkos koordinatės x (,) Normuotos įrenginio koordinatės Displėjaus koordinatės Matematiškai objekto taško (x w, w ) transformavimas į normuoto įrenginio koordinačių sistemos tašką (x v, c ) aprašomas matricomis: [ xv, v,1] = [ xw, w,1] S ( ) ( ) S x + x S + 1 x S x wmin vmin wmin vmin Atkirtimai Kuomet nurodoma tik dalis objekto, kita dalis, netelpanti į langą turi būti atmesta. Atkirtimai Reikia surasti atkarpų taškus, kurie priklauso vaizdavimo srities briaunoms. Dvimatė grafika, atkirtimai 3
Taškų atkirtimai Atkarpų atkirtimai Taškas T(x,) bus matomas jeigu bus tenkinamos nelgbės: x K V x x D T(x,) A (x D, V ) Elementariausias atkirtimo algoritmas: for kiekviena atkarpa for kiekviena vaizdavimo srities briauna nustatti susikirtimo tašką parinkti naują atkarpos pradžios tašką C A jeigu ra ką vaizduoti, tai vaizduoti D B (x K, A ) Kaip galima būtų optimizuoti šį algoritmą? Atkarpų atkirtimas Atkarpų atkirtimas Rškus optimizavimas atkarpų testavimas Kaip nustatti, priklauso atkarpa vaizdavimo sričiai, ar ne? Reikėtų analizuoti atkarpos galų taškus. Kaip nustatti, priklauso atkarpa vaizdavimo sričiai ar ne? Jeigu abu atkarpos galai ra išorinėje vaizdavimo srities pusėje vienos vaizdavimo srities briaunos atžvilgiu, vadinasi atkarpa nepriklauso vaizdavimo sričiai. Dvimatė grafika, atkirtimai 4
Priskrimo, atmetimo testai: Atkarpų atkirtimas Atkarpa priklauso vaizdavimo sričiai, jeigu jos galų taškai ra vidinėse visų vaizdavimo srities briaunų pusėse Atkarpa nepriklauso vaizdavimo sričiai, jeigu abu jų galų taškai ra išorinėje tos pačios vaizdavimo srities briaunos pusėje Kitais atvejais, atkarpa skaidoma į segmentus ir analizuojama pakartotinai Atkarpų atkirtimas, Coheno-Sutherlando algoritmas Vaizdavimo plokštuma vaizdavimo sritimi padalinama į atskiras dalis. Kiekvienai daliai ra suteikiamas 4 bitų kodas: 11 1 11 1 1 11 1 11 Coheno-Sutherlando algoritmas Kiekvienai atkarpos viršūnei priskiriamas atitinkamas 4 bitų kodas Jeigu abu kodai lgūs, visa atkarpa ra vaizdavimo sritje OR operatorius Loginis AND operatorius abiem atkarpos galų kodams jeigu rezultatas, visa atkarpa nepatenka į vaizdavimo sritį. Coheno-Sutherlando algoritmas Jeigu visos atkarpos negalima nei atmesti, nei priimti, atkarpa ra skaidoma į dalis taip, kad viena iš jų būtų atmesta. Nustatoma briauna, kurią atkarpa kerta. Apskaičiuojamas atkarpos susikirtimo su ta briauna taškas. Atmetama nereikalinga dalis ir suteikiamas naujai viršūnei kodas. Iš naujo taikomas atmetimo testas. Testas kartojamas kol patikrinamos visos atkarpos. Dvimatė grafika, atkirtimai 5
Coheno-Sutherlando algoritmas Jeigu visos atkarpos negalima nei atmesti, nei priimti, atkarpa ra skaidoma į dalis taip, kad viena iš jų būtų atmesta. Nustatoma briauna, kurią atkarpa kerta. Tikrinti briaunas visuomet ta pačia tvarka Pvz. viršus, apačia, kairė, dešinė Coheno-Sutherlando algoritmas Apskaičiuojamas atkarpos susikirtimo su ta briauna taškas. Kaip? C D E A B C D E A B Coheno-Sutherlando algoritmas Atkarpa, aprašta taškais (x 1, 1 ), (x 2, 2 ) kerta vertikalią vaizdavimo srities briauną taške T(x briauna, susikirtimo ) susikirtimo = 1 + m (x briauna x 1 ), m = ( 2-1 )/(x 2 -x 1 ) Atkarpa, aprašta taškais (x 1, 1 ), (x 2, 2 ) kerta horizontalią briauną taške (x susikirtimo, briauna ) x susikirtimo = x 1 + ( briauna 1 )/m, m = ( 2-1 )/(x 2 -x 1 ) Coheno-Sutherlando algoritmo apžvalga Atkarpų testavimui naudojamas 4 bitų kodas Algoritmas efektviausias, kai atkarpos arba pilnai priklauso vaizdavimo sričiai, arba ne. Reikia skaičiuoti atkirtimus ir nematomoms atkarpų dalims Kai kuriais atvejais atkarpos atkertamos po keletą kartų Yra ir efektvesnių atkirtimo algoritmų... Dvimatė grafika, atkirtimai 6
Atkarpų atkirtos algoritmų palginimas Cohen-Sutherland Geriausiai tinka, kai daugeliui atkarpų tinka pirminio priėmimo ar atmetimo testas. Daliniai atvejai ra imlūs skaičiavimams. Crus-Beck Skaičiavimams naudojamos parametrinės lgts. Paprasta paskaičiuoti sankirtos taško t parametrą. Atkirtimo taškas atkarpai nustatomas per 1 kartą. Algoritmas neatlieka pirminio testavimo. Geriausiai tinka, kai daugeliui atkarpų netinka pirminis atmetimo priėmimo testas Liang-Barsk: Optimizuotas Crus-Beck algoritmas Nicholl: Pats greičiausias, tačiau neatlieka atkirtos trimatėje erdvėje Daugiakampių atkirta Daugiakampių atkirta ra žmiai sudėtingesnė už atkarpų atkirtą Įėjimas: daugiakampis Išėjimas: pradinis daugiakampis, naujas daugiakampis, arba nieko Kuriais atvejais galima pilnai priimti arba atmesti daugiakampį, sudartą iš atkarpų? Daugiakampių atkirta Kas gali nutikti trikampiui atkirtos atveju? Galimi atvejai: Septnias... Daugiakampių atkirta trikampis trikampis trikampis keturkampis trikampis 5-kampis Kiek daugiausiai briaunų gali turėti apkarptas trikampis? Dvimatė grafika, atkirtimai 7
Sudėtingesnis atvejis: Daugiakampių atkirta Sudėtingesnis atvejis: Daugiakampių atkirta Neiškilus daugiakampis keletas daugiakampių Daugiakampių atkirtimai, Sutherlando-Hodgemano atkirtimai Daugiakampis analizuojamas kiekvienos vaizdavimo srities briaunos atžvilgiu atskirai Atkirta vkdoma naudojant vaizdavimo srities briaunos lgtį Sutherlando-Hodgemano atkirtimai Kiekviena vaizdavimo srities briauna ra analizuojama atskirai, iš eilės Daugiakampis ra atkertamas kiekvienos jų atžvilgiu Apėjus visas briaunas gaunamas apkarptas daugiakampis Dvimatė grafika, atkirtimai 8
Kiekviena vaizdavimo srities briauna ra analizuojama atskirai, iš eilės Daugiakampis ra atkertamas kiekvienos jų atžvilgiu Apėjus visas briaunas gaunamas apkarptas daugiakampis Kiekviena vaizdavimo srities briauna ra analizuojama atskirai, iš eilės Daugiakampis ra atkertamas kiekvienos jų atžvilgiu Apėjus visas briaunas gaunamas apkarptas daugiakampis Kiekviena vaizdavimo srities briauna ra analizuojama atskirai, iš eilės Daugiakampis ra atkertamas kiekvienos jų atžvilgiu Apėjus visas briaunas gaunamas apkarptas daugiakampis Kiekviena vaizdavimo srities briauna ra analizuojama atskirai, iš eilės Daugiakampis ra atkertamas kiekvienos jų atžvilgiu Apėjus visas briaunas gaunamas apkarptas daugiakampis Dvimatė grafika, atkirtimai 9
Kiekviena vaizdavimo srities briauna ra analizuojama atskirai, iš eilės Daugiakampis ra atkertamas kiekvienos jų atžvilgiu Apėjus visas briaunas gaunamas apkarptas daugiakampis Kiekviena vaizdavimo srities briauna ra analizuojama atskirai, iš eilės Daugiakampis ra atkertamas kiekvienos jų atžvilgiu Apėjus visas briaunas gaunamas apkarptas daugiakampis Kiekviena vaizdavimo srities briauna ra analizuojama atskirai, iš eilės Daugiakampis ra atkertamas kiekvienos jų atžvilgiu Apėjus visas briaunas gaunamas apkarptas daugiakampis Kiekviena vaizdavimo srities briauna ra analizuojama atskirai, iš eilės Daugiakampis ra atkertamas kiekvienos jų atžvilgiu Apėjus visas briaunas gaunamas apkarptas daugiakampis Dvimatė grafika, atkirtimai 1
Algoritmo įėjimai ir išėjimai: Įėjimas: daugiakampį sudarančių primitvų viršūnių sąrašai Išėjimas: daugiakampį sudarančių primitvų viršūnių sąrašai po apkarpmų, susidedantis iš senų arba naujai suformuotų viršūnių Algoritmo etapai: Iš eilės po vieną nagrinėjamos daugiakampio briaunos Nagrinėjamos viršūnės padėtis ra p Prieš tai nagrinėtos viršūnės padėtis s. Viršūnė galėjo būti ir naujai sukurta. Kiekvienai daugiakampio briaunai galimi keturi skirtingi atvejai: s ra plokštumos vidinėje pusėje, o p taip pat vidinėje pusėje Viršūnė p įtraukiama į rezultatų sąrašą s jau buvo įtraukta į sąrašą vidus išorė s p pridedama p s ra plokštumos vidinėje pusėje, o p išorinėje pusėje Surandamas susikirtimo taškas i Viršūnė i įtraukiama į rezultatų sąrašą vidus išorė s ra plokštumos išorinėje pusėje, p taip pat išorinėje pusėje Viršūnė neįtraukiama į rezultatų sąrašą vidus išorė p s p s i viršūnė neįtraukiama Dvimatė grafika, atkirtimai 11
s ra plokštumos išorinėje pusėje, o p vidinėje pusėje Nustatomas sankirtos taškas i Viršūnė i įtraukiama į rezultatų sąrašą Viršūnė p įtraukiama į rezultatų sąrašą vidus išorė s p i viršūnė p viršūnė Dvimatė grafika, atkirtimai 12