Curvas e Superfícies Paramétricas Leandro Tonietto Computação Gráfica Jogos Digitais ltonietto@unisinos.br http://professor.unisinos.br/ltonietto/jed/cgr/curvas.pdf 5-12 Baseado nos slides do professor Christian Hofsetz
Sumário! Curvas! Hermite! Bezier! B-Splines! Tarefa! Demo! Referências 09/05/12 Leandro Tonietto 2
Introdução! Modelagem: malha poligonal X superfícies/curvas! Superfícies produzem malhas de polígonos com poucos parâmetros! Malhas de polígonos tem pelo menos tantos parâmetros quanto vértices...! Menos parâmetros significa construção e edição mais rápida! Superfícies mais suaves! Normais podem ser calculadas corretamente em qualquer ponto da superfície.! Nas malhas poligonais, no máximo por vértice.! Facilidade para animação, em relação a malha de polígonos.! Superfícies e curvas paramétricas serão utilizadas na disciplina de animação. 09/05/12 Leandro Tonietto 3
Curvas Paramétricas! Superfícies são formadas por curvas.! Algumas curvas podem ser geradas com funções do tipo y=f(x) ou x=f(y). Exemplos: parábolas.! Curvas paramétricas são dependentes de um parâmetro paramétrico: x=f(u) e y=g(u). Este parâmetro não é parte dos pontos da curva.! Uma função independente para cada eixo em cada ponto, ao longo do tempo. 09/05/12 Leandro Tonietto 4
Curvas! Exemplos:! Desenho da trajetória de um projétil! Uma função para determinar a altura do projétil (y) e outra determinar distância do projétil (x).! Neste caso, o algoritmo avaliar as funções num determinado instante para saber qual x e qual y do projétil naquele instante.! Para qualquer curva a teoria é a mesma: um função avaliada em um determinado instante! Círculo, com raio 1, centrado na origem e com t=[0,360)! x = cos(t)! y = sin(t)! Equação paramétrica do círculo (raio R, centro C):! x = cos(t) * R + Cx! y = sin(t) * R + Cy! Uma curva qualquer:! x = sin(t)! y = t*t 09/05/12 Leandro Tonietto 5
Curvas! Como gerar curvas?! Uma função para cada eixo, dados os pontos inicial e final interpolar os demais pontos.! Como interpolar dois pontos?! Avaliar a função a cada instante t! Como misturar duas linhas?! Matrizes para misturar duas linhas e produzir uma curva.! Solução: curvas paramétricas.! Definição! Equação paramétrica da linha:! x = x 0 t + (1-t)x 1! y = y 0 t + (1-t)y 1! z = z 0 t + (1-t)z 1 09/05/12 Leandro Tonietto 6
Curvas! Representação genérica da curva em 3D: Q(t) = [x(t) y(t) z(t)]! Onde: x(t), y(t) e z(t) são denominadas funções-base. 09/05/12 Leandro Tonietto 7
Curvas! Tipos de função base:! f(t) = at + b! f(t) = at 2 + bt + c! f(t) = at 3 + bt 2 + ct + d 09/05/12 Leandro Tonietto 8
Curvas! Curvas paramétricas cúbicas 2D:! f(t) = at 3 + bt 2 + ct + d! x(t) = a x t 3 + b x t 2 + c x t + d x! y(t) = a y t 3 + b y t 2 + c y t + d y + = t t 09/05/12 Leandro Tonietto 9
Curvas! Em 3D: 09/05/12 Leandro Tonietto 10
Curvas! Como especificar estas curvas:! Diretamente, informando os 12 valores para as equações (ax, bx,... cz, dz).! Indiretamente, dados alguns pontos, traçar a curva que passará por eles.! Facilita para o usuário. 09/05/12 Leandro Tonietto 11
Curvas! Aproximação X Interpolação! Dado um número n de pontos para traçar uma curva:! Interpolar os pontos (passar todos eles)! Aproximar os pontos (pontos que definem a convex hull da curva) 09/05/12 Leandro Tonietto 12
Curvas! Aproximação X Interpolação X! Curvas são expressas como interpolação polinomial.! O resulta pode não ser o esperado, por causa das oscilações.! A aproximação permite obter resultados mais interessantes. 09/05/12 Leandro Tonietto 13
Curvas! Segmentos de curvas:! Cada polinômio, de cada equação geral, possui 4 coeficientes; 4 condições são necessárias: Q(t) = [x(t) y(t) z(t)] = [t 3 t 2 t 1] a x a y a z b x b y b z c x c y c z d x d y d z 09/05/12 Leandro Tonietto 14
! Forma geral para representação das curvas:! Matriz de geometria (G) e Matriz de Base (M) Curvas! Na disciplina veremos as Matrizes M de que fixa para cada tipo de curva.! A matriz G é dada pelos pontos de controle, portanto, parâmetros da curva Pontos de controle Regra ou equações da curva 09/05/12 Leandro Tonietto 15
Curvas - Hermite! Curva é determinada por dois pontos de controle e dois vetores que determinam a tangente da curva nestes dois pontos, além das derivadas nestes dois pontos.! É feita a interpolação dos pontos da curva.! Para uma curva Hermite temos então:! P 1 e P 4, que são os pontos de início e fim! R 1 e R 4, que são os vetores de tangente em cada um dos pontos. 09/05/12 Leandro Tonietto 16
Curvas - Hermite! Exemplos de curvas Hermite: 09/05/12 Leandro Tonietto 17
Curvas - Hermite! Mistura de funções dadas pelos pontos de controle P1 e P4 e pelos vetores tangentes R1 e R4:! Um ponto em uma curva Hermite num instante t, é dado pela ponderação do valor de cada uma das curvas dos fatores de controle no instante t. 09/05/12 Leandro Tonietto 18
Curvas - Hermite! Polinômino que define cada uma das curvas é:! x(t) = P x = a x t 3 + b x t 2 + c x t + d x! De acordo com a solução proposta:! Para t = 0 (instante inicial):! P1 x = a x 0 3 + b x 0 2 + c x 0 + d x ; ou M Hx =[ 0 0 0 1 ] T! Para t = 1 (instante final):! P4 x = a x 1 3 + b x 1 2 + c x 1 + d x ; ou M Hx =[ 1 1 1 1 ] T! Tangentes (R1 e R4) podem ser obtidas pela derivada:! Para t = 0 (no instante inicial):! R1 x = 3a x 0 2 + 2b x 0 1 + c x 0 0 + 0; ou M Hx =[ 0 0 1 0 ] T! Para t = 1 (no instante final):! R4 x = 3a x 1 2 + 2b x 1 1 + c x 1 0 + 0; ou M Hx =[ 3 2 1 0 ] T 09/05/12 Leandro Tonietto 19
Curvas - Hermite! Formulação para Hermite (Q(t)=TMG):! T é invariante: [t 3 t 2 t 1]! G: G H = P 1 P 4 R 1 R 4 G Hx = P 1x P 4x R 1x R 4x G Hy = P 1y P 4y R 1y R 4y 09/05/12 Leandro Tonietto 20
Curvas - Hermite! M H : M H = 0 0 0 1 1 1 1 1 0 0 1 0 3 2 1 0-1 = 2-2 1 1-3 3-2 -1 0 0 1 0 1 0 0 0 09/05/12 Leandro Tonietto 21
Curvas - Hermite! Função de mistura Hermite: [t 3 t 2 t 1] 2-2 1 1-3 3-2 -1 0 0 1 0 1 0 0 0 P 1 P 4 R 1 R 4 09/05/12 Leandro Tonietto 22
Curvas - Hermite! Q(t) é soma ponderada dos elementos G H. Revolvendo a multiplicação das matrizes: 09/05/12 Leandro Tonietto 23
Curvas - Hermite! Algoritmo para geração de inc pontos: WG=0.5; // Fator atenuação das tangentes T1 e T2 x0 = X[0], y0 = Y[0]; for(t=0; t<=1; t += inc) { x =(( 2*pow(t,3) -3*pow(t,2) +0*t +1)*X[i]+ (-2*pow(t,3) +3*pow(t,2) +0*t +0)*X[i+1]+ ( 1*pow(t,3) -2*pow(t,2) +1*t +0)*WG*T1X+ ( 1*pow(t,3) -1*pow(t,2) +0*t +0)*WG*T2X); y =(( 2*pow(t,3) -3*pow(t,2) +0*t +1)*Y[i]+ (-2*pow(t,3) +3*pow(t,2) +0*t +0)*Y[i+1]+ ( 1*pow(t,3) -2*pow(t,2) +1*t +0)*WG*T1Y+ ( 1*pow(t,3) -1*pow(t,2) +0*t +0)*WG*T2Y); plot(x,y); // ou para a linha // plotline(x0,y0,x,y); // x0 = x; y0 = y; } 09/05/12 Leandro Tonietto 24
Curvas - Bézier! Pierre Bézier, projetista da Renault, nos anos 70, criou modelos matemáticos para representar curvas e superfícies a partir de alguns pontos de controle. Objetivo: facilitar a mudança das formas.! Curvas de Bézier são computadas com o algoritmo de De Casteljau.! Utiliza 4 polinômios de ordem 3 para determinar a ponderação dos pontos da curva.! Funções de mistura são a base da Bézier! Também chamadas de polinômio de Bernstein! Forma geral dos polinômios:! b i n (u) = c i u i (1 u) n i 09/05/12 Leandro Tonietto 25
Curvas - Bézier! Polinômio de Berstein Polinômios de Bernstein de grau 3 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 b03(u) b13(u) b23(u) b33(u) 0.1 0 0 0.2 0.4 0.6 0.8 1 u 09/05/12 Leandro Tonietto 26
Curvas - Bézier! Existe uma relação entre Hermite e Bézier: os vetores tangentes iniciais e finais são determinados pelos vetores P1P2 e P3P4 e são relacionados com R1 e R4 na Hermite da seguinte forma: 09/05/12 Leandro Tonietto 27
Curvas - Bézier! Propriedades:! Primeiro e último pontos são interpolados! A tangente no primeiro ponto de controle é paralela a linha que liga o primeiro e o segundo ponto de controle! A tangente do último é paralela a linha ligando o penúltimo e o último ponto de controle! A curva fica inteiramente dentro do convex hull dos pontos de controle! As polinomiais de Bernstein (funções de base) somam 1 e são sempre positivos! Podem ser renderizadas de várias formas! Por exemplo, algoritmo de subdivisão, De Casteljau 09/05/12 Leandro Tonietto 28
09/05/12 Leandro Tonietto 29 Curvas - Bézier! Forma matricial = = = 1 3 3 1 0 3 6 3 0 0 3 3 0 0 0 1 ] [1 ) ( ) ( 3 2 `1 0 3 2 03 B B B u u u u u M M p p p p M p p é a matriz de coeficientes da base Bézier onde
Curvas - Bézier! Desenho da curva de Bézier:! Renderização por segmentos de reta (linha poligonal)! Evoluir ou obter pontos observando a curva em cada instante u = u 1, u 2,..., u n.! Intervalo entre u i e u i+1 determina a qualidade e custo de amostragem da curva.! É possível implementar o algoritmo usando incrementos diferenciados para u: quando mais alta a curvatura, maior a amostragem! Formas de desenho:! Evoluir polinômios de Berstein! Implementar algoritmo de De Casteljau 09/05/12 Leandro Tonietto 30
Curvas - Bézier! Algoritmo: x0 = X[0], y0 = Y[0]; for(t=0; t<=1; t+=inc){ x=((-1*pow(t,3) +3*pow(t,2) -3*t +1)*X[i] + ( 3*pow(t,3) -6*pow(t,2) +3*t +0)*X[i+1] + (-3*pow(t,3) +3*pow(t,2) +0*t +0)*X[i+2] + ( 1*pow(t,3) +0*pow(t,2) +0*t +0)*X[i+3]); y=((-1*pow(t,3) +3*pow(t,2) -3*t +1)*Y[i] + ( 3*pow(t,3) -6*pow(t,2) +3*t +0)*Y[i+1] + (-3*pow(t,3) +3*pow(t,2) +0*t +0)*Y[i+2] + ( 1*pow(t,3) +0*pow(t,2) +0*t +0)*Y[i+3]); plot(x, y); // ou para a linha // plotline(x0,y0,x,y); // x0 = x; y0 = y; } 09/05/12 Leandro Tonietto 31
Curvas Algoritmo De Casteljau! Slides da referência [6] p 10 p 20 p 11 p 02 p 12 u = 0.5 p 01 p 03 p 21 p 00 p 30 09/05/12 Leandro Tonietto 32
Curvas Continuidade! Para assegurar a continuidade entre segmentos de curva, definem-se restrições adicionais de continuidade:! 2 tipos de continuidade:! Continuidade paramétrica, denotada por C n onde n = graus de continuidade! Continuidade geométrica, denotada por G n 09/05/12 Leandro Tonietto 33
Curvas Complexas! Uma Bezier ou Hermite cúbica pode representar apenas um conjunto pequeno de curvas! No máximo dois pontos de inflexão! É possível resolver aumentando o grau das equações? Só que:! Mais pontos de controle e polinomiais com expoentes mais alto! Problemas:! Precisão! Controle não é local um ponto influencia toda a curva!! Solução: juntar curvas cúbicas!! A curva final pode ser separada em várias partes, cada uma delas representada por uma curva paramétrica cúbica! Controle local: Cada ponto de controle influencia apenas uma parte limitada da curva! Interação e projeto é muito mais fácil 09/05/12 Leandro Tonietto 34
Curvas Complexas! Bézier com 7 pontos de controle 09/05/12 Leandro Tonietto 35
Curvas Complexas! Continuidade C 0 : Último ponto da primeira = primeiro ponto da segunda! Continuidade C 1 : C 0 e segmento p 2 p 3 da primeira com mesma direção e comprimento que o segmento p 0 p 1 da segunda! Continuidade C 2 : C 1 e + restrições sobre pontos p 1 da primeira e p 2 da segunda p 1 p 2 p 3 p 0 p 3 p 0 p 1 Slide de [6] 09/05/12 Leandro Tonietto 36 p 2
Curvas Complexas! Continuidades (em [7])... 09/05/12 Leandro Tonietto 37
Curvas B-Splines! Spline Cúbica Natural:! Usada para calcular curvatura natural de objetos como uma barra ou fita metálica.! Pontos de controle influenciam sobre toda a curva.! Forma geral: f K (x)=a 3 (x-x k ) 3 + a 2 (x-x k ) 2 + a 1 (x-x k ) + a 0! B-Splines são uma versão simplificado SCN.! Implementa controle local sobre os pontos.! Na mudança de um ponto p i, apenas o p i-1 e o p i+1 sofrem mudanças.! Faz aproximação aos pontos.! Curvas de ponderação. 09/05/12 Leandro Tonietto 38
Curvas B-Splines! Definição genérica:! Para m+1 pontos de controle! M >= 3 P0,P1,..,Pn! Teremos curvas com m-2 segmentos! Q3,Q4,..,Qm 09/05/12 Leandro Tonietto 39
Curvas B-Splines uniformes! Significa que a variável paramétrica não está espaçada em intervalos uniformes*! Cada um dos m-2 segmentos é definido por 4 dos m+1 pontos de controle! Segmento Q i = P i-3, P i-2, P i-1, P i! GS=[P i-3 P i-2 P i-1 P i ], 3 <= i <= m 09/05/12 Leandro Tonietto 40
Curvas B-Splines uniformes! Os valores u i do espaço de parâmetro que delimitam os intervalos são chamados de nós! Podemos pensar em intervalos regulares por enquanto (B-Splines uniformes) isto é, u i = 1 B i 1 (u) B i (u) B i+1 (u) u i 1 u i u i+1 u i+2 u i+3 u i+4 u 09/05/12 Leandro Tonietto 41
09/05/12 Leandro Tonietto 42 Curvas B-Splines uniformes! Funções de mistura: i i i i p t p t t t p t t p t Q t 6 6 1 3 3 3 6 4 6 3 6 ) (1 ) ( 3 1 2 3 2 2 3 3 3 + + + + + + + = 0 <=1 <= t
Curvas B-Splines uniformes! Algoritmo: x0 = X[0], y0 = Y[0]; for(t=0; t<=1; t+=inc) { x=(((-1*pow(t,3) +3*pow(t,2) -3*t +1)*X[i] + ( 3*pow(t,3) -6*pow(t,2)+0*t+4)*X[i+1] (-3*pow(t,3) +3*pow(t,2)+3*t+1)*X[i+2] + ( 1*pow(t,3) +0*pow(t,2)+0*t+0)*X[i+3])/6); y=(((-1*pow(t,3) +3*pow(t,2) -3*t +1)*Y[i] + ( 3*pow(t,3) -6*pow(t,2) +0*t +4)*Y[i+1] + (-3*pow(t,3) +3*pow(t,2) +3*t +1)*Y[i+2] + ( 1*pow(t,3) +0*pow(t,2) +0*t+0)*Y[i+3])/6); plot(x0,y0,x,y); x0=x; y0=y; } 09/05/12 Leandro Tonietto 43
Curvas B-Splines não uniformes! O intervalo geométrico entre valores dos nós não é necessariamente uniforme! Logo as funções de blending não são as mesmas para cada segmento. Maior flexibilidade! NURBS = Non-uniform rational B-splines! Rational significa que os segmentos de curva podem ser expressos por razões entre polinômios cúbicos! Ex: x(t) = x(t)/w(t) 09/05/12 Leandro Tonietto 44
Curvas B-Splines não uniformes! Funções são razões! Avaliados em coordenadas homogêneas: [ x( t), y( t), z( t), w( t)]! NURBS (Non-Uniform Rational B-Splines): x(t), y(t), z(t) e w(t) são B-splines não uniformes! Vantagens:! Invariantes sob transformações perspectivas e portanto podem ser avaliadas no espaço da imagem x( t) y( t) z( t),, w( t) w( t) w( t)! Podem representar perfeitamente seções cônicas tais como círculos, elipses, etc Slide de [6] 09/05/12 Leandro Tonietto 45
09/05/12 Leandro Tonietto 46 Curvas B-Splines não uniformes Slide de [6]! Parametrização do círculo:! Por exemplo, uma parametrização conhecida do círculo é dada por! Podemos expressar essa parametrização em coordenadas homogêneas por: 2 2 2 1 2 ) ( 1 1 ) ( u u u y u u u x + = + = 2 2 1 ) ( 2 ) ( 1 ) ( u w u u u y u u x + = = =
Tarefa de programação! Tarefas de programação:! Implementar gerador de curvas! Dados os pontos de controle, desenhar curvas conforme o tipo escolhido pelo usuário:! Hermite! Bezier! B-spline! O usuário pode ainda, editar os pontos de controle; neste caso, o sistema deve redesenhar a curva com os novos pontos de controle.! Tratar cálculo de projétil como uma curva! Solicitar ao usuário um ponto inicial, uma direção e uma força. A partir destes parâmetros gerar um ponto da curva a ser desenhado. Usar fórmula do cálculo balística para isto.! Seria muito interessante mostrar um projétil se deslocando em função tempo.! É possível ainda colocar outros elementos físicos: gravidade, vento, peso e etc. 09/05/12 Leandro Tonietto 47
Tarefa de programação! Sugestão de classes 09/05/12 Leandro Tonietto 48
Demos! Bézier:! http://www.doc.ic.ac.uk/~dfg/ AndysSplineTutorial/Beziers.html! http://www.nbb.cornell.edu/neurobio/ land/oldstudentprojects/cs490-96to97/ anson/bezierpatchapplet/ 09/05/12 Leandro Tonietto 49
Referências bibliográficas 1. AGOSTON, Max K. Computer Graphics and Geometric Modeling: Implementation and Algorithms. Springer. 2005. 2. Slides sobre CG dos professores: Christian Hofsetz, Cristiano Franco, Marcelo Walter e Soraia Musse. 3. Aula de CG do prof. Márcio Pinho. Puc-RS. http://www.inf.pucrs.br/~pinho/cg/aulas/curvas/ Curvas.htm. 4. Material sobre curvas, prof. Acioli. UFF. http://www.ic.uff.br/~aconci/curvas.pdf. 5. FOLEY!! 6. Claudio Esperança, Paulo Roma Cavalcanti. Introdução à Computação. http://www.lcg.ufrj.br/cursos/cos-751/curvas-ppt. 7. WRIGHT Jr., Richard S; LIPCHAK, Benjamin; HAEMEL, Nicholas. OpenGL Superbible: Comprehenive Tutorial and Reference. 4 ed. Addison-Wesley, 2007. 09/05/12 Leandro Tonietto 50