Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010 2D képszintézis 4. előadás.

Hasonló előadás


Az előadások a következő témára: "Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010 2D képszintézis 4. előadás."— Előadás másolata:

1 Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010 2D képszintézis 4. előadás

2 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Számítógépes grafika feladata képszintézis Virtuális világ modell modellezés Metafórák: 2D rajzolás világ = sík

3 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME 2D képszintézis Cél: objektumok képernyőre transzformálása és a nézetbe eső részek megjelenítése Megjelenítés = a megfelelő pixelek kiszínezése Kiindulás: lokális koordináta rendszerekben definiált objektumok Fő feladatok: Objektumok transzformálása a világkoord.rsz-be Ablak téglalap elhelyezése (2D kamera) A képernyő koordinátarendszerébe való vetítés A geometriai elemeket közelítő pixelek meghatározása

4 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME 2D képszintézis lépései 1. Vektorizáció: A virtuális világban tárolt szabadformájú elemeket (például körívek, interpolációs vagy spline görbék) pontok, szakaszok és poligonok halmazával közelítjük. 2. Transzformáció: a lokális koord.rsz →világ koord.rsz → képernyő koord.rsz, homogén lineáris transzformáció 3. Vágás: csak az jeleníthető meg, ami a nézet téglalapján belül van, 4. Pásztakonverzió, avagy raszterizáció: geometriai elemek közelítése pixelek átszínezésével

5 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME 2D képszintézis lépései

6 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Vektorizáció [0,1]: 0, t 1, t 2,..., t n, 1 r 1 =r(0), r 2 = r(t 2 ), …, r n = r(1) r1r1 r(t)r(t) r2r2 rn rn A szabadformájú elemek közelítése pontokkal, szakaszokkal vagy poligonokkal Homogén lineáris transzformáció és vágás nem változtatja meg az elemek típusát Felosztás finomsága paraméter Pl néhány pixel hosszú szakaszok nem növelik jelentősen a raszterizáció amúgy is jenlévő hibáját

7 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Modellezési transzformáció p=(x, y) = o +  u +  v u x u y 0 v x v y 0 o x o y 1 [x, y, 1] = [ , , 1]  TMTM u v o ,  ) (x, y) [0, 0, 1] [o x o y 1 ] [1, 0, 1] [o x +u x o y +u y 1 ] [0, 1, 1] [o x +v x o y +v y 1 ] S x 0 0 0 S y 0 0 0 1 cos  sin  0 -sin  cos  0 0 0 1 1 0 0 0 1 0 p x p y 1 p= [x,y] u=[u x,u y ] v=[v x,v y ]

8 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Ablak-nézet transzformáció (x, y) ablak nézet (X, Y) X = (x-w x ) v w /w w + v x Y = (y-w y ) v h /w h + v y (wx,wy)(wx,wy) w whwh (vx,vy)(vx,vy) vwvw vhvh v w /w w 0 0  v h /w h 0 v x -w x v w /w w v y -w y v h /w h 1 [X, Y, 1] = [x, y, 1] TVTV

9 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Összetett transzformáció T V nézeti transzformáció számítása for each object o T M előállítása T C = T M T V for each point of object o: transzformáció T C –vel enfor endfor [X, Y, 1] = ([ , , 1] T M ) T V [X, Y, 1] = [ , , 1] (T M T V ) = [ , , 1] T C

10 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Vágás Ablakra vs. nézetre vágás Vektorizáció miatt: pont, szakasz, poligon Pontok vágása x > x min, x y min, y < y max x min x max y min y max

11 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Szakasz vágás félsíkra x1, y1x1, y1 x2, y2x2, y2 xi, yixi, yi Esetek (példa: x max egyenes): minkét végpont jó oldalon: triviális elfogadás minkét végpont rossz oldalon: triviális eldobás végpontok ellentétes oldalon: metszéspont számítás kell x1, y1x1, y1 x2, y2x2, y2 x max x1, y1x1, y1 x2, y2x2, y2

12 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Szakasz vágás félsíkra: metszéspont számítás x(t) = x 1 + (x 2 - x 1 )t, y(t) = y 1 + (y 2 - y 1 )t x = x max Metszéspont: x max = x 1 + (x 2 - x 1 )t  t = (x max -x 1 )/(x 2 -x 1 ) x i = x max y i = y 1 + (y 2 - y 1 ) (x max -x 1 )/(x 2 -x 1 ) x1, y1x1, y1 x2, y2x2, y2 x max xi, yixi, yi

13 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Cohen-Sutherland vágás 0000 100110001100 00010100 00110010 0110 C2C2 Kód=C 3 C 2 C 1 C 0 C0C0 C1C1 C3C3

14 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME #define Code(p) ((p.x < xmin) + ((p.y < ymin)<<1) + \\ ((p.x > xmax) ymax)<<3) bool LineClip(Vector& p1, Vector& p2) { for( ; ; ) { int c1 = Code(p1), c2 = Code(p2); if (c1 == 0 && c2 == 0) return true; if ((c1 & c2) != 0) return false; if ((c1 & 1)) p1 = IntersectX(p1, p2, xmin); else if ((c1 & 2)) p1 = IntersectY(p1, p2, ymin); else if ((c1 & 4)) p1 = IntersectX(p1, p2, xmax); else if ((c1 & 8)) p1 = IntersectY(p1, p2, ymax); else if ((c2 & 1)) p2 = IntersectX(p1, p2, xmin); else if ((c2 & 2)) p2 = IntersectY(p1, p2, ymin); else if ((c2 & 4)) p2 = IntersectX(p1, p2, xmax); else if ((c2 & 8)) p2 = IntersectY(p1, p2, ymax); } Cohen-Sutherland algoritmus

15 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Poligonok vágása Továbbra is: négy félsíkra vágás... Csúcspont belső pont: a vágott poligonnak is belső pontja Csúcspont külső pont: eldobhatjuk, de egy új csúcspont is létrejöhet, ha az aktuális él metszi a vágás egyenesét!

16 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Sutherland-Hodgeman poligonvágás PolygonClip(p[n]  q[m]) m = 0; for( i=0; i < n; i++) { if (p[i] belső) { q[m++] = p[i]; if (p[i+1] külső) q[m++] = Intersect(p[i], p[i+1], vágóegyenes); } else { if (p[i+1] belső) q[m++] = Intersect(p[i], p[i+1], vágóegyenes); }

17 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Konkáv poligonok vágása Konkáv poligon több részre eshet szét Kétszeres él = nem él valójában q[0] q[1] q[2] q[3] q[4] q[5] q[6] q[7]

18 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Raszterizáció Alakzatok formáinak közelítése: pixelek átszínezése útján Alapegység: pixel egy geometria objektumhoz több ezer/millió pixel tartozhat Következmény: az elvárt sebesség nagyságrendileg haladja meg az eddigi műveleteket!

19 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Pászta konverzió (raszterizáció) transzformációvágás raszterizációPixel műveletek rasztertár model Geometriai primitívek: 0.1-1 microsec / primitív Pixelek 10-50 nanosec / pixel

20 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Szakasz rajzolás Egyenes egyenlete: y = mx + b Egyeneshúzás (0 < m < 1): m=(y2-y1)/(x2-x1) b=y1-x1*(y2-y1)/(x2-x1) for( x = x1; x <= x2; x++) { Y = m*x + b; y = Round( Y ); write( x, y ); } x1x1 x2x2 Példa: enyhén emelkedő egyenes: 0 < m < 1: minden oszlopban 1 pixel Elvárások: a szakasz (1) ne legyen lyukas (2) ne legyen túl vastag

21 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Inkrementális elv Y(X) kiszámítása Y(X) = F( Y(X-1) ) = Y(X-1) + dY/dX Szakasz rajzolás: Y(X) = mX + b = m(X-1)+b+m Y(X) = F( Y(X-1) ) = Y(X-1) + m Összeadás: fixpontos ábrázolás: y = Y 2 T T: hiba < 1 a leghosszabb műveletsornál N 2 -T log 2 N N: leghosszabb szakasz hossza round( y ): y+0.5-t csonkítjuk (= „tört” bitek levágása)

22 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME DDA szakaszrajzolás DDADrawLine(x1, y1, x2, y2) { m = (y2 - y1)/(x2 - x1) y = y1 + 0.5 FOR X = x1 TO x2 { Y = round(y)trunc(y) WRITE(X, Y, color) y = y+m }

23 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME DDA szakaszrajzoló hardver X számlálóy regiszter x1 m y1 0.5 =.1000000 XY  CLK

24 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Bresenham szakaszrajzoló algoritmus DDA: gyors, de a fixpontos ábrázolás és egészrész képzés eltolást (shift) igényel szakaszonként egyszer lebegőpontos osztás (m) Megoldás: Bresenham algorithmusa ( lásd tankönyv 103. oldal...

25 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Terület elárasztás működése Flood(x, y) { if (pixel[x][y] belső pont) { Write(x, y, color); Flood(x, y-1); Flood(x, y+1); Flood(x-1, y); Flood(x+1, y); } Belső pont = sötétkék 0 1 1 2 2 2 2 1 1 mag Cél: adott kezdeti pontból egy adott határvonal átlépése nélkül elérhető pixelek átszínezése

26 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Területkitöltés Geometriai reprezentáció alapján p1,p2,...,pn csúcsok p1-p2, p2-p3,...,pn-p1 élek Belső pixel páratlanszor metszünk élt, ha végtelenből jövünk végtelen: vágás után a nézet széle

27 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Területkitöltés p1 p2 p3 p4 y x1 x4x2x3 Feldolgozás: vízszintes pásztánként:

28 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Naív módszer: FillPolygonSlow(q, m) % q = [q[0],…,q[m-1]] for Y = 0 to Ymax do scanline = Y k=0 for e=0 to m-1 do if scanline a q[e] és q[e+1] között van then x[k++]=(q[e],q[e+1]) szakasz és a scanline metszéspontja endif endfor x[k] tömb rendezése for i=0 to k/2-1 do for X=x[2i] to x[2i+1] do Pixel(X,Y,Color(X,Y)) endfor end Nem hatékony, mert minden pásztánál minden élt figyelünk 

29 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Kitöltés gyorsítása Vizsgálatok csak az aktív élekre aktív élek frissítése a megelőző pásztából Metszéspontszámítás inkrementális elv szerint a megelőző pászta metszéspontjából: y x(y) Dx/Dy x(y+1)x(y+2) Dx/Dy y+1 y+2

30 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Aktív él lista ymax Dx/Dy x nextAETymax Dx/Dy x next ymin=0 ymin=1 ymin=1024 ymax Dx/Dy x1 next ET éltábla: előzetesen rendezzük valamennyi élet ymin érték szerint AET: aktív éltábla – az aktuális pásztánál releváns élek Metszéspont x koordinátája az aktuális pásztával

31 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Poligonkitöltés FillPolygonFast(q, m) % q = [q[0],…,q[m-1]] for Y = 0 to Ymax do for e=0 to m-1 do edge = (q[e],q[e+1]) if ymin(edge) == Y then Put_AET(edge) endfor for minden edge élre az AET-ben do if ymax(edge) >= Y then Delete_AET(edge) endfor Resort_AET for minden második l élre az AET-ben do for X=round(x[l]) to round(x[l+1]) to SetPixelColor(X,Y,Color(X,Y)) endfor for minden l élre az AET-ben do x[l]+=dx/dy endfor end

32 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME 2. rész - ANIMÁCIÓ képszintézis Virtuális világ modell modellezés Metafórák: 2D rajzolás világ = sík

33 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Animáció = időfüggés T 1 (t) T 2 (t) T V (t) Transzformációk mozgás alak szín megjelenítési attribútumok, stb kameranézet Nézeti transzformáció (kamera pozíció, orientáció, látószög, vágósík)

34 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Valós idejű animáció Óra inicializálás (t start ) do t = Óra leolvasás Nézeti transzformáció: T V = T V (t) for each object o: modellezési transzf T M, o = T M, o (t) endfor Képszintézis while (t < t end ) Legalább 15 ciklus másodpercenként

35 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Folyamatás mozgatás - OpenGL Követelmények: animáció folyamatosan fusson (azaz a felhasználó- nak ne kelljen minden lépésnél „léptetni”) a rendszer reagáljon a felhasználói beavatkozásra (pl leállítás, lövés…) nem jó egyszerű végtelen ciklus-hurok! Megoldás: olyan ciklus, amely felváltva hajt végre egy-egy lépést a rendszer eseménykezelő hurkából és a program szimulációs hurkából

36 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME GLUT Üresjárati eseménykezelő függvény: glutIdleFunc(myIdleFunc) Idő lekérdezés: glutGet(GLUT_ELAPSED_TIME) Minta program: long oldTime; void IdleFunc(void) { long newTime=glutGet(GLUT_ELAPSED_TIME); myStepFunction(newTime-oldTime); oldTime=newTime; }

37 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Képszintézis és megjelenítés Animációs hurok: képek előállítása és megjelenítése ciklikusan ismételve Inkrementális képszintézis eljárások villogáshoz vezethetnek (képet fokozatosan építjük fel) Megoldás: két külön rasztertár Egyikben készül a kép, míg a másikat jelenítjük meg Új képkocka megjelenítése: a két rasztertár gyors kicserélése Rasztertár 1. Rasztertár 2. monitor

38 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Dupla buffer animációhoz (GLUT) Rasztertár 1. Rasztertár 2. monitor glClear(GL_COLOR_BUFFER_BIT); rajzol… glutSwapBuffers( ); Inicializálás: glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);

39 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Valószerű mozgás Fizikai törvények: Newton törvény ütközés detektálás és válasz: impulzus megmaradás Fiziológiai törvények csontváz nem szakad szét meghatározott szabadságfokú ízületek bőr rugalmasan követi a csontokat Energiafelhasználás minimuma

40 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Newton törvény r(t) = r L T M (t) F/m = r = r L d 2 dt 2 d 2 dt 2 T M (t) Az erő rugalmas mechanizmuson keresztül hat, azaz folytonosan változik T M (t) C 2 folytonos m

41 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME T M (t): Mozgástervezés Követelmény: ált. C 2, néha (C 1,C 0 ) folytonosság Mozgás = a transzformációs elemek időbeli változtatása Tetszőleges pozíció+orientáció megadható az alábbi mátrixszal: De az orientáció (A mátrix) szabadsági foka csak 3! szabályos orientáció: sorvektorok egymásra merőleges egységvektorok a11  a12 a13 0 a21  a22 a23 0 a31  a32 a33 0 px py pz 1 T M (t)=

42 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME T M (t): Mozgástervezés T M (t) m átrixelemek nem függetlenek! Tervezés független paraméterek terében cos  sin  -sin  cos  1 pozíció: px, py, pz orientáció: , ,  cos  -sin  1 sin  cos  1 cos  sin  -sin  cos  1 px, py, pz, 1 p(t)=[px, py, pz, , ,  ](t) T M (t)=   

43 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Orientáció tervezés – gondok… Változó orientáció-animálás a , ,  csavaró- billentő-forduló szögek független interpolációjával PRO: minden pillanatban érvényes orientációt kapunk KONTRA: képzeletbeli tengelyek körül forgatunk, ezért a mozgás nem lesz valósszerű  a paraméterek egyenletes változtatása egyenetlen mozgást eredményez, a képzeletbeli tengelyek láthatóvá válnak megoldás: interpoláció kvaterniókkal  (érdeklődőknek részletek: Szirmay-Kalos László et. al. „Háromdimenziós grafika, animáció és játékfejlesztés” 312 oldal – lásd könyvtárban)

44 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Mozgástervezés a paramétertérben p(t) elemei ált. C 2, néha (C 1,C 0 ) folytonosak p(t) elemeinek a definíciója: görbével direkt módon (spline) képlettel: script animation pl: origóból (v x, v y ) kezdősebességgel kilőtt lövedék mozgása x(t)=v x t, y(t) = v y t - g t 2 /2 kulcsokból interpolációval: keyframe animation görbével indirekt módon: path animation mechanikai modellből az erők alapján: physical anim. mérésekből: motion capture animation

45 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Interpoláció: 3-d rendű spline t0t0 t1t1 titi t i+1 tntn r0r0 r1r1 riri r i+1 rnrn vivi v i+1 C 2 folytonosság követelményéből: spline Ismeretlen v i -k meghatározása: r i ’’(t i+1 )= r i+1 ’’(t i+1 ) + sebesség a kezdő és végpontban bonyolult lineáris egyenletrendszer megoldását igényli  Tervezési paraméterek alapján: Kohanek-Bartels, Catmull-Rom Feladjuk a C 2 folytonosság követelményét a görbeszegmensek kapcsolódási pontjaiban Legalább szép sima legyen a pálya… r (t) = a i (t- t i ) 3 + b i (t- t i ) 2 + c i (t- t i ) 1 + d i ha t i ≤t< t i+1 r(t i ) = r i, r(t i+1 ) = r i+1 r’(t i ) = v i r’(t i+1 ) = v i+1

46 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Catmull-Rom „spline” t0t0 t i-1 titi t i+1 tntn r0r0 r i-1 riri r i+1 rnrn v i = 1212 r i+1 - r i t i+1 - t i r i - r i-1 t i - t i-1 + vivi r (t) = a i (t- t i ) 3 + b i (t- t i ) 2 + c i (t- t i ) 1 + d i ha t i ≤t< t i+1 ai=ai= v i+1 +v i (t i+1 - t i ) 2 2(r i+1 - r i ) (t i+1 - t i ) 3 – bi=bi= 3(r i+1 – r i ) (t i+1 - t i ) 2 v i+1 + 2v i (t i+1 - t i ) – c i = v i d i = r i Sebességek előírása: r’(t i ) = v i r’(t i+1 ) = v i+1

47 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Pálya animáció: Transzformáció Explicit up vektorFrenet keretek: zm = r’(t)zm = r’(t) xm = zm  upxm = zm  r’’(t) =r’(t)  r’’(t) ym = zm  xmym = zm  x zm xm ym TM =TM = xm 0 (t) 0 ym 0 (t) 0 zm 0 (t) 0 r(t) 1 A függőleges, amerre az erő hat r(t) görbe: r(t)

48 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Fizikai animáció Erők (gravitáció, turbulencia stb.) Tömeg, tehetetlenségi nyomaték (F = ma) Ütközés detektálás (metszéspontszámítás) Ütközés válasz rugók, ha közel vannak impulzus megmaradás alapján

49 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Egy kis mechanika F(r,v,t) erő m for ( t = 0; t < T; t += dt) { F = Erők számítása a = F/m v += a ·dt if ( ÜtközésDetektál ) ÜtközésVálasz r += v ·dt } v n = CollisionNormal v’ v’ = [v - n(v·n)]-[n(v·n)·bounce] v Középpont helyzete: r+v ·t metszés: t* Ha t* < dt Collision ÜtközésDetektál ÜtközésVálasz dr/dt = v dv/dt = F(r,v,t)/m -n(v·n)

50 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Folytonos-Diszkrét ütközés detektálás pontra és féltérre r(t i ) r(t i+1 ) n ·(r(t) - r0) = 0 n ·(r(t) - r0) > 0 n ·(r(t) - r0) < 0 v Sugár indul: r+v·t metszés: t* Ha t* < dt Collision

51 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Ferde hajítás 1 v(0)=v 0 2 F g =mg 3 4 5 6 7 Mozgás+ gravitáció: v(t+  t)=v(t)+g∙  t r(t+  t)=r(t)+v(t)∙  t  v=g∙  t F0F0 Rugalmas ütközés: lásd előbb 8 F g =mg …

52 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Vízszintes rugón mozgó labda F(t)=-  l(t)∙D a(t)=F(t)/m v(t+  t)=v(t)+a(t)∙  t r(t+  t)=r(t)+v(t)∙  t  l(t) Rugó center Labda D: rugóállandó  l(t): megnyúlás t-ben

53 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Golyók ütközése v1v1 v2v2 Lendület megmaradás: m 1 v 1 +m 2 v 2 =m 1 u 1 +m 2 u 2 Mechanikai energia megmaradás 1/2 m 1 v 1 2 + 1/2 m 2 v 2 2 = 1/2 m 1 u 1 2 + 1/2 m 2 u 2 2 u1u1 u2u2 (m 1 -m 2 )v 1 +2m 2 v 2 m 1 +m 2 u1=u1= (m 2 -m 1 )v 2 +2m 1 v 1 m 1 +m 2 u2=u2= Megoldás:

54 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Ferde ütközés v1v1 v2v2 v 1 ┴ = u 1 ┴ v 2 ┴ = u 2 ┴ m 1 v 1 II +m 2 v 2 II =m 1 u 1 II +m 2 u 2 II ½ m 1 v 2 1 II + ½ m 2 v 2 2 II = ½ m 1 u 2 1 II + ½ m 2 u 2 2 II v 2 II v2┴v2┴ v2v2

55 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Ütközés detektálás háromszög-háromszöggyorsítás: befoglalók O(n 2 )

56 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Karakter animáció r w = r L · R kéz ·T alkar ·R könyök ·T felkar ·R váll ·T gerinc ·T ember rwrw rLrL homogén koordináta 4-es

57 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME 2D csont  l px,py 1 0 0 0 1 0 0 l 1 cos  sin  0 -sin  cos  0 0 0 1 x, y, 1 1 0 0 0 1 0 px py 1

58 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Robot példa T0 = robot előrehalad glTranslatef(xr, yr, zr); T1= kar elhelyése glTranslatef(xv, yv, zv); T2= forgatás glRotatef(angle, 1.0f, 0.0f, 0.0f); T3= skálázás glScalef(1.0f, 4.0f, 1.0f); T0 T1 T2 T3 Robot HeadTorsoLeg1Leg2Arm1Arm2 T0 T1, T2, T3

59 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Robot rajzolás + animáció void DrawRobot(float dt) { xr += vx*dt; yr += vy*dt; zr += vz*dt; glPushMatrix(); glTranslatef(xr, yr, zr); angle += av*dt; if (angle>30 || angle<-30) av*=-1; glColor3f(1, 0, 0);// red glPushMatrix(); glTranslatef(xv, yv, zv); glRotatef(angle, 1, 0, 0); glScalef(1, 4, 1);// 1x4x1 cube DrawCube( ); glPopMatrix(); … Másik kéz, lábak, fej, törzs glPopMatrix(); } Robot Arm1Arm2HeadTors o

60 Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME „Inverz kinematika” T0 = előrehaladás (forward, up) ??? T2 = forgatás (ang) A láb (end effektor) földön legyen és ne csúszkáljon forward += leg * fabs(sin(angNew) - sin(angOld)); up = leg * (1 - cos(angNew)); leg forward up


Letölteni ppt "Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010 2D képszintézis 4. előadás."

Hasonló előadás


Google Hirdetések