Geometriai modellezs SzirmayKalos Lszl Szmtgpes grafika elemei l

  • Slides: 59
Download presentation
Geometriai modellezés Szirmay-Kalos László

Geometriai modellezés Szirmay-Kalos László

Számítógépes grafika elemei l l l modellezés virtuális világ képszintézis

Számítógépes grafika elemei l l l modellezés virtuális világ képszintézis

Modellezés feladatai l Geometria megadása – pont, görbe, terület, felület, test, fraktálok l Transzformációk

Modellezés feladatai l Geometria megadása – pont, görbe, terület, felület, test, fraktálok l Transzformációk – lokális modellezési és világkoordináta rendszer l Színek, felületi optikai tulajdonságok

Pontok megadása l Mindent számmal! – Koordináta rendszer – Koordináták megadása l Koordináta rendszerek

Pontok megadása l Mindent számmal! – Koordináta rendszer – Koordináták megadása l Koordináta rendszerek – Descartes – Polár – Homogén

Koordináta rendszerek Yh y r 1 1 x f w Xh 1 Descartes Polár

Koordináta rendszerek Yh y r 1 1 x f w Xh 1 Descartes Polár eltolás elforgatás Baricentrikus Homogén vetítés

Görbék = pontok halmaza Koordinátáik (helyvektoraik) kielégítenek egyenletet : – implicit: f(x, y) =

Görbék = pontok halmaza Koordinátáik (helyvektoraik) kielégítenek egyenletet : – implicit: f(x, y) = 0, 2 D egyenes: ax + by + c = 0, l Kör: (x–x 0)2 + (y–y 0)2 –R 2 = 0, f(r) = 0 l n (r – r 0) = 0 |r – r 0 |2 – R 2 = 0 – paraméteres: x = x(t), y = y(t), r = r(t) 2 D egyenes: t [-∞, ∞] x(t) = x 0 + vx t, y(t) = y 0 + vy t, l Kör: t [0, 1] x(t) = x 0 + R cos 2 t y(t) = y 0 + R sin 2 t l r = r 0 + v t r = r 0 + R(cos 2 t, sin 2 t)

Szabadformájú görbék l Definíció kontrolpontokkal Polinom: x(t) = ai ti, y(t) = bi ti

Szabadformájú görbék l Definíció kontrolpontokkal Polinom: x(t) = ai ti, y(t) = bi ti l A polinomegyütthatók származtatása: l – – Interpoláció Approximáció

Lagrange interpoláció Kontrolpontok: r 1, r 2, r 3, . . . , rn

Lagrange interpoláció Kontrolpontok: r 1, r 2, r 3, . . . , rn l Keressük azt az r(t) = [ai, bi ] ti-t amelyre r(t 1) = r 1, r(t 2) = r 2, … , r(tn) = rn, l Megoldás: l – r(t) = Li(t) ri P j i (t-tj) Li(t) = P j i (ti-tj)

Lagrange interpoláció bázisfüggvényei 1 0. 33 0. 67 P j i (t-tj) Li(t) =

Lagrange interpoláció bázisfüggvényei 1 0. 33 0. 67 P j i (t-tj) Li(t) = P j i (ti-tj) r(t) = Li(t) ri

Görbeszerkesztés Lagrange interpolációval

Görbeszerkesztés Lagrange interpolációval

Bezier approximáció l Keresett görbe: r(t) = Bi(t) ri – Bi(t): ne okozzon nem

Bezier approximáció l Keresett görbe: r(t) = Bi(t) ri – Bi(t): ne okozzon nem indokolt hullámokat – Konvex burok tulajdonság – Bi(t) 0, Bi(t) = 1 r 3 r 2 r(t) r 1 B 1(t) B 2(t) B 3(t) r 4 B 4(t)

Bezier approximáció bázisfüggvényei 1 n=3 0 1 () n i Bi(t) = i t

Bezier approximáció bázisfüggvényei 1 n=3 0 1 () n i Bi(t) = i t (1 -t)n-i r(t) = Bi(t) ri Bernstein polinomok

