Geometriai modellezs SzirmayKalos Lszl Szmtgpes grafika elemei l























![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:](https://slidetodoc.com/presentation_image_h/2938a62a29d16f58d12a14e45934074e/image-24.jpg)
![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:](https://slidetodoc.com/presentation_image_h/2938a62a29d16f58d12a14e45934074e/image-25.jpg)


































- Slides: 59
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
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 – Descartes – Polár – Homogén
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) = 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 l A polinomegyütthatók származtatása: l – – Interpoláció Approximáció
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) = P j i (ti-tj) r(t) = Li(t) ri
Görbeszerkesztés Lagrange interpolációval
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 (1 -t)n-i r(t) = Bi(t) ri Bernstein polinomok
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ú + 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
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 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 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 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ő
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. Boor algoritmus
NUBS konstrukció
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: [0, 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, 1] Tartomány: [0, 1]
NUBS rendszám
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 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
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, 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 = [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, 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) = Bi, j (u, v) ri, j = Bi(u) Bj(v) ri, j
Vezérlőpontok, súlyok 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
Felületmodellezés mint Poligonháló módosítás
Felosztásos (subdivision) módszerek = 1/2 + 1/4
Subdivision felületek (Catmull-Clark) = 1/4 + 1/4 = 1/2 + 1/16
Durva poligon modell
Subdivision simítás: 1 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 – 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
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
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 l
Poligon modellezés: téglatest
Poligon modellezés: 1. extruding
Poligon modellezés: 2. extruding
Poligon modellezés: 4. és 5. extruding
Poligon modellezés: 6. extruding
Subdivision simítás
Poligon modellezés