660 likes | 863 Views
Geometriai modellezés. Szirmay-Kalos László. Számítógépes grafika elemei. modellezés. számok. Virtuális világ modell. képszintézis. Modellezés feladatai. Geometria megadása 2D: pont, görbe, terület, fraktálok ( D 2) 3D: pont, görbe, felület, test, fraktálok ( D 3)
E N D
Geometriai modellezés Szirmay-Kalos László
Számítógépes grafika elemei modellezés számok Virtuális világ modell képszintézis
Modellezés feladatai • Geometria megadása • 2D: pont, görbe, terület, fraktálok (D2) • 3D: pont, görbe, felület, test, fraktálok (D3) • Transzformációk (mozgatás) • Referencia helyzetből a világkoordináta rendszerben az aktuális helyzetbe (animáció, kényelmes definíció) • Színek, felületi optikai tulajdonságok
Pontok megadása • Mindent számmal! • Koordináta rendszer • Koordináták megadása Yh y r 1 f w Xh x 1 1 Descartes eltolás szemléletes! Polár elforgatás Baricentrikus Homogén vetítés
Görbék = pontok halmaza Koordinátáikkielégítenek egy egyenletet (nem egyértelmű): • implicit: f(x, y) = 0f(r) = 0 • Kör: (x–x0)2 + (y–y0)2–R2 = 0|r – r0 |2–R2= 0 • paraméteres: x = x(t), y = y(t) r = r(t) • Kör: t[0,1] x(t) = x0 + R cos 2tr = r0+ R(cos 2t, sin 2t)y(t) = y0 + Rsin 2t
2D egyenes paraméteres • r = r0 + vt, t [-∞,∞] • x = x0 + vxt • y = y0 + vyt nnormálvektor virányvektor y r0 implicit r n(r – r0) = 0 nx (x – x0) + ny (y – y0) = 0 ax + by + c = 0 (x, y, 1) (a, b, c) = 0 x
3D egyenes paraméteres virányvektor z • r = r0 + vt, t [-∞,∞] • x = x0 + vxt • y = y0 + vyt • z = z0 + vzt r0 r y x Általában 3D görbék: x = x(t), y = y(t), z=z(t)
Szabadformájú görbék • Definíció vezérlőpontokkal • Polinom: x(t) = Sai ti, y(t) = Sbi ti • A polinomegyütthatók származtatása: • Interpoláció • Approximáció
r2 r1 rn Lagrange interpoláció r(t) ? t2 t1 tn • Vezérlőpontok: r1, r2,r3,...,rn • Keressük azt az r(t) = S[ai, bi ] ti-t amelyre r(t1) = r1, r(t2) = r2,… ,r(tn) = rn, • Megoldás: • r(t) = SLi(t) ri r(tk) = rk 1 ha i=k Pj i (t-tj) Li(t) = Li(tk) = Pj i (ti-tj) 0egyébként
Lagrange interpoláció bázisfüggvényei 1 0 1 0.33 0.67 Pj i (t-tj) r(t) = SLi(t) ri Li(t) = Pj i (ti-tj)
Bezier approximáció • Keresett görbe:r(t) = S Bi(t) ri • Bi(t): ne okozzon indokolatlan hullámokat • Konvex burok tulajdonság • Bi(t) 0, Bi(t) = 1 r2 r1 r3 r(t) r0 B2(t) B3(t) B1(t) B0(t)
Bernstein polinomok n () 1n = (t+(1-t))n =St i(1-t)n-i n i i=0 Bi(t) • Bi(t) 0, Bi(t) = 1 teljesül
Bezier approximáció bázisfüggvényei 1 n = 3 0 1 r(t) = S Bi(t) ri () n Bi(t) = ti(1-t)n-i i
BezierCurve • class BezierCurve { • Vector * p; • int np; • float B(int i, float t) { • floatchoose = 1; • for(int j = 1; j <= i; j++) • choose *= (float)(np-j+1)/j; • return choose * pow(t, i) * pow(1-t,np-i); • } • public: • BezierCurve(int n) { np= n; p= new Vector[np+1];} • 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 • Összetett görbék: • Több alacsony fokszámú + folytonos illesztés • folytonossági kategóriák G0 G1 C0: r1(tveg) = r2(tkezd) C1: r1‘(tveg) = r2‘(tkezd) C2: r1‘‘(tveg) = r2‘‘(tkezd) C1 G1 G0 = C0
Spline • Spline: C2 folytonos összetett görbe • Harmadfokú spline • B-spline
ri’(1) Harmadfokú spline ri (1) ri+1’(0) ri’(0) ri+1 (0) ri (0) • r(t) = a3t3 + a2t2 + a1t + a0 • Szemléletes reprezentáció: r(0) = a0 r(1) = a3+a2+a1+a0 r’(0) = a1r’(1) = 3a3+2a2+a1 a0 = r(0) a1 = r’(0) a2 =3r(1)-r’(1)-2r’(0)-3r(0) a3 =r’(1)-2r(1)+r’(0)+2r(0) • Interpoláció: r(0) és r(1) a vezérlőpontok • C1 folytonosság: 2 paraméter közös
Harmadfokú spline C2 folytonosság • Követelmény:ri’’(1) = ri+1’’(0) • Második derivált: r’’(0) = 2a2= 6r(1)-2r’(1)-4r’(0)-6r(0) r’’(1) = 6a3+ 2a2= 6r(0)+2r’(0)-6r(1)+4r’(1) • C2 folytonosság az ismeretlen közös első derivált kiszámításával
B-spline • Válasszunk olyan reprezentációt, amely C2 folytonos, ha 3-t közösen birtokolnak • Reprezentáció: vezérlőpontok ri(t) = B0(t)r0 + B1(t)r1 + B2(t)r2 + B3(t)r3 ri+1(t) = B0(t)r1 + B1(t)r2 + B2(t)r3 + B3(t)r4 r2 r3 r1 • Bi(t) = 1 r0 r4
B-spline bázisfüggvények • Cirkuszi elefántok + Járulékos szempont: Bi(t) = 1 B1(t) = (1+3(1-t)+3t(1-t)2) /6 B0(t) = (1-t)3 /6 B2(t) = (1+3t+3(1-t)t2) /6 B3(t) = t3 /6 1 0 1
B-spline görbeszegmens 1 konvex burok tulajdonság 0 1 B1(t) = (1+3(1-t)+3t(1-t)2) /6 B0(t) = (1-t)3 /6 B2(t) = (1+3t+3(1-t)t2) /6 B3(t) = t3 /6
NUBS: Non-Uniform B-spline • B-spline • minden szegmens 1 hosszú paramétertartomány • Akkor megy át a kontrol ponton, ha három egymást követő kontrolpont egymásra illeszkedik • NUBS • az i. szegmens ti-től ti+1 -ig. • Egy kontrolpont többször is számíthat: • A legalább 3-szoros pontokon a görbe átmegy
NUBS rekurzív konstrukciója t0 t1 t2 t3 t4 Cox-deBoor algoritmus
NUBS program r[i]: n db. Vezérlőpont t[i]: n+k db. csomópont Fokszám = k-1 Hasznos: t[k-1]…t[n] B(i, k, t) { // 0/0 = 1. if (k == 1) { if (t[i] <= t < t[i+1]) return 1; else return 0; } else return (B(i, k-1, t ) * ( t – t[i] ) / ( t[i+k-1] – t[i] ) + B(i+1, k-1, t) * (t[i+k] – 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; } S Bi(t) ri
Végpontokon átmenő NUBS n=5 k=4 (harmadfokú) t = [0,0,0,0,1,2,2,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,0,0,1,1,1,1] Tartomány: [0, 1]
Idáig: Nem racionális B-spline r3 r2 r4 r(t) r1 B3(t) B4(t) B2(t) B1(t) Idáig a súlyfüggvények: S Bi(t) = 1 Súlypont: Polinom! S (Bi(t) ri) r(t) = = S Bi(t) ri S Bi(t)
NURBS: Non-uniform Rational B-spline r3 r2 r4 r(t) r1 w3B3(t) w4B4(t) w2B2(t) w1B1(t) Polinom tört! racionális S (wiBi(t) ri) wiBi(t) r(t) = = Sri SwjBj(t) SwjBj(t) Bi*(t)
NURBS súly w=3 w=2 w=1 w=1 w=1 w=1 w=1
vi+1 ri(t) = ait3 + bit2 + cit 1 + di ri(ti) = ri, ri(ti+1) = ri+1 ri’(ti) = vi ri’(ti+1) = vi+1 vi • Ismeretlen vi -k meghatározása: • C2 folytonosság követelményéből: spline • ri’’(ti+1)= ri+1’’(ti+1) + sebesség a kezdő és végpontban Animációs harmadfokú spline ri+1 r1 rn r0 ri t0 t1 ti ti+1 tn
= 1 = -1 = 0 Catmull-Rom vi tenzió paraméter (1-) =0.9 =0.5 =0.1 (1-) Kochanek-Bartels (Catmull-Rom) „spline” ri+1 ri-1 rn r0 ri t0 ti-1 ti ti+1 tn ri+1 -ri ri -ri-1 1 2 vi = + ti+1 -ti ti -ti-1
Görbék G0/C0 Cn Cn C2 C1 C2 Ck
Területek Határ + belső tartományok azonosítása Belső tartományok:
Felületek • Felület 3D pontok halmaza: • koordinátáik kielégítenek egy egyenletet • implicit: f(x, y, z) = 0 • gömb: (x - x0)2 + (y - y0)2 + (z - z0)2 - R2 = 0 • paraméteres: x = x(u,v), y = y(u,v), z = z(u,v), • u,v[0,1] • gömb: x = x0 + R cos 2u sin vy = y0 + Rsin 2u sin vz = z0 + R cos vu,v[0,1] • Klasszikus felületek • definíció = paraméterek megadása
Sík nnormálvektor paraméteres a z r0 r = r0+ua+vb r b y implicit x n(r – r0) = 0 nx (x – x0) + ny (y – y0) + nz(z – z0) = 0 ax + by + cz + d = 0 (x, y, z, 1) (a, b, c, d) = 0
Kvadratikus felületek • xTAx = 0 xT = [x, y, z, 1] • A koordináták legfeljebb másodfokon • gömb, ellipszoid, sík, paraboloid, hiperboloid, hengerfelület,... Végtelen kúp x2 y2 Ellipszoid x2 y2 z2 Végtelen henger x2 y2 + + -1=0 + - 1=0 + - z2=0 a2 b2 a2 b2c2 a2 b2
Szabadformájú felületek: r(u,v) • Definíció kontrolpontokkal r(u,v) = rv(u) = SBi (u)ri(v) ri(v)=SBj(v)ri,j r(u,v) = SSBi (u) Bj(v)ri,j
Szabadformájú felületek • 2D kontrolpont sereg: szorzatfelületek r(u,v) = SSBi,j (u,v)ri, j =SSBi(u) Bj(v)ri, j Súlyfüggények: Interpoláció, Approximáció
Felosztásos (subdivision) módszerek = 1/2+ 1/4
Subdivision felületek (Catmull-Clark) = 1/4 = 1/2 i = 1/v2+2/v2 +(v-3)/v i = 1/4+ 1/2 i