Computação Gráfica: Aula2: Curvas e Superfícies http://www.fei.edu.br/~psergio [email protected] Curvas e Superfícies As Curvas de Hermite T2 P2 0 t 1 P1 T1 P(t ) f (t , P1, P2, T1, T 2) ( x(t ), y( y), z (t )) Curvas e Superfícies: Curvas de Hermite P ( P1, P2, T1, T 2) x(t ) Px a x t bx t cx t d x 3 2 y (t ) Py a y t by t c y t d y 3 2 z (t ) Pz a z t bz t cz t d z 3 2 Curvas e Superfícies: Curvas de Hermite x(t ) Px a x t bx t cx t d x 3 2 y (t ) Py a y t by t c y t d y 3 2 z (t ) Pz a z t bz t cz t d z 3 2 x(t ) [t t t 1][a x bx cx d x ] T x 3 2 y (t ) [t t t 1][a y by c y d y ] T y 3 2 z (t ) [t t t 1][az bz cz d z ] T z 3 2 Curvas e Superfícies: Curvas de Hermite P1 ( P1x , P1y , P1z ) ( x(0), y(0), z(0)) x(0) P1x a x 0 bx 0 cx 0 d x d x 3 2 y (0) P1y a y 0 by 0 c y 0 d y d y 3 2 z (0) P1z a z 0 bz 0 cz 0 d z d z 3 2 P1 ( P1x , P1y , P1z ) (d x , d y , d z ) Curvas e Superfícies: Curvas de Hermite P2 ( P2x , P2 y , P2z ) ( x(1), y(1), z(1)) x(1) P 2 x a x1 bx 1 cx1 d x d x 3 2 y (1) P 2 y a y 1 by 1 c y 1 d y d y 3 2 z (1) P 2 z a z 1 bz 1 cz 1 d z d z 3 2 P2 ( P2 x , P2 y , P2 z ) (ax bx cx d x , a y by c y d y , az bz cz d z ) Curvas e Superfícies: Curvas de Hermite x(0) [0 0 0 1][ax bx cx d x ] d x P1 y(0) [0 0 0 1][a y by c y d y ] d y z (0) [0 0 0 1][az bz cz d z ] d z x(1) [1 1 1 1][ax bx cx d x ] ax bx cx d x P2 y(1) [1 1 1 1][a y by c y d y ] ax by c y d y z (1) [1 1 1 1][az bz cz d z ] az bz cz d z Curvas e Superfícies: Curvas de Hermite T1 (T1x , T1y , T1z ) ( x´(0), y´(0), z´(0)) T 2 (T 2 x , T 2 y , T 2 z ) ( x´(1), y´(1), z´(1)) T2 P2 0 t 1 P1 T1 P(t ) f (t , P1, P2, T1, T 2) ( x(t ), y( y), z (t )) Curvas e Superfícies: Curvas de Hermite T1 (T1x , T1y , T1z ) ( x´(0), y´(0), z´(0)) T 2 (T 2 x , T 2 y , T 2 z ) ( x´(1), y´(1), z´(1)) x´(t ) Px´ (axt 3 bxt 2 cxt d x )´ 3a xt 2 2bxt cx y´(t ) Py´ (a y t 3 by t 2 c y t d y )´ 3a y t 2 2by t c y z´(t ) Pz´ (a z t 3 bz t 2 cz t d z )´ 3az t 2 2bz t cz x´(t ) [3t 2 2t 1 0][a x bx cx d x ] T ´ x y´(t ) [3t 2 2t 1 0][a y by c y d y ] T ´ y z´(t ) [3t 2t 1 0][a z bz cz d z ] T ´ z 2 Curvas e Superfícies: Curvas de Hermite T1 (T1x , T1y , T1z ) ( x´(0), y´(0), z´(0)) x´(t ) [3t 2 2t 1 0][a x bx cx d x ] T ´ x y´(t ) [3t 2 2t 1 0][a y by c y d y ] T ´ y z´(t ) [3t 2 2t 1 0][a z bz cz d z ] T ´ z x´(0) [0 0 1 0][a x bx cx d x ] cx y´(0) [0 0 1 0][a y by c y d y ] c y z´(0) [0 0 1 0][a z bz cz d z ] cz T1 (cx , cy , cz ) Curvas e Superfícies: Curvas de Hermite T 2 (T 2x , T 2 y , T 2z ) ( x´(1), y´(1), z´(1)) x´(t ) [3t 2t 1 0][a x bx cx d x ] T ´ x 2 y´(t ) [3t 2t 1 0][a y by c y d y ] T ´ y 2 z´(t ) [3t 2t 1 0][a z bz cz d z ] T ´ z 2 x´(1) [3 2 1 0][a x bx cx d x ] 3a x 2bx cx d x y´(1) [3 2 1 0][a y by c y d y ] 3a y 2by c y d y z´(1) [3 2 1 0][a z bz cz d z ] 3az 2bz cz d z T 2 (3ax 2bx cx d x , 3ay 2by cy d y , 3az 2bz cz d z ) Curvas e Superfícies: Curvas de Hermite Em resumo e colocando em forma matricial, temos ... dx P1x 0 0 0 1 ax P2 x 1 1 1 1 bx ax bx cx d x T1x 0 0 1 0 cx cx 3 2 1 0 d x 3ax 2bx cx d x T 2 x H P1x P2 x H x T 1x T 2 x x P1y P2 y T 1 H y y T 2 y P1z P2 z H z T 1z T 2 z Curvas e Superfícies: Curvas de Hermite P1x P2 x H x T 1x T 2 x P1x P2 x 1 x H T 1x T 2 x P1y P2 y T 1 H y y T 2 y P1y P2 y 1 y H T 1y T 2 y P1z P2 z H z T 1z T 2 z P1z P2 z 1 z H T 1z T 2 z Curvas e Superfícies: Curvas de Hermite P1y P2 y 1 y H T 1y T 2 y P1x P2 x 1 x H T 1x T 2 x 0 1 H 0 3 0 1 0 2 0 1 1 1 1 1 0 0 P1z P2 z H 1 z T 1z T 2 z 1 2 2 1 3 3 2 1 H 1 0 0 1 0 0 0 0 1 Curvas e Superfícies: Curvas de Hermite 1 P1x ax 2 2 1 b 3 3 2 1 P 2 x x x cx 0 0 1 0 T 1x 0 0 0 T 2 x d x 1 a x 2 P1x 2 P 2 x T 1x T 2 x b 3P1 3P 2 2T 1 T 2 x x x x x x cx T 1x P1x d x Curvas e Superfícies: Curvas de Hermite a x 2 P1x 2 P 2 x T 1x T 2 x b 3P1 3P 2 2T 1 T 2 x x x x x x cx T 1x d P 1 x x a y 2 P1y 2 P 2 y T 1y T 2 y b 3P1 3P 2 2T 1 T 2 y y y y y y cy T 1y d P 1 y y a z 2 P1z 2 P 2 z T 1z T 2 z b 3P1 3P 2 2T 1 T 2 z z z z z z cz T 1z P1z d z Curvas e Superfícies: Curvas de Hermite Juntando as idéias ... x(t ) [t 3 t 2 t 1][a x bx cx d x ] T x y (t ) [t t t 1][a y by c y d y ] T y 3 2 z (t ) [t 3 t 2 t 1][az bz cz d z ] T z P1x P2 x H x T 1x T 2 x x(t ) [t 3 t 2 t 1]H [ P1x P 2 x T1x T 2 x ] y (t ) [t 3 t 2 t 1]H [ P1y P2 y z (t ) [t t t 1]H [ P1z 3 2 P2 z T 1y T 1z T 2 y ] T 2z ] Curvas e Superfícies: Curvas de Hermite Finalmente ... P1 P 2 P(t ) ((2t 3 3t 2 1), (2t 3 3t 2 ), (t 3 2t 2 t ), (t 3 t 2 )) T1 T 2 x(t ) (2t 3 3t 2 1)P1x (2t 3 3t 2 )P2x (t 3 2t 2 t )T1x (t 3 t 2 )T 2x y(t ) (2t 3 3t 2 1)P1y (2t 3 3t 2 )P2 y (t 3 2t 2 t )T1y (t 3 t 2 )T 2 y z(t ) (2t 3 3t 2 1) P1z (2t 3 3t 2 ) P2z (t 3 2t 2 t )T1z (t 3 t 2 )T 2z Curvas e Superfícies: Curvas de Hermite Finalmente ... T2 P2 0 t 1 P1 T1 P(t ) (2t 3 3t 2 1) P1 (2t 3 3t 2 ) P2 (t 3 2t 2 t )T1 (t 3 t 2 )T 2 x(t ) (2t 3 3t 2 1)P1x (2t 3 3t 2 )P2x (t 3 2t 2 t )T1x (t 3 t 2 )T 2x y(t ) (2t 3 3t 2 1)P1y (2t 3 3t 2 )P2 y (t 3 2t 2 t )T1y (t 3 t 2 )T 2 y z(t ) (2t 3 3t 2 1) P1z (2t 3 3t 2 ) P2z (t 3 2t 2 t )T1z (t 3 t 2 )T 2z Curvas e Superfícies As Curvas de Bézier B0 B2 B4 B1 B3 B5 •Desenvolvida por Pierre Bézier durante seus trabalhos em projetos de automóveis para a Renault francesa no início da década de 1960. • A grande maioria dos Softwares de Computação Gráfica disponíveis no mercado usam o conceito de Curvas de Bézier. Entre eles:Adobe, Corel Draw, AutoCad, Paint Shop Pro, 3D Studio Max Curvas e Superfícies: as curvas de Bézier B0 B2 B4 B1 B3 B5 •Esse tipo de curva, por não usar o conceito de vetor e apenas pontos, é mais compreensível pelos usuários. • Para ajuste por u polinômio de grau n, a curva de Bézier pode ser gerada por 3, 4, até n+1 pontos de controle. • Geralmente, é suficiente usar 4 pontos, gerando uma curva cúbica. • A curva de Bézier passa pelo primeiro e último ponto, e usa os demais para construir sua tangente. Curvas e Superfícies: as curvas de Bézier B0 B2 B4 B1 n P(t ) Bi J n,i (t ), i 0 n J i 0 n ,i B3 B5 0t 0 n i n! n i n i i J n,i (t ) t 1 t t 1 t i!(n i)! i (t ) 1 Curvas e Superfícies: as curvas de Bézier n J i 0 n ,i (t ) 1 0 t 1 Essa propriedade é chamada de propriedade normalizante, e força a curva gerada a ficar inteiramente dentro da figura convexa (convex hull) definida pelos pontos de controle Bi B2 B1 B1 B2 B0 B5 B5 B0 B3 B4 B3 Curvas e Superfícies: as curvas de Bézier B2 B3 B3 B1 B2 B0 B4 B4 B0 B1 Conexão de vários segmentos de curvas de graus menores para simplificação da expressão Curvas e Superfícies: as curvas de Bézier continuidade C0 sem continuidade continuidade C1 continuidade C2 Níveis de continuidade da união entre duas curvas Curvas e Superfícies: as curvas de Bézier Como exemplo didático apenas, supomos n = 2. Nesse caso, temos três pontos e controle: B0, B1 e B2 n P(t ) Bi J n,i (t ), i 0 0t 0 n i n! n 1 n i J n,i (t ) t 1 t t i 1 t i!(n i)! i n 2 n! 2! i n i P(t ) Bi t (1 t ) Bi t i (1 t ) n i i!(n i )! i!(2 i )! i 0 i 0 2! 0 2! 1 2! 2 2 1 P(t ) B0 t (1 t ) B1 t (1 t ) B2 t (1 t ) 0 0!2! 1!1! 2!0! P(t ) B0 (1 t ) 2 2 B1t (1 t ) B2t 2 P(t ) (1 t ) 2 B0 2t (1 t ) t 2 B1 t 2 B2 1 2 1 B0 t 1 2 2 0 B1 1 0 0 B2 Curvas e Superfícies: as curvas de Bézier De uma forma mais compacta e elegante, temos a curva de Bézier quando n=2. 1 2 1 B0 2 P(t ) t t 1 2 2 0 B1 T 1 0 0 B2 MB GB • T é o vetor de potências da curva de Bézier de grau n = 2 • MB é a Matriz de coeficientes da curva de Bézier de grau n = 2 • GB é a Matriz de pontos de controle que definem a geometria da curva de Bézier de grau n = 2 Curvas e Superfícies: as curvas de Bézier De uma forma análoga, as matrizes da curva de Bézier quando n=3. 1 3 3 1 B0 3 6 3 0 B 1 3 2 P(t ) t t t 1 3 3 0 0 B2 T 0 0 0 B3 1 MB GB Que leva à expressão: P(t ) (1 t )3 B0 3t (1 t )2 B1 3t 2 (1 t )B2 t 3 B3 Curvas e Superfícies: as curvas de Bézier Algoritmo de Casteljau P1 B1 C0 P2 D0 C1 B2 B0 P0 P0 P1 P2 P3 B0 B1 B2 P3 C0 C1 D0 Curvas e Superfícies: as curvas de Bézier Aspectos Computacionais • As curvas de Bézier são computacionalmente baratas, mesmo com uma discretização de t muito pequena. • Manuseio das curvas RESUMO • Curva Poligonal • Avaliação por polinômios de Bernstein • Algoritmo de Casteljau • Número de pontos de controle e grau são interdependentes • Propriedade de Convex Hull Curvas e Superfícies B-Splines B0 B2 B4 B1 B3 B5 •Desenvolvida em 1967 por Schenberg, são até hoje os tipos mais populares em Computação Gráfica. • Uma B-Spline é uma versão da curva de Bézier que não passa pelos pontos de controle, o que permite ela ser gerada para qualquer número de pontos de controle tornando o grau do polinômio independente do número de pontos bases. Curvas e Superfícies: B-Splines B0 B2 B4 B1 B3 B5 • A forma básica da B-Spline é bastante semelhante à curva de Bézier. Nas B-Splines um conjunto Ni,k(t) combina o efeito dos pontos de controle Bi para gerar a curva. n P(t ) Bi Ni ,k (t ) i 0 Curvas e Superfícies: B-Splines n P(t ) Bi Ni ,k (t ) i 0 1 para ti t ti 1 N i , 0 (t ) 0 nos demais intervalos 1 ti ti k t N i ,k 1 (t ) N i 1,k 1 (t ) N i ,k (t ) ti k ti ti k 1 ti 1 O parâmetro k controla a ordem de continuidade da curva, e n o número de pontos de controle Bi usados. Os parâmetros t0 , t1 ,, tm são chamados nós e podem ser qualquer seqüência crescente uniforme, não-uniforme, periódica ou não-periódica. Curvas e Superfícies: B-Splines n P(t ) Bi Ni ,k (t ) i 0 para k = 2 t se 0 t 1 Ni , 2 (t ) 2 - t se 1 t 2 Curvas e Superfícies: B-Splines n P(t ) Bi Ni ,k (t ) i 0 para k = 3 1 2 se 0 t 1 2t 2 3 3 N i ,3 (t ) - t - se 1 t 2 4 2 1 2 se 2 t 3 (3 t ) 2 Curvas e Superfícies: B-Splines n P(t ) Bi Ni ,k (t ) para k = 4 i 0 1 3 t 6 2 1 3 2 - t - 2 - t - 2 3 2 N i , 4 (t ) 2 1 - t - 23 - t - 22 3 2 1 3 (4 t ) 6 se 0 t 1 se 1 t 2 se 2 t 3 se 3 t 4 Curvas e Superfícies: Curvas Racionais As curvas vistas até agora possuem uma versão racional, que são normalizadas por pesos wi Forma Inteira Bézier Forma Racional n n B J i 0 i n ,i (t ) i0 n wiBiJ wiJ i0 B-Spline n Bi N n,k (t ) i 0 n ,i n ,i (t ) (t ) n i0 n wiBiN i0 wiN i ,k i ,k (t ) (t ) A vantagem da representação racional é a invariância com relação à projeção Curvas e Superfícies: Curvas Racionais De forma geral, para cada ponto da curva temos: n P (t ) B J n,i (t ) w i 0 W i para as curvas de Bézier n P w (t ) BiW N i ,k (t ) i 0 para as curvas B-Splines Curvas e Superfícies: Curvas Racionais Para o caso específico da B-Spline, se o conjunto de nós for não-uniforme, e a curva tratar-se de uma superfície racional, ela é chamada de Non Uniform Rational Base Spline, mais conhecida como NURBS As curvas racionais, principalmente as NURBS, têm se tornado muito populares, sobretudo em sistemas complexos como CAD. Controlando os pesos, podemos controlar a suavidade da curva próximo aos pontos de controle correspondentes. B0 B2 B4 w3 0.1 B6 0 .5 4 .0 B1 B3 B5 Curvas e Superfícies: Superfícies Bézier As superfícies de Bézier são uma extensão direta das curvas de Bézier, uma vez que basta apenas acrescentar mais uma dimensão. A expressão para as superfícies de Bézier é a seguinte: n m P(s, t ) Bi , j J i ,n (s) J j ,m (t ) 0 s, t 1 i 0 j 0 P(s, t ) SMBG BMTBTT P(s, t ) [s 3 s 2 1 3 3 3 6 3 MB 3 3 0 0 0 1 T B s 1]M BGBM [t 1 0 0 0 3 P0, 0 P 1, 0 GB P2,0 P3,0 t 2 t 1] P0,1 P0, 2 P1,1 P2,1 P1, 2 P2, 2 P3,1 P3, 2 P0,3 P1,3 P2,3 P3,3 Curvas e Superfícies: Superfícies B-Splines As superfícies de B-Splines, como as superfícies de Bézier, são uma extensão direta das curvas de B-Splines, uma vez que basta apenas acrescentar mais uma dimensão. A expressão para as superfícies de Bézier é a seguinte: n m P(s, t ) Bi , j Ni ,k ( s) N j ,l (t ) i 0 j 0 P3, 0 P3,1 P3, 2 P3,3 P2,3 P1,3 P2, 0 P0,3 P1, 0 P0, 0 P0,1 P0, 2 0 s, t 1 Curvas e Superfícies: Superfícies Racionais Assim como as curvas, as superfícies possuem a versão racional, e da mesma forma são normalizadas por pesos wi P ( s, t ) Bézier Forma Inteira n m Bi , j J i ,n ( s) J j ,m (t ) Forma Racional n m i0 i 0 j 0 j0 n n m B i 0 j 0 i, j n N i ,k ( s ) N j ,l (t ) j ,m (t ) m i0 B-Spline w i , j B i , j J i ,n ( s ) J j0 w i, j J i,n ( s ) J j ,m (t ) m i0 j0 n w i, j B i, j N (s)N j ,l (t ) m i0 i ,k j0 w i, j N i ,k (s)N j ,l (t ) Curvas e Superfícies: NURBS em OpenGL Para desenhar uma curva de Bézier em OpenGL, são necessários 2 passos básicos: 1- Definir um avaliador através da função glMap1 2 - Avaliar o polinômio criado em 1 através da função glEvalCoord1 glMap1(Glenum target, Type t0, Type t1, GLint Stride, GLint order, TYPE *points) • target: define que tipo de ponto tem a curva, exemplo: GL_MAP1_VERTEX_3 • t0: valor mínimo da faixa a ser avaliada, exemplo, 0.0 • t1: valor máxima da faixa a ser avaliada, exemplo, 1.0 • stride: número de pontos-flutuantes entre cada par de ponto de controle sequencial • ordem: significa que o grau do polinômio criado é n = ordem -1 • *points: ponteiro para o primeiro elemento de um vetor de pontos de controle glEvalCoord1(Type u): esta função avalia o polinômio criado com glMap1 para a faixa de valores t0-t1. Curvas e Superfícies: as curvas de Bézier Funções para Usar no Lab // variável Global para os Pontos de Controle •GLfloat ctrlpoints[4][3] = { {-4.0, -4.0, 0.0}, {-2.0, 4.0, 0.0}, {2.0, -4.0, 0.0}, {4.0, 4.0, 0.0}}; // Função na Main para a criação da Curva glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]); glEnable(GL_MAP1_VERTEX_3); Curvas e Superfícies: as curvas de Bézier Funções para Usar no Lab void Desenha2() { int i; // avaliação da Curva glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.0, 0.0, 0.0); glBegin(GL_LINE_STRIP); for (i=0; i <=30; i++) glEvalCoord1f((GLfloat) i/30.0); glEnd(); // Plotagem dos pontos de controle glPointSize(5.0); glColor3f(1.0, 0.0, 0.0); glBegin(GL_POINTS); for (i=0; i < 4; i++) glVertex3fv(&ctrlpoints[i][0]); glEnd(); glFlush(); } Curvas e Superfícies: as curvas de Bézier Resultado