Bezier. Curve class Bezier. Curve { Vector * p; int np; public: Bezier. Curve

Bezier. Curve class Bezier. Curve { Vector * p; int np; public: Bezier. Curve 2 D(int n) { np= n; p= new Vector[np+1]; } float B(int i, float t) { float choose = 1; for(int j = 1; j <= i; j++) choose *= (float)(np-j)/j; return choose * pow(t, i) * pow(1 -t, np-i); } Vector r(float t) { Vector rr(0, 0); for(int i = 0; i <= np; i++) rr += p[i] * B(i, t); return rr; } };

Bonyolult görbék Nagyon magas fokszámú polinom l Összetett görbék: l – Több alacsony fokszámú

Bonyolult görbék Nagyon magas fokszámú polinom l Összetett görbék: l – Több alacsony fokszámú + folytonos illesztés – folytonossági kategóriák G 0 C 0: r 1(tveg) = r 2(tkezd) G 0 = C 0 G 1 C 1: r 1‘ (tveg) = r 2‘ (tkezd) C 1 G 1 C 2: r 1‘‘ (tveg) = r 2‘‘ (tkezd)

Spline l Spline: C 2 folytonos összetett görbe – – Harmadfokú spline B-spline

Spline l Spline: C 2 folytonos összetett görbe – – Harmadfokú spline B-spline

Harmadfokú spline p(t) = a 3 t 3 + a 2 t 2 +

Harmadfokú spline p(t) = a 3 t 3 + a 2 t 2 + a 1 t 1 + a 0 l Új szemléletes reprezentáció: l p(0) = a 0 p(1) = a 3 + a 2 + a 1 + a 0 pi’(0) p’(0) = a 1 p’(1) = 3 a 3 + 2 a 2 + a 1 pi (0) pi’(1) Pi+1 (0) C 1 folytonosság: 2 paraméter közös l C 2 folytonosság: pi’’(1) = pi+1’’(0) l pi (1) Pi+1’(0)

B-spline Válasszunk olyan reprezentációt, amely C 2 folytonos, ha 3 -t közösen birtokolnak l

B-spline Válasszunk olyan reprezentációt, amely C 2 folytonos, ha 3 -t közösen birtokolnak l Reprezentáció: vezérlőpontok l r i(t) = B 0(t)r 0 + B 1(t)r 1 + B 2(t)r 2 + B 3(t)r 3 r i+1(t) = B 0(t)r 1 + B 1(t)r 2 + B 2(t)r 3 + B 3(t)r 4

B-spline bázisfüggvények l Cirkuszi elefántok + Járulékos szempont: Bi(t) = 1 (1 -t)3 /6

B-spline bázisfüggvények l Cirkuszi elefántok + Járulékos szempont: Bi(t) = 1 (1 -t)3 /6 1 0 B 0(t) = B 3(t) = t 3 /6 B 1(t) = (1+3(1 -t)+3 t(1 -t)2) /6 B 2(t) = (1+3 t+3(1 -t)t 2) /6 1

B-spline görbeszegmens 1 0 B 0(t) = (1 -t)3 /6 B 3(t) = t

B-spline görbeszegmens 1 0 B 0(t) = (1 -t)3 /6 B 3(t) = t 3 /6 1 konvex burok tulajdonság B 1(t) = (1+3(1 -t)+3 t(1 -t)2) /6 B 2(t) = (1+3 t+3(1 -t)t 2) /6

A B-spline lokálisan vezérelhető

A B-spline lokálisan vezérelhető

NUBS: Non-Uniform B-spline l B-spline – minden szegmens 1 hosszú paramétertartomány – Akkor megy

NUBS: Non-Uniform B-spline l B-spline – minden szegmens 1 hosszú paramétertartomány – Akkor megy át a kontrol ponton, ha három egymás követő kontrolpont egymásra illeszkedik l NUBS – az i. szegmens ti -től ti+1 -ig. – Egy kontrolpont többször is számíthat: l A legalább 3 -szoros pontokon a görbe átmegy

NUBS rekurzív konstrukciója t 0 t 1 t 2 t 3 t 4 Cox-de.

NUBS rekurzív konstrukciója t 0 t 1 t 2 t 3 t 4 Cox-de. Boor algoritmus

NUBS konstrukció

NUBS konstrukció

NUBS program r[i]: n db. Vezérlőpont t[i]: n+k db. csomópont Fokszám = k-1 Hasznos:

NUBS program r[i]: n db. Vezérlőpont t[i]: n+k db. csomópont Fokszám = k-1 Hasznos: t[k]-t[n+1] B(i, k, t) { // 0/0 = 1. if (k == 1) { if (t[i] <= t < t[i+1]) return 1; else return 0; } else return ( ( t - t[i] ) * B(i, k-1, t ) / ( t[i+k-1] - t[i] ) + (t[i+k] - t) * B(i+1, k-1, t) / ( t[i+k] - t[i+1] ) ); } NUBS(k, t) { Vector r(0, 0); for(i = 0; i < n; i++) r += r[i] * B(i, k, t); return r; } Bi(t) ri

Végpontokon átmenő NUBS n=5 k=4 (harmadfokú) t = [0, 0, 1, 2, 2] Tartomány:

Végpontokon átmenő NUBS n=5 k=4 (harmadfokú) t = [0, 0, 1, 2, 2] Tartomány: [0, 2]

B-Spline mint NUBS n=4 k=4 (harmadfokú) t = [-3, -2, -1, 0, 1, 2,

B-Spline mint NUBS n=4 k=4 (harmadfokú) t = [-3, -2, -1, 0, 1, 2, 3, 4] Tartomány: [0, 1]

Bézier görbe mint NUBS n=4 k=4 (harmadfokú) t = [0, 0, 1, 1, 1,

Bézier görbe mint NUBS n=4 k=4 (harmadfokú) t = [0, 0, 1, 1, 1, 1] Tartomány: [0, 1]

NUBS rendszám

NUBS rendszám

Idáig: Nem racionális B-spline r 3 r 2 r(t) r 1 B 1(t) B

Idáig: Nem racionális B-spline r 3 r 2 r(t) r 1 B 1(t) B 2(t) B 3(t) r 4 B 4(t) Idáig a súlyfüggvények: Bi(t) = 1 Súlypont: Polinom! (Bi(t) ri ) r(t) = = Bi(t) ri Bi(t)

NURBS: Non-uniform Rational B-spline r 2 r(t) r 1 w 1 B 1(t) r

NURBS: Non-uniform Rational B-spline r 2 r(t) r 1 w 1 B 1(t) r 4 w 2 B 2(t) w 3 B 3(t) w 4 B 4(t) (wi. Bi(t) ri) wi. Bi(t) r(t) = = wj. Bj(t) Polinom tört! racionális ri Bi*(t)

NURBS súly w=3 w=2 w=1 w=1 w=1

NURBS súly w=3 w=2 w=1 w=1 w=1

Területek Határ + belső tartományok azonosítása Belső tartományok:

Területek Határ + belső tartományok azonosítása Belső tartományok:

Felületek l Felület 3 D pontok halmaza: – koordinátáik kielégítenek egyenletet – implicit: f(x,

Felületek l Felület 3 D pontok halmaza: – koordinátáik kielégítenek egyenletet – implicit: f(x, y, z) = 0 l gömb: (x - x 0)2 + (y - y 0)2 + (z - z 0)2 - r 2 = 0 – paraméteres: x = x(u, v), y = y(u, v), z = z(u, v), u, v [0, 1] l l gömb: x = x 0 + r cos 2 u sin v y = y 0 + r sin 2 u sin v z = z 0 + r cos v u, v [0, 1] Klasszikus felületek – definíció = paraméterek megadása

Kvadratikus felületek l l l x. T A x = 0 x. T =

Kvadratikus felületek l l l x. T A x = 0 x. T = [x, y, z, 1] A koordináták legfeljebb másodfokon gömb, ellipszoid, sík, paraboloid, hiperboloid, hengerfelület, . . . Ellipszoid 2 2 z 2 x y + + -1=0 a 2 b 2 c 2 Végtelen kúp x 2 y 2 2 2 + - z =0 2 a b Végtelen henger x 2 y 2 + 2 - 1 =0 2 a b

Szabadformájú felületek: r(u, v) l Definíció kontrolpontokkal r(u, v) = Bi (u) Bj(v) ri,

Szabadformájú felületek: r(u, v) l Definíció kontrolpontokkal r(u, v) = Bi (u) Bj(v) ri, j r(u, v) = rv(u) = Bi (u) ri (v) = Bj(v) ri, j

Szabadformájú felületek l 2 D kontrolpont sereg: szorzatfelületek Súlyfüggények: Interpoláció, Approximáció r(u, v) =

Szabadformájú felületek l 2 D kontrolpont sereg: szorzatfelületek Súlyfüggények: Interpoláció, Approximáció r(u, v) = Bi, j (u, v) ri, j = Bi(u) Bj(v) ri, j

Vezérlőpontok, súlyok módosítása

Vezérlőpontok, súlyok módosítása

Vezérlőpontcsoportok módosítása

Vezérlőpontcsoportok módosítása

Szobrászkodás szabadformájú felületekkel

Szobrászkodás szabadformájú felületekkel

Szobrászkodás szabadformájú felületekkel

Szobrászkodás szabadformájú felületekkel

Felületmodellezés mint Poligonháló módosítás

Felületmodellezés mint Poligonháló módosítás

Felosztásos (subdivision) módszerek = 1/2 + 1/4

Felosztásos (subdivision) módszerek = 1/2 + 1/4

Subdivision felületek (Catmull-Clark) = 1/4 + 1/4 = 1/2 + 1/16

Subdivision felületek (Catmull-Clark) = 1/4 + 1/4 = 1/2 + 1/16

Durva poligon modell

Durva poligon modell

Subdivision simítás: 1 szint

Subdivision simítás: 1 szint

Subdivision simítás: 2. szint

Subdivision simítás: 2. szint

Testek l Ellenpéldák l Érvényes testek: reguláris halmaz – nem lehetnek alacsony dimenziós elfajulásai

Testek l Ellenpéldák l Érvényes testek: reguláris halmaz – nem lehetnek alacsony dimenziós elfajulásai – minden határpont mellett van belső pont l Garantáltan érvényes testet építő módszerek – 2. 5 dimenziós eljárások – speciális felületi modellezés: B-rep – Konstruktív tömörtest geometria

2. 5 dimenziós módszerek Kihúzás: extrude Forgatás: rotate

2. 5 dimenziós módszerek Kihúzás: extrude Forgatás: rotate

Felületmodellezők l Test = határfelületek gyűjteménye l Topológiai ellenőrzés (Euler tétel): csúcs + lap

Felületmodellezők l Test = határfelületek gyűjteménye l Topológiai ellenőrzés (Euler tétel): csúcs + lap = él + 2

B-rep: Euler operátorok

B-rep: Euler operátorok

Implementáció él class BRep. Core { … public: void MEVVF(…); void MVE(float t, Edge&

Implementáció él class BRep. Core { … public: void MEVVF(…); void MVE(float t, Edge& e); void MEF(Vertex& v 1, Vertex& v 2); void Move(Vertex& v, Vector p); }; class BRep : BRep. Core { void Face. Extrude( ); void Face. Split( ); void Edge. Collapse( ); void Vertex. Split( ); … }; Pont +(x, y) lap

Gyakorlati Euler operátorok l Face extrude l Face split Edge Collapse l Vertex split

Gyakorlati Euler operátorok l Face extrude l Face split Edge Collapse l Vertex split l

Poligon modellezés: téglatest

Poligon modellezés: téglatest

Poligon modellezés: 1. extruding

Poligon modellezés: 1. extruding

Poligon modellezés: 2. extruding

Poligon modellezés: 2. extruding

Poligon modellezés: 4. és 5. extruding

Poligon modellezés: 4. és 5. extruding

Poligon modellezés: 6. extruding

Poligon modellezés: 6. extruding

Subdivision simítás

Subdivision simítás

Poligon modellezés

Poligon modellezés