Kurvor och ytor Gustav Taxén gustavt@csc.kth.se 2D1640 Grafik och Interaktionsprogrammering VT 2007
Kurvor och ytor Explicit form Implicit form Parametrisk form Procedurbaserade Polynom Catmull-Clark Kubiska (grad 3) Generella (grad d) Interpolerande Hermite Bezier B-Spline Generell B-Spline Uniform NURBS
Representation av kurvor Explicit Generellt y = f(x) Exempel y = x 1 y Implicit f(x, y) = 0 x - y = 0 Parametrisk x = f x (u) y = f y (u) u min u u max x = u y = u 0 u 1 0 0 1 x
Parametriska kurvor Om vi deriverar uttrycket för kurvan p(u) = f x (u) f y (u) får vi en vektor som definierar kurvans tangent: dp(u) du = df x (u) du df y (u) du
Exempel p(u) = u u 2 0 u 1 dp(u) du = 1 2u I u = 0.5 får vi tangenten 1 1
Exempel
Parametriska ytor För ytor krävs två parametrar: u y p(u,v) = f x (u,v) f y (u,v) f z (u,v) z v x
Parametriska ytor De vektorer vi får om vi deriverar m.a.p. u och v definierar ytans tangentplan: p(u,v) u = f x (u,v) u f y (u,v) u f z (u,v) u p(u,v) v = f x (u,v) v f y (u,v) v f z (u,v) v N(u,v) = p(u,v) u p(u,v) v är ytans normal.
Exempel
Parametriska polynomkurvor Då p(u) är ett polynom i u kallas kurvan polynomkurva. p(u) = f x (u) f y (u) f z (u) = c x0 + uc x1 + u 2 c x2 +... + u n c xn c y0 + uc y1 + u 2 c y2 +... + u n c yn c z0 + uc z1 + u 2 c z2 +... + u n c zn 0 u 1 Polynomkurvor, visar det sig, har egenskaper som är intressanta för datorgrafik och CAD/CAM.
Interpolerande polynomkurvor Antag att vi har fyra styrpunkter p 0, p 1, p 2 och p 3 och att vi vill att kurvan ska gå genom dessa punkter. p 0 p 2 p 3 p 1 p 0 = (p 0x p 0y p 0z ) T, p 1 = (p 1x p 1y p 1z ) T, p 2 = (p 2x p 2y p 2z ) T, p 3 = (p 3x p 3y p 3z ) T Vi samlar koordinaterna i tre vektorer: p x = p 0x p 1x p 2x p 3x p y = p 0y p 1y p 2y p 3y p z = p 0z p 1z p 2z p 3z
Interpolerande polynomkurvor Vi bestämmer att kurvan ska gå genom styrpunkterna vid u = 0, u = 1/3, u = 2/3 och u = 1. u = 0 p 2 p 0 p 3 p 1 u = 1 u = 1/3 u = 2/3 Vilka polynomkoefficienter ska vi ha?
Interpolerande polynomkurvor Låt oss börja med x-komponenten. Vi hade att f x (u) = c x0 + uc x1 + u 2 c x2 + u 3 c x3 och vi vill ha f x (0) = p 0x f x (1/3) = p 1x f x (2/3) = p 2x f x (1) = p 3x u = 0: u = 1: u = 1/3: u = 2/3: p 0x = c x0 p 3x = c x0 + c x1 + c x2 + c x3 p 1x = c x0 + (1/3)c x1 + (1/3) 2 c x2 + (1/3) 3 c x3 p 2x = c x0 + (2/3)c x1 + (2/3) 2 c x2 + (2/3) 3 c x3
Interpolerande polynomkurvor Löser man ekvationssystemet får man c 0x = p 0x c 1x = 5.5p 0x + 9p 1x 4.5p 2x + p 3x c 2x = 9p 0x 22.5p 1x + 18p 2x 4.5p 3x c 3x = 4.5p 0x + 13.5p 1x 13.5p 2x + 4.5p 3x y- och z-komponenterna får samma värden. Kurvan som har dessa c-koefficienter sägs interpolera de fyra styrpunkterna.
Exempel y p 0 = (0 0) T p 1 = (1 0) T p 2 = (1 1) T p 3 = (0 1) T 1 0 p 3 p 2 p 0 p 1 0 1 x
Exempel f x (u) = c x0 + uc x1 + u 2 c x2 + u 3 c x3 p 0 = (0 0) T p 1 = (1 0) T p 2 = (1 1) T p 3 = (0 1) T c 0x = p 0x c 1x = 5.5p 0x + 9p 1x 4.5p 2x + p 3x c 2x = 9p 0x 22.5p 1x + 18p 2x 4.5p 3x c 3x = 4.5p 0x + 13.5p 1x 13.5p 2x + 4.5p 3x c 0x = 0 c 1x = 5.5 0 + 9 1 4.5 1 + 0 = 4.5 c 2x = 9 0 22.5 1 + 18 1 4.5 0 = 4.5 c 3x = 4.5 0 + 13.5 1 13.5 1 + 4.5 0 = 0
Exempel f y (u) = c y0 + uc y1 + u 2 c y2 + u 3 c y3 p 0 = (0 0) T p 1 = (1 0) T p 2 = (1 1) T p 3 = (0 1) T c 0y = p 0y c 1y = 5.5p 0y + 9p 1y 4.5p 2y + p 3y c 2y = 9p 0y 22.5p 1y + 18p 2y 4.5p 3y c 3y = 4.5p 0y + 13.5p 1y 13.5p 2y + 4.5p 3y c 0y = 0 c 1y = 5.5 0 + 9 0 4.5 1 + 1 = 3.5 c 2y = 9 0 22.5 0 + 18 1 4.5 1 = 13.5 c 3y = 4.5 0 + 13.5 0 13.5 1 + 4.5 1 = 9
Exempel f x (u) = 0 + 4.5u 4.5u 2 + 0 u 3 f y (u) = 0 3.5u + 13.5u 2 9u 3
Exempel
Blandningspolynom Funktion b(u) som visar hur varje styrpunkt bidrar till kurvan när u sveps från 0 till 1. Exempel: En kurva som interpolerar två styrpunkter: f x (u) = (1 u)p 0x + up 1x f y (u) = (1 u)p 0y + up 1y P 0 b 0 (u) = 1 u b 1 (u) = u P 1
Blandningspolynom Blandningspolynom för en interpolerande kurva.
En parametrisk kubisk polynomkurva är en kurva på formen p(u) = b 0 (u)p 0 + b 1 (u)p 1 + b 2 (u)p 2 + b 3 (u)p 3 där p i är kurvans styrpunkter och b i (u) är kurvans blandningspolynom.
Utritning av parametriska kurvor draw2dcurve(float px[4], float py[4], float step) { float u; float oldx, oldy; for (u = 0.0f; u <= 1.0f; u += step) { float c0x = px[0]; float c0y = py[0]; float c1x = 5.5 * px[0] + 9 * px[1] 4.5 * px[2] + px[3];... float u2 = u * u; float u3 = u * u2; float x = c0x + c1x * u + c2x * u2 + c3x * u3; float y = c0y + c1y * u + c2y * u2 + c3y * u3; drawline(oldx, oldy, x, y); oldx = x; oldy = y; } } (Egentligen måste man initiera oldx och oldy också.)
Kubiska polynomytor p(u,v) = f x (u, v) f y (u, v) = f z (u, v) 3 i = 0 3 j = 0 c xij c yij c zij u i v j 0 u 1 0 v 1
Exempel
Interpolerande polynomytor Kräver 16 styrpunkter: u p 10 p 20 p 30 v p 00 p 33 p 01 p 02 p 03 p 13 p 23
Interpolerande polynomytor Om vi sätter v = 0 får vi en kurva som ska interpolera punkterna p 00, p 10, p 20 och p 30. u p 10 p 20 p 30 v = 0 v p 00 p 33 p 01 p 02 p 03 p 13 p 23
Interpolerande polynomytor Sätter vi v = 1 får vi en kurva som måste interpolera punkterna p 03, p 13, p 23 och p 33. u p 10 p 20 p 30 v = 1 v p 00 p 33 p 01 p 02 p 03 p 13 p 23
Interpolerande polynomytor Lägger man till v = 1/3 och v = 2/3 får man ett linjärt ekvationssytem. När man löser detta (se boken) får man Koefficienterna för polynomen.
Interpolerande polynomytor
Sammanlänkning nkning av kurvor Icke-kontinuerlig C 0 -kontinuerlig C 1 -kontinuerlig
Hermitekurvor Fås om man kräver C 1 -kontinuitet. Kurvans ekvation är (i 2D) f x (u) = c x0 + uc x1 + u 2 c x2 + u 3 c x3 f y (u) = c y0 + uc y1 + u 2 c y2 + u 3 c y3 Vi behåller första och sista styrpunkten: p 0 = (p 0x p 3 = (p 3x p 0y ) T p 3y ) T
Hermitekurvor Sedan väljer vi tangenten i p 0 och p 3 explicit, d.v.s. df(u=0) du df x (u) du = p 0x df y (u) du u = 0 u = 0 p 0y df(u=1) du df x (u) du = p 3x df y (u) du u = 1 u = 1 p 3y
Hermitekurvor För x-komponenten är kurvans ekvation f x (u) = c x0 + uc x1 + u 2 c x2 + u 3 c x3 och dess derivata är f x (u) = c x1 + 2uc x2 + 3u 2 c x3 så p 0x = f x (0) = c x0 p 3x = f x (1) = c x0 + c x1 + c x2 + c x3 p 0x = f x (0) = c x1 p 3x = f x (1) = c x1 + 2c x2 + 3c x3
Hermitekurvor Löser vi ekvationssystemet får vi f x (u) = 1 u u 2 u 3 1 0 0 0 0 0 1 0 3 3 2 1 2 2 1 1 p 0x p 1x p 0x p 1x y- och z-komponenterna blir samma.
Sammanlänkning nkning av kurvor Vi kan få C 1 -kontinuitet genom att sätta samman två Hermitekurvor där tangenten är densamma i P 3 för första kurvan och P 0 för andra kurvan: P 3 P 0 P 3 P 0
Exempel
Beziérkurvor Samma som Hermite men specificeras lite annorlunda. Derivatorna sätts till p 1 p 2 dp 0 du = 3(p 1 p 0 ) dp 3 du = 3(p 3 p 2 ) p 0 p 3 För att kurvan ska ritas med linjär hastighet m.a.p. u. (Inte uppenbart, men kan visas.)
Beziérkurvor f x (u) = c x0 + uc x1 + u 2 c x2 + u 3 c x3 f x (u) = c x1 + 2uc x2 + 3u 2 c x3 p 0x = c x0 p 1x = c x0 + c x1 + c x2 + c x3 3(p 1x p 0x ) = f x (0) = c x1 3(p 3x p 2x ) = f x (1) = c x1 + 2c x2 + 3c x3
Beziérkurvor Lösningen blir f x (u) = 1 u u 2 u 3 1 4 1 0 3 0 3 0 3 6 3 0 1 3 3 1 p 0x p 1x p 2x p 3x
Beziérkurvor
Beziérytor På motsvarande sätt som för interpolerande ytor (se boken).
Kubiska B-splinekurvorB Nackdelen med Hermitekurvor är att C 1 -kontinuitet inte alltid räcker. Det kan lösas genom att man släpper kravet att kurvan ska interpolera slutpunkterna på kurvan. p i-1 p i p i-3 p i-2
Kubiska B-splinekurvorB Nackdelen med Hermitekurvor är att C 1 -kontinuitet inte alltid räcker. Det kan lösas genom att man släpper kravet att kurvan ska interpolera slutpunkterna på kurvan. p i-1 p i p i+1 p i-2
Kubiska B-splinekurvorB Nackdelen med Hermitekurvor är att C 1 -kontinuitet inte alltid räcker. Det kan lösas genom att man släpper kravet att kurvan ska interpolera slutpunkterna på kurvan. p i-1 p i p i+1 p i+2 Se boken för härledning.
Exempel
Generaliserade B-splinekurvorB Vi kan generalisera B-splinekurvsbegreppet. Vi kan konstruera en funktion p(u) = f x (u) f y (u) f z (u) över intervallen u 0 u 1 u 2... u n-1 u n Värdena u 0, u 1,..., u n kallas knutar.
Generaliserade B-splinekurvorB Den generaliserade B-splinekurvans ekvation är n p(u) = i = 0 B id (u) p i där B id (u) är en basfunktion, i det här fallet ett polynom av grad d (och p i är styrpunkterna) Väljer man B i3 (u) som blandningspolynom för en kubisk B-spline (se boken) och knutarna {0, 0, 0, 0, 1, 1, 1, 1} får man en Beziérkurva.
NURBS NURBS = Non-Uniform Rational B-Spline Variant av generaliserad B-Spline där man viktar de olika styrpunkterna. p(u) = i = 0 B id (u)w i p i Anledningen är att man vill ge användaren explicit kontroll över hur mycket av varje styrpunkt som ska tas med. En annan fördel är att en affin transformation av en NURBS är ekvivalent med samma transformation av styrpunkterna.
NURBS v u
NURBS
NURBS v u
Catmull-Clark Clark-ytor Om man använder kombinationer av polynomytor kan det vara svårt att undvika sprickor på ställen där ytorna möts. Pixar
Catmull-Clark Clark-ytor
Catmull-Clark Clark-ytor F F F F Face points medelvärdet av hörnen som definierar polygonerna
Catmull-Clark Clark-ytor E Edge points medelvärdet av hörnen som definierar en kant och de två nya face points som hör till polygonerna som hör till kanten
Catmull-Clark Clark-ytor E E E E Edge points medelvärdet av hörnen som definierar en kant och de två nya face points som hör till polygonerna som hör till kanten
Catmull-Clark Clark-ytor V Vertex point den punkt som är gemensam för polygonerna. V = (Q + ((n-3)/n)s + 2R) / 3 Q = medelvärdet av alla nya face points S = den ursprungliga vertex point R = medelvärdet av mittpunkten för de kanter som hör till S
Catmull-Clark Clark-ytor E F E Bind samman face points med de edge points som hör till den polygonen
Catmull-Clark Clark-ytor Bind samman face points med de edge points som hör till den polygonen
Catmull-Clark Clark-ytor Bind samman vertex point med edge points
Catmull-Clark Clark-ytor En iteration klar!
Catmull-Clark Clark-ytor
Catmull-Clark Clark-ytor Subdivision for Modeling and Animation SIGGRAPH 2000 Course Notes
Subdivision schemes Subdivision for Modeling and Animation SIGGRAPH 2000 Course Notes
Subdivision schemes Subdivision for Modeling and Animation SIGGRAPH 2000 Course Notes
Subdivision schemes Detta är en av anledningarna till varför man eftersträvar fyrsidiga polygoner i Maya. Subdivision for Modeling and Animation SIGGRAPH 2000 Course Notes
Adaptive subdivision schemes Subdivision for Modeling and Animation SIGGRAPH 2000 Course Notes
Catmull-Clark Clark-ytor: Exempel
Pixar
www.designpicture.com
Jim Kalogiratos