Máté: Számítógépes grafika alapjai

Hasonló dokumentumok
Látható felszín algoritmusok

Máté: Számítógépes grafika alapjai

Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon) b) Minden belső pont kirajzolásával (kitöltött)

Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon)

Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon)

Láthatósági kérdések

3D koordináta-rendszerek

SZE, Doktori Iskola. Számítógépes grafikai algoritmusok. Összeállította: Dr. Gáspár Csaba. Felületmegjelenítés

(Solid modeling, Geometric modeling) Testmodell: egy létező vagy elképzelt objektum digitális reprezentációja.

Cohen-Sutherland vágóalgoritmus

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

9. Írjuk fel annak a síknak az egyenletét, amely átmegy az M 0(1, 2, 3) ponton és. egyenessel;

Transzformációk, amelyek n-dimenziós objektumokat kisebb dimenziós terekbe visznek át. Pl. 3D 2D

Elengedhetetlen a játékokban, mozi produkciós eszközökben Nélküle kvantum hatás lép fel. Az objektumok áthaladnak a többi objektumon

Középpontos hasonlóság szerkesztések

Koordináta geometria III.

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások

Geometriai algoritmusok

x = cos αx sin αy y = sin αx + cos αy 2. Mi a X/Y/Z tengely körüli forgatás transzformációs mátrixa 3D-ben?

VEKTOROK. 1. B Legyen a( 3; 2; 4), b( 2; 1; 2), c(3; 4; 5), d(8; 5; 7). (a) 2a 4c + 6d [(30; 10; 30)]

Máté: Számítógépes grafika alapjai

Vektorgeometria (1) First Prev Next Last Go Back Full Screen Close Quit

Transzformációk. Szécsi László

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások

9. előadás. Térbeli koordinátageometria

Analitikus térgeometria

egyenletrendszert. Az egyenlő együtthatók módszerét alkalmazhatjuk. sin 2 x = 1 és cosy = 0.

Skaláris szorzat: a b cos, ahol α a két vektor által bezárt szög.

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások

Ferde kúp ellipszis metszete

Számítógépes Grafika mintafeladatok

Hajder Levente 2018/2019. II. félév

Koordináta-geometria feladatok (emelt szint)

Hajder Levente 2014/2015. tavaszi félév

Koordináta-geometria feladatgyűjtemény

Transzformációk. Grafikus játékok fejlesztése Szécsi László t05-transform

Matematika 11 Koordináta geometria. matematika és fizika szakos középiskolai tanár. > o < szeptember 27.

Klár Gergely 2010/2011. tavaszi félév

KOORDINÁTA-GEOMETRIA

A tér lineáris leképezései síkra

Geometria. a. Alapfogalmak: pont, egyenes, vonal, sík, tér (Az alapfogalamakat nem definiáljuk)

Koordinátageometria. M veletek vektorokkal grakusan. Szent István Egyetem Gépészmérnöki Kar Matematika Tanszék 1

Máté: Számítógépes grafika alapjai

10. Koordinátageometria

Vektorok és koordinátageometria

Összeállította: dr. Leitold Adrien egyetemi docens

Egyenes mert nincs se kezdő se végpontja

Forgáshenger normálisának és érintősíkjának megszerkesztése II/1

Geometria 1 normál szint

Koordináta-geometria. Fogalom. Jelölés. Tulajdonságok, definíciók

Az egyenes és a sík analitikus geometriája

Nagy András. Feladatok a koordináta-geometria, egyenesek témaköréhez 11. osztály 2010.

Koordinátageometriai gyakorló feladatok I ( vektorok )

Tartalom. Tartalom. Hajder Levente Szakasz raszterizálása. 2017/2018. II. félév. Poligon raszterizáció.

2014/2015. tavaszi félév

MINTAFELADATOK. 1. feladat: Két síkidom metszése I.33.,I.34.

Helyvektorok, műveletek, vektorok a koordináta-rendszerben

Termék modell. Definíció:

Infobionika ROBOTIKA. X. Előadás. Robot manipulátorok II. Direkt és inverz kinematika. Készült a HEFOP P /1.0 projekt keretében

Lineáris algebra mérnököknek

8. előadás. Kúpszeletek

Koordináta-geometria feladatgyűjtemény (A feladatok megoldásai a dokumentum végén találhatók)

Az egyenlőtlenség mindkét oldalát szorozzuk meg 4 16-al:

Klár Gergely

KRISTÁLYOK GEOMETRIAI LEÍRÁSA

KOVÁCS BÉLA, MATEMATIKA I.

λ 1 u 1 + λ 2 v 1 + λ 3 w 1 = 0 λ 1 u 2 + λ 2 v 2 + λ 3 w 2 = 0 λ 1 u 3 + λ 2 v 3 + λ 3 w 3 = 0

Számítási feladatok a Számítógépi geometria órához

Segédlet: Főfeszültségek meghatározása Mohr-féle feszültségi körök alkalmazásával

1. Legyen egy háromszög három oldalának a hossza a, b, c. Bizonyítsuk be, hogy Mikor állhat fenn egyenlőség? Kántor Sándorné, Debrecen

EGY ABLAK - GEOMETRIAI PROBLÉMA

(a b)(c d)(e f) = (a b)[(c d) (e f)] = = (a b)[e(cdf) f(cde)] = (abe)(cdf) (abf)(cde)

Koordinátageometria. , azaz ( ) a B halmazt pontosan azok a pontok alkotják, amelynek koordinátáira:

Érettségi feladatok: Koordináta-geometria 1/5

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉP SZINT. Koordináta-geometria

A program a köröket és köríveket az óramutató járásával ellentétes irányban rajzolja meg.

Koordináta-geometria feladatok (középszint)

A kör. A kör egyenlete

Hasonlóság 10. évfolyam

Lengyelné Dr. Szilágyi Szilvia április 7.

Síkbeli egyenesek. 2. Egy egyenes az x = 1 4t, y = 2 + t parméteres egyenletekkel adott. Határozzuk meg

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Geometria III.

5 1 6 (2x3 + 4) 7. 4 ( ctg(4x + 2)) + c = 3 4 ctg(4x + 2) + c ] 12 (2x6 + 9) 20 ln(5x4 + 17) + c ch(8x) 20 ln 5x c = 11

Koordináta - geometria I.

Érettségi feladatok Koordinátageometria_rendszerezve / 5

ANALÍZIS II. Példatár

Gyakorló feladatok. 2. Matematikai indukcióval bizonyítsuk be, hogy n N : 5 2 4n n (n + 1) 2 n (n + 1) (2n + 1) 6

2. Adott a valós számok halmazán értelmezett f ( x) 3. Oldja meg a [ π; π] zárt intervallumon a. A \ B = { } 2 pont. függvény.

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉP SZINT Koordináta-geometria

Regresszió számítás. Tartalomjegyzék: GeoEasy V2.05+ Geodéziai Kommunikációs Program

= Y y 0. = Z z 0. u 1. = Z z 1 z 2 z 1. = Y y 1 y 2 y 1

I. Vektorok. Adott A (2; 5) és B ( - 3; 4) pontok. (ld. ábra) A két pont által meghatározott vektor:

Vektorterek. =a gyakorlatokon megoldásra ajánlott

1. feladat Bizonyítsuk be, hogy egy ABCD húrnégyszögben AC BD

Algoritmusok raszteres grafikához

2. ELŐADÁS. Transzformációk Egyszerű alakzatok

Hajder Levente 2016/2017.

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Vektorok I.

EGYBEVÁGÓSÁGI TRANSZFORMÁCIÓK TENGELYES TÜKRÖZÉS

Oktatási Hivatal. 1 pont. A feltételek alapján felírhatók az. összevonás után az. 1 pont

Átírás:

LÁTHATÓ FELÜLETEK MEGHATÁROZÁSA LÁTHATÓ FELÜLETEK MEGHATÁROZÁSA szolgáló általános algoritmusok Adott 3D tárgyak egy halmaza, és egy projekció specifikációja. Mely vonalak és felületek lesznek láthatók? Melyek lesznek takarva? Nehéz feladat (időigényes) Kétféle megközelítés: LÁTHATÓ FELÜLETEK MEGHATÁROZÁSA 1. for minden képpontra do begin határozzuk meg azt a tárgyat, amelyet a nézőpontból a képponton keresztül húzott egyenes leghamarabb metsz; rajzoljuk ki a képpontot a megfelelő színben end A szükséges idő: O(np) n: a tárgyak száma p: a képpontok száma LÁTHATÓ FELÜLETEK MEGHATÁROZÁSA 2. for minden tárgyra do begin határozzuk meg a tárgynak azokat a részeit, amelyek nincsenek takarásban saját maga vagy más tárgyak miatt; a kiválasztott részeket rajzoljuk ki a megfelelő színben end A szükséges idő: O(n 2 ) plotterrel y = f (x,z) Tegyük fel, hogy f-et egy m x n-es Y mátrixszal közelíthetjük. Drótvázas rajzot készíthetünk szakaszonként lineáris görbéket előállítva x és z irányban is. Keressünk olyan algoritmust, amely a takart vonalakat nem rajzolja ki. 12_látható_felületek 1

1. Ha csak az x-tengellyel párhuzamos egyenesek menti értékeket kötjük össze: Haladjunk elölről hátra (a távolabbi vonalak irányába, csak arra kell vigyázni, hogy a már megrajzolt látható felületeket ne "keresztezzük". Elegendő az eddig rajzolt vonalak "sziluettjét" őrizni: csak az látható az új vonalból, ami ez alatt vagy fölött van. Tároljuk minden törésponthoz az eddig rajzolt vonalak maximális és minimális y értékét (sziluett), és az új vonal y értékeinek megfelelően módosítsuk Horizont-vonal algoritmus Ha az új vonal valamely szakaszának mindkét végpontja láthatatlan, akkor a szakasz sem látszik. A részlegesen takart szakaszoknál metszéspontot kell számolni. A szakasz nem törésponttól töréspontig, hanem a sziluett töréspontjától töréspontjáig terjed! A sziluett töréspontjai sűrűsödnek! 2. Ha csak a z-tengellyel párhuzamos egyenesek menti értékeket kötjük össze: hasonló algoritmus 12_látható_felületek 2

Drótvázas rajz konstans x- és z-menti görbékből x-menti kép z-menti kép A két kép egymásra másolva A korrekt kép Nem lehet egyszerűen egymásra rakni a két képet Először az x tengellyel párhuzamosak vonalakat közelről távolra haladva rajzoljuk (mint korábban), de a z irányú vonalakat szakaszonként (közelről távolra haladva) a szakasz közelebbi végpontjának z értékéhet tartozó korábbi sziluettet használva. Ezeket az eljárásokat általában csak akkor használjuk, ha a rajzolandó vonalak x = konstans vagy z = konstans menti értékekből állnak) A tárgyak takarják-e egymást? Mely tárgy látható? Pontokra: P 1 = (x 1, y 1, z 1 ) és P 2 = (x 2, y 2, z 2 ); Takarja-e egyik a másikat? Ha ugyanazon a vetítési sugáron vannak, akkor a közelebbi takarja a másikat, különben nem. Nehéz probléma Mélységbeli összehasonlítás Helye: a normalizálási transzformáció után, ekkor a.párhuzamos vetítésnél: a vetítési sugarak párhuzamosak a z-tengellyel, ekkor P 1 és P 2 ugyanazon a vetítési sugáron van, ha x 1 = x 2 és y 1 = y 2 b.perspektív vetítésnél: a vetítési sugarak COV-ből indulnak ki, ekkor P 1 és P 2 ugyanazon a vetítési sugáron van, ha x 1 / z 1 = x 2 / z 2 és y 1 / z 1 = y 2 / z 2 Perspektív vetítésnél azt a transzformációt használjuk, amely a perspektív kanonikus térfogatot átviszi párhuzamos kanonikus térfogatba perspektív párhuzamos kanonikus térfogat 12_látható_felületek 3

Perspektív kanonikus térfogatot párhuzamos kanonikus térfogatba transzformáló mátrix: Ekkor a vetítési sugarak már párhuzamosak a z-tengellyel. Egyszerűbben végezhető a vágás z Tárgyak kiterjedése, határoló téglalapok, testek y x Határoló-téglalap teszt Ha a határoló téglalapok nem fedik egymást, akkor a vetületek sem fedik egymást, különben további vizsgálat szükséges 1-dimenziós kiterjedés (határoló intervallum) minmax-teszt: z min2 A kiterjedés minimális és 2 z max2 maximális értékeinek z min1 összehasonlításával döntjük el a takarást z max1 z A kiterjedés meghatározása: a tárgy (csúcs)pontjaihoz tartozó koordináták min. és max. értékeiből 1 x Hátra néző lapok kiválogatása Tegyük fel, hogy poligon határú síklapokkal határolt a tárgy, és adottak a síklapoknak a tárgyból kifelé mutató normálisai. Ekkor azok a lapok nem láthatók, amelyek normálisai a "megfigyelőtől ellentétes irányba mutatnak x z Azonosításuk: n : normális (n x,n y,n z ) v : COV-ből a poligon tetszőleges pontjába mutat Ha n v < 0 előre néz > 0 hátra néz = 0 csak az éle látszik Speciálisan: Az (x,y) síkra történő ortografikus vetítés esetén < 0 hátra néz n z > 0 előre néz = 0 csak az éle látszik Térbeli partícionálás Észrevétel: nem minden tárgynak van minden vetítési sugárral metszéspontja (pl. távol vannak, más irány) osszuk fel (partícionáljuk) a képernyőt Meghatározzuk, hogy mely tárgyak vetülete van benne a megfelelő részben (partícióban) és csak azokkal keresünk metszéspontokat 12_látható_felületek 4

Ez jó módszer, ha a tárgyak vetületei egyenletesen oszlanak el a teljes képernyőn, különben különböző méretű partíciókat érdemes készíteni: kisebb partíciót ott, ahol több tárgy vetülete van Terület-osztó algoritmus látható meghatározására "oszd meg és uralkodj" Ha egy területen könnyen eldönthető, hogy melyik poligon jeleníthető meg, akkor azt rajzoljuk ki, különben osszuk fel a területet, és alkalmazzuk az eljárást a rész területekre felszín 4 lehetőség egy poligon és egy téglalap alakú terület között: Mikor dönthető el könnyen, hogy mi rajzolható? Tartalmazó poligon Metsző poligon Tartalmazott poligon Idegen poligon 1. Minden poligon idegen a területtől (háttér) 2. Egyetlen metsző vagy tartalmazott poligon (háttér + pásztázással poligon) 3. Egyetlen tartalmazó poligon (rajz a poligon színével) 4. Van olyan tartalmazó poligon, amelyik a többi előtt van. Hierarchikus struktúrák alkalmazása Z - buffer vagy mélység puffer algoritmus (kép alapú) pl. épület 1. emelet 2. emelet 3. emelet 1. lakás 2. lakás F : Z : kép-puffer (képpontok tárolására) kezdeti értéke: háttérszín mélység-puffer (minden pontban a megfelelő z érték), kezdeti értéke: z-max (hátsó vágási sík) Ha a vetítési sugár nem metszi az épületet, akkor az emeleteit és az emeletek lakásait sem (tehát nem kell vizsgálni azokat) Pásztázás közben F-be és Z-be bekerül az új pont, ha nincs messzebb, mint az eddigi z érték. 12_látható_felületek 5

Z-buffer algoritmus Z-buffer algoritmus A hátsó vágási sík a z = 0 Kép Z-buffer algoritmus z-buffer Z-buffer algoritmus Tulajdonságai: Nincs tárgyak rendezése, összehasonlítása, metszéspontok számítása Poligononként végezhető el, ha nincsenek átható poligonok, Nem csak poligonokra jó, Nagy helyigény, de lehet sávonként haladni, Könnyű implementálni, Könnyű egy újabb tárgy képét hozzávenni Lista-prioritás algoritmusok Meghatározzák a tárgyaknak azt a sorrendjét, ami a kép kirajzolásához kell. Pl.: Ha a z értékekben nincs átfedés, akkor a tárgyakat növekvő z értékük szerint kell rendezni, és utána távolról közelre haladva megjeleníteni. Néha még akkor is lehet ilyen sorrendet megadni, ha a z értékekben van átfedés, de nem mindig Ilyenkor szétvágjuk a tárgyakat és a darabokat rendezzük sorba 1. Mélység szerint rendező algoritmus Lépések: 1. Rendezzük a poligonokat legtávolabbi z koordinátájuk szerint 2. Vágjuk szét az átfedő poligonokat (ha szükséges) 3. Pásztázzunk minden poligont hátulról előre haladva Ha a poligonok párhuzamos síkokban fekszenek, akkor a 2. lépés kimaradhat 12_látható_felületek 6

Festő algoritmus Tegyük fel hogy a P poligon legtávolabbi z koordinátája szerint a lista végén van. Pásztázás előtt össze kell hasonlítani a lista azon Q elemeivel, amelyeknek z irányú kiterjedése átfedi P z irányú kiterjedését, és meg kell vizsgálni, hogy P átfedi-e Q-t? Látható elszín algoritmusok P átfedi-e Q-t? 1. ha P és Q x kiterjedése nem átfedő, akkor nem; 2. ha P és Q y kiterjedése nem átfedő, akkor nem; 3. ha COV-ból nézve P teljes terjedelmében a Q túlsó oldalán van, akkor nem; 4. ha COV-ból nézve Q teljes terjedelmében P-nek az innenső oldalán van, akkor nem; 5. ha P és Q (x,y) síkra való vetülete nem átfedő, akkor nem különben (hátha Q-t kell előbb rajzolni): 3 ha COV-ból nézve Q teljes terjedelmében a P sík túlsó oldalán van, akkor P Q csere 4 ha COV-ból nézve P teljes terjedelmében Q-nak az innenső oldalán van, akkor P Q csere különben P-t vagy Q-t fel kell darabolni a másik síkkal, és a darabokat kell beilleszteni a listába Végtelen ciklust eredményezne, ezért megjelöljük azokat a poligonokat, amelyeket egyszer már a lista végére tettünk, és ha újra előjönnek, akkor darabolunk 2. Bináris tér-partícionáló fa algoritmus Ötlet: Ha van olyan sík, amely a tárgyakat (teljes egészükben) két féltérbe osztja, akkor a COV-t tartalmazó féltér tárgyait nem takarhatják el a másik féltér tárgyai BSP fa: Csomópontok - poligonok A csomóponthoz tartozó poligon síkjával darabolhatjuk a többi poligont, és azok darabjaival folytathatjuk a fát bal oldalra: azok a poligonok, amelyek elöl vannak (később kell rajzolni) jobb oldalra: azok a poligonok, amelyek hátul vannak (korábban kell rajzolni) Bináris tér-partícionálás 12_látható_felületek 7

Pásztázó vonal algoritmus látható felszín meghatározására (hasonló a poligonok kitöltését végző algoritmushoz) γ +1 γ β α A D B E C Vízszintesen pászázunk Most több poligon lehet F ÉT (élek táblázata): A poligonok nem vízszintes éleit tartalmazza az élek kisebbik y-koordinátája szerint növekvő, ezen belül az élek meredeksége szerint csökkenő sorrendbe rendezve (a vízszintes éleket kihagyjuk) Egy elem részei: - a kisebb y-koordinátájú csúcspont x-koordinátája - a másik csúcspont y-koordinátája - x növekménye: Δ x = 1/m - poligon azonosító (több poligon lehet) γ +1 γ β α PT (poligonok táblázata): egy elem részei: - azonosító - a sík egyenletének együtthatói a sík egyenlete: Ax + By + Cz + D = O - árnyalati/színezési információ - ki-be jelző (kezdő érték: ki) A D B E C F ÉT:AB AC FD FE CB DE PT: ABC DEF AÉT (aktív élek táblázata): Balról jobbra, alulról felfelé haladva α: AB, AC AB-nél be-, AC-nél kikapcsolva ABC AB-től AC-ig ABC színe β: AB, AC, FD, FE E ABC DEF be ki be ki γ + 1: AB, DE, CB, FE ABC be ki γ +1 γ β α A DEF be ki A síkok egyenletéből dönthető el, hogy melyik van közelebb D B C F Látható felszín (OpenGL) OpenGL-ben: a mélységi- vagy z-buffer algoritmus A mélységbeli összehasonlítást glenable (GL_DEPTH_TEST) gldisable(gl_depth_test) // engedélyezi // tiltja Ha a poligonokat felvágjuk a metszeteik mentén, akkor nem kell minden pontban megvizsgálni a poligonok sorrendjét, elegendő csak akkor, ha egy "takaró" poligon véget ér. 12_látható_felületek 8

Sokszögek oldalai (OpenGL) Sokszögek (elülső és hátulsó) oldalai OpenGL-ben: Elülső oldal az, amelyen a csúcspontok az óramutató járásával ellentétes irányban vannak megadva void glpolygonmode(enum face, enum mode); face: GL_FRONT_AND_BACK, GL_FRONT, GL_BACK Megmondja, hogy a poligon mindkét, elülső vagy hátulsó oldalát kell rajzolni mode: Megmondja, hogy GL_POINT csak a poligon csúcsait, GL_LINE határvonalát kell kirajzolni, vagy GL_FILL ki is kell tölteni (alapértelmezés) Sokszögek oldalai (OpenGL) Elülső és hátulsó oldalak explicit megadása: glfrontface(glenum mode); mode: GL_CW az az oldal lesz elülső oldal, amelyen a csúcspontokat az óramutató járásával megegyező irányban adtuk meg, GL_CCW az ellenkezője. Sokszögek oldalai (OpenGL) A sokszög meghatározott oldalán letiltja a világítási, árnyalási és szín-számítási műveleteket (láthatatlan oldal) glcullface(glenum mode); mode: GL_FRONT, GL_BACK 3D geometriai formák drótvázas megjelenítése (OpenGL) #include<glut.h> void glutwirecube(gldouble size); size : a kocka élhossza (a kocka középpontja az origóban lesz) A culling-ot glenable (GL_CULL_FACE) engedélyezhetjük illetve gldisable(gl_cull_face) tilthatjuk 3D geometriai formák drótvázas megjelenítése (OpenGL) void glutwiresphere(gldouble radius, GLint slices, Glint stacks); radius: a gömb sugara, slices: a z-tengely körüli beosztások (hosszúsági körök) száma, stacks: a z-tengely menti beosztások (szélességi körök) száma A középpont az origóban lesz 3D geometriai formák drótvázas megjelenítése (OpenGL) void glutwirecone(gldouble base, GLdouble height,glint slices, GLint stacks); base: a kúp alapjának sugara, height : a kúp magassága, slices: a z-tengely körüli beosztások száma, stacks : a z-tengely menti beosztások száma 12_látható_felületek 9

3D geometriai formák drótvázas megjelenítése (OpenGL) void glutwiretorus(gldouble innerradius,gldouble outerradius, GLint nsides, GLint rings); innerradius: a tórusz belső sugara, outerradius: a tórusz külső sugara, nsides: a radiális részek oldalainak száma, rings: a tórusz radiális beosztásainak száma. 12_látható_felületek 10