• Nenhum resultado encontrado

Extra 04 - Curvas Interativas

N/A
N/A
Protected

Academic year: 2021

Share "Extra 04 - Curvas Interativas"

Copied!
59
0
0

Texto

(1)

Curvas Interativas

Computação Gráfica – DCC065

(2)

Sumário

Nesta aula estudaremos as curvas interativas

seguindo os seguintes tópicos

● Introdução ● Curvas Interativas ● Curvas Cúbicas ● Curvas de Bézier ● B-Splines ● B-Spline Cúbica

● B-Spline Cúbica Uniforme e Não-uniformes ● Curvas e OpenGL

(3)

Introdução

Curvas e superfícies são objetos

matemáticos fundamentais na modelagem de

objetos gráficos.

Uma das representações mais utilizadas

para curvas e superfícies é a baseada em

funções paramétricas.

(4)

Introdução

Considere, por exemplo, um projetista que

precisa editar uma forma muito complexa,

alterando a posição de cada um dos pontos

de uma malha densa.

Esta forma de interação é muito pouco

prática e ineficiente.

Para contornar este problema é necessário

formas de representação mais compactas e

que facilitem o processo de criação e

(5)

Construção Interativa de Curvas

● Um esquema de representação apropriado para

interação é o baseado em um tipo especial de representação paramétrica.

● Tal representação é caracterizada por dois

conjuntos:

● Um conjunto de pontos discretos denominados

pontos de controle.

Um conjunto de funções de base ou funções

(6)

Definição de Curvas Interativas

Considere um conjunto de pontos de

controle P

0

, P

1

, P

2

, P

3

onde P

i

, i=0,..,3 e Px

i

,

Py

i

, Pz

i

indicam as coordenadas de cada

ponto P

i

.

P0

P1 P2

(7)

Definição de Curvas Interativas

Pode-se determinar uma curva paramétrica Q(u) através

de uma expressão que pondere a contribuição das coordenadas de cada ponto de controle, para cada ponto associado a um valor de u no espaço de

parâmetros.

● A ponderação é feita através da definição de uma

função de base para cada ponto de controle.

P1 P2

(8)

Curvas Interativas - Propriedades

● Diferentes funções de base possuem diferentes

propriedades.

● Uma das propriedades diz respeito ao fato delas

gerarem curvas que interpolam ou aproximam os pontos de controle.

● Outras propriedades estão relacionadas a continuidade

e localidade da curva. P1 P2 P P1 P2 P3

(9)

Curvas Interativas - Propriedades

● Quando dois segmentos de curvas são

conectados, a continuidade da curva é alterada dependendo da forma de junção:

Continuidade C0 → funções

paramétricas são contínuas, isto é, sem “pulos”

Continuidade C1 → funções

paramétricas têm primeiras derivadas contínuas, isto é, tangentes variam suavemente

Continuidade Ck → funções

paramétricas têm k’ésimas derivadas contínuas

C0

(10)

Algoritmo de De Casteljau

● Suponha que queiramos aproximar uma

curva polinomial entre dois pontos p0 e p1 dados

● A solução natural é um segmento de reta

que passa por p0 e p1 cuja parametrização mais comum é

p (u) = (1 – u) p0 + u p1

Podemos pensar em p (u) como uma

média ponderada entre p0 e p1

Observe que os polinômios (1 – u)

e u

somam 1 para qualquer valor de u

● São chamadas de funções de mistura (blending functions)

p0

p1

(11)

Algoritmo de De Casteljau

Para generalizar a ideia para três pontos p

0

,

p

1

e p

2

consideramos primeiramente

os segmentos de reta p

0

p

1

e p

1

p

2

p01(u) = (1 – u) p0 + u p1

p11(u) = (1 – u) p1 + u p2

Podemos agora realizar uma

interpolação entre p

01

(u) e p

11

(u)

p02(u) = (1 – u) p01 (u) + u p11 (u)

= (1 – u) 2 p0 + 2 u (1 – u) p1 + u2 p2 p0 p1 p2 p11 p01 p02

(12)

Algoritmo de De Casteljau

p0 p1 p2 p11 p01 u = 0.25 p02

(13)

Algoritmo de De Casteljau

p0 p1 p2 p11 p01 u = 0.5 p02

(14)

Algoritmo de De Casteljau

p0 p1 p2 p11 p01 u = 0.75 p02

(15)

Algoritmo de De Casteljau

p0

p1

p2 p02(u)

(16)

Algoritmo de De Casteljau

● A curva obtida pode ser entendida como a “mistura”

dos pontos p0, p1 e p2 por intermédio de três funções quadráticas: ● b 02(u) = (1 – u) 2 ● b 12(u) = 2 u (1 – u)b 22(u) = u 2

● Aplicando mais uma vez a ideia podemos definir uma

função cúbica gerada por 4 pontos

p02(u) = (1 – u) 2 p0 + 2 u (1 – u) p1 + u2 p2

p12(u) = (1 – u) 2 p1 + 2 u (1 – u) p2 + u2 p3

p03(u) = (1 – u) p02 (u) + u p12 (u)

(17)

Algoritmo de De Casteljau

p0 p1 p2 p02(u) p12(u) p3 u = 0.25 p03

(18)

Algoritmo de De Casteljau

p0 p1 p2 p02(u) p12(u) p3 u = 0.5 p03

(19)

Algoritmo de De Casteljau

p0 p1 p2 p02(u) p12(u) p3 u = 0.75 p03

(20)

Algoritmo de De Casteljau

p0 p1 p2 p02(u) p12(u) p3 p03(u)

(21)

Algoritmo de De Casteljau

● Novamente temos uma curva dada pela soma de

4 funções de mistura (agora cúbicas), cada uma multiplicada por um dos 4 pontos

b 03(u) = (1 – u) 3 ● b 13(u) = 3 u (1 – u) 2 ● b 23(u) = 3 u 2 (1 – u)b 33(u) = u 3

Em geral, uma curva de grau n pode ser

(22)

Curvas de Bézier

● Uma curva de Bézier é uma parametrização que

utiliza a base de Bézier, também denominadas funções de mistura de Bernstein.

● São curvas construídas pelo algoritmo de

De Castejau

A base de Bézier de grau 3 é dada pelos

seguintes termos: 0.2 0.4 0.6 0.8 0.2 0.4 0.6 0.8 B0,3 B1,3 B2,3 B3,3 u

(23)

Forma Matricial da Base Bézier

● Podemos escrever a equação para uma curva

de Bézier cúbica na forma

(24)

Propriedades de Curva de Bézier

● O grau da curva (do polinômio) é dado pelo número de

pontos do polígono de controle menos 1

● A curva de Bézier está contida no fecho convexo do

polígono de controle

Os polinômios de Bernstein somam 1 para qualquer u

● A curva interpola o primeiro e último ponto do polígono

(25)

Propriedades de Curva de Bézier

As tangentes à curva em p

0 e pn têm a direção dos

segmentos de reta p0p1 e pn-1pn , respectivamente

● Qualquer linha reta intercepta a curva tantas ou menos

vezes quanto intercepta o polígono de controle ● Não pode oscilar demasiadamente

● Transformar os pontos de controle (transformações afim)

e desenhar a curva é equivalente a desenhar a curva transformada

(26)

Desenhando Curvas Bézier

● Curva normalmente é aproximada por uma linha

poligonal

● Pontos podem ser obtidos avaliando a curva em

u = u1, u2 ... uk

● Avaliar os polinômios de Bernstein

● Usar o algoritmo recursivo de De Casteljau

● Devemos utilizar uma quantidade de pontos

compatível com o grau de suavidade que desejamos para o curva

● Clique neste link para ver uma demonstração da

(27)

Curvas Longas

Curvas Bézier com k pontos de controle são de grau

k – 1

● Curvas de grau alto são difíceis de desenhar

● Complexas

● Sujeitas a erros de precisão

● Normalmente, queremos que pontos de controle

tenham efeito local

● Em curvas Bézier, todos os pontos de controle têm efeito global

● Solução:

● Emendar curvas polinomiais de grau baixo ● Relaxar condições de continuidade

(28)

Emendando Curvas Bézier

Condições para construção das "emendas":

● Continuidade C0 é obtida se o último ponto da primeira curva for

igual ao primeiro ponto da segunda

● Continuidade C1: deve-se obter se C0 e garantir que o segmento

p2p3 da primeira curva tenha a mesma direção e comprimento que o segmento p’0p’1 da segunda curva

● Continuidade C2: deve-se obter C1 e adicionar mais restrições

sobre pontos p’1 da primeira e p’2 da segunda

p0

p1 p2 p'3

p3 p'0

(29)

B-Splines - Motivação

● Curvas de Bézier possuem duas grandes

desvantagens:

● O controle exercido pelos pontos de controle

não é local. A movimentação de um ponto

altera toda curva, apesar de sua influência ser maior na vizinhança de tal ponto.

● Não é possível definir uma curva de Bézier

cúbica para aproximar ou representar um conjunto de n pontos sem utilizar múltiplos segmentos de curva.

● Uma representação que não possui tais

(30)

B-Splines

Originalmente, uma

spline

é uma ferramenta

de desenho.

Consiste em uma tira de metal flexível usada

para desenhar curvas fixando-se

pesos

a

(31)

B-Splines

B-Splines não passam pelos pontos de

controle, nem em suas extremidades.

Uma B-Spline é uma curva completa

polinomial por partes consistindo de um

conjunto de segmentos.

P0

P3

(32)

B-Splines

Uma B-spline é composta por uma série de m-2

segmentos de curva Q3,Q4,…,Qm definidos por m+1 pontos de controle P0,P1,…,Pm, m≥3.

● Cada segmento de curva é definido por quatro pontos de

controle e 4 funções de mistura. Cada ponto de controle influencia no máximo 4 segmentos de curva.

● Para facilitar a notação serão abordadas apenas

P0 P1 P 2 P3 P4 P5 Q3 Q4 Q5

Q3 é definido por P0P1P2P3 e ponderado por B0B1B2B3 Q4 é definido por P1P2P3P4 e ponderado por B0B1B2B3 Q5 é definido por P2P3P4P5 e ponderado por B0B1B2B3

(33)

B-Spline Cúbica

A movimentação de um ponto de controle

de uma B-spline afeta, no pior caso,

somente um conjunto de 4 segmentos.

Na figura abaixo a movimentação de P

4

afeta somente Q

4

e Q

5

mantendo Q

3

intacto.

P0 P1 Q3 Q4 P4 P3 Q5 P2 P4 P4

(34)

B-Spline Cúbica

Um B-Spline exibe continuidade

C

0

(posicional), C

1

(da primeira derivada) e

C

2

(da segunda derivada).

O mecanismo que garante a continuidade

C

2

está no compartilhamento dos pontos

de controle por segmentos de curva

(35)

B-Spline Cúbica Uniforme

Cada função da base de funções de uma

B-spline é por si própria uma função

cúbica composta de 4 segmentos.

Uma função da base é diferente de zero

em 4 intervalos consecutivos no espaço

de parâmetros.

u u u u u

(36)

B-Spline Cúbica Uniforme

Os pontos associados a junções de dois

segmentos adjacentes de uma determinada

função base são denominados

nós

(em

vermelho na imagem abaixo).

O valor de u correspondente a um nó é

denominado

valor do nó

.

Uma B-spline é dita uniforme se valores dos

nós são igualmente espaçados no espaço do

parâmetro u.

(37)

B-Spline Cúbica Uniforme

No caso de B-splines uniformes os intervalos

são de mesmo comprimento.

● Isto significa que os valores dos nós são

igualmente espaçados e as funções da base são

cópias transladadas.

Uma B-spline com n pontos de controle possui

n+4 nós

0 1 2 3 4

B0(u)

5 6 7 8 9

B1(u) B2(u) B3(u) B4(u) B5(u)

(38)

B-Spline Cúbica Uniforme

● Um segmento de curva está definido em um

intervalo de ui a u

i+1.

● De fato, avaliamos 4 bases

no intervalo ui≤u≤u

i+1

0 1 2 3 4

B0(u)

5 6 7 8 9

B1(u) B2(u) B3(u) B4(u) B5(u)

P0 P1 P2 P3 P4 P5 Q3 Q4 Q5

(39)

B-Spline Cúbica Uniforme

● No exemplo abaixo, a curva soma a unidade no

intervalo 3≤u≤6

0 1 2 3 4

B0(u)

5 6 7 8 9

B1(u) B2(u) B3(u) B4(u) B5(u)

P0 P1 P2 P3 P4 Q3 Q4 Q5

(40)

B-Spline Cúbica Uniforme

No caso geral, uma B-spline não interpola pontos de

controle.

● É possível fazer com que uma B-spline interpole um

ponto de controle através da replicação de vértices.

● Intuitivamente, replicar um vértice faz com que a

curva seja atraída para tal ponto de controle, já que seu peso na ponderação é maior.

P0 P Q3 Q4 P4 P3 Q5 P Q6

(41)

B-Spline Cúbica Uniforme

O preço pago pelo uso da replicação de

pontos é a perda da continuidade C

2

da

curva.

Exemplo da replicação em pontos de

controle interiores:

P0 P 4 P3, P3 P P0 P 4 P3, P3 , P3 P

(42)

B-Splines Cúbicas Não-uniformes

● Uma B-Spline é não-uniforme (também

chamada de NURBS) quando os intervalos paramétricos entre valores de nós sucessivos não são necessariamente iguais.

● Isto significa que as função da base não são

translações umas das outras. São completamente distintas.

● O caso mais comum é aquele em que alguns

(43)

B-Splines Cúbicas Não-uniformes

● Comparação de uma B-spline uniforme e uma

não uniforme: P0 P1 P 5 P3 P2 0 u 3 P0 P1 P2 P3 P4 P5 Q3 Q4 Q5 0 1 2 3 4 B1(u) 5 6 7 8 9

B2(u) B3(u) B4(u) B5(u) B6(u) B1(u) B2(u) B3(u) B4(u) B5(u) B6(u)

(44)

B-Splines - Sumário

Sumário das propriedades de uma curva B-spline:

Segue a forma do polígono de controle e é restrita

a permanecer no fecho convexo dos pontos de controle.

● Pode ser transformada através de uma

transformação afim (translação + rotação)

aplicando-se a transformação sobre os pontos de controle.

(45)

Demonstração

Link 1

- Demonstração das curvas de Bézier

Link 2

- Demonstração de todas as curvas

(46)

Curvas e OpenGL

● OpenGL suporta curvas e superfícies através de

mecanismos denominados evaluators

(avaliadores).

Os evaluators calculam valores intermediários

para os polinômios que descrevem curvas e superfícies, dada uma sequência de pontos de controle.

Os evaluators da OpenGL são avaliadores de

Bézier.

(47)

Curvas e OpenGL

● Para utilizar um avaliador Bézier emprega-se a seguinte

função:

void glMap1f(GLenum target, GLfloat u1, GLfloat u2, Glint stride, Glint order,

const GLfloat * points);

Parâmetro Significado

Target Significado dos pontos de controle

u1 e u2 Intervalo para a variável de controle u

Stride Quantos valores float existem entre cada elemento do vetor Order Quantidade de elementos no vetor de pontos de controle Points Apontador para primeira coordenada do primeiro ponto de

(48)

Curvas e OpenGL

● Os avaliadores servem não somente para gerar curvas

de coordenadas, mas também de cores, vetores

normais, coordenadas de textura (assunto a ser visto futuramente), etc.

● Uma vez definido um avaliador, deve-se habilitá-lo

através da função glEnable sobre alguma das

Constante Significado

GL_MAP1_VERTEX_3 Coordenadas x, y e z

GL_MAP1_VERTEX_4 Coordenadas x, y, z e w (homogêneas) GL_MAP1_INDEX Índice de cor

GL_MAP1_COLOR_4 Cor com RGBA GL_MAP1_NORMAL Vetor normal

GL_MAP1_TEXTURE_COORD_1 Coordenadas de textura s. GL_MAP1_TEXTURE_COORD_2 Coordenadas de textura s e t. GL_MAP1_TEXTURE_COORD_3 Coordenadas de textura s,t e r. GL_MAP1_TEXTURE_COORD_4 Coordenadas de textura s,t,r e q.

(49)

Curvas e OpenGL

● A utilização da constante GL_MAP1_VERTEX

indica que queremos apenas a posição de cada ponto intermediário.

● O procedimento de desenho é simples: basta

percorrer os pontos intermediários desejados e

solicitar a avaliação da curva Bézier por meio da seguinte função:

glEvalCoord1f(GLfloat u)

O valor u indica o valor a ser passado para a

(50)

OpenGL – Exemplo de Curva de Bézier

#ifdef WIN32 #include <windows.h> #endif #include <GL/glui.h> #include <GL/glut.h> #define TOTAL 5

int prec = 10; // Total de pontos intermediários

float pontos[TOTAL][3] = {0.0,0.0,0.0},{0.3,1.0,0.0},{0.7,1.0,0.0},

{1.0,0.0,0.0},{0.5,0.4,0.0}}; // Pontos de controle

void init(void) {

glClearColor (0.8, 0.8, 0.8, 0.0);

// Define significado dos pontos de controle

glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, TOTAL, &pontos[0][0]); glEnable(GL_MAP1_VERTEX_3); // Ativa geração de coordenadas

glMatrixMode(GL_PROJECTION); glLoadIdentity();

glOrtho(-0.2, 1.2, -0.2, 1.2, -1.0, 1.0); glMatrixMode(GL_MODELVIEW);

(51)

OpenGL – Exemplo de Curva de Bézier

void display (void) {

float delta =1.0/(float)prec;

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glColor3f(1,0,0); glPointSize(5);

// Desenha os pontos de controle glBegin(GL_POINTS);

for (int i=0; i<TOTAL; i++) glVertex3fv(pontos[i]); glEnd();

glColor3f(0,0,1); glLineWidth(2.0);

glBegin(GL_LINE_STRIP); // Desenha a curva

for (float u=0; u<=1.01; u+=delta)

glEvalCoord1f(u); // chama o avaliador para o parâmetro f

glEnd();

glutSwapBuffers ( ); }

(52)

OpenGL – Exemplo de Curva de Bézier

(53)

OpenGL – Exemplo de Curva de Bézier

(54)

Saiba mais!

Computer Graphics, C Version

Capítulo 10 – Seção 10-8

Nesta seção são tratadas as

curvas e superfícies de Bézier e nas demais seções deste capítulo há uma abordagem mais geral

(55)

Saiba mais!

Computação Gráfica - Teoria e

Prática.

Capítulo 3

Neste capítulo são tratadas não só curvas como também superfícies. Para aqueles que querem se

aprofundar no assunto é uma leitura interessante.

(56)

Saiba mais!

OpenGL Programming Guide

Seventh Edition

Capítulo 12

Neste capítulo você encontrará informações detalhadas para utilizar os evaluators vistos até aqui na criação de curvas de Bézier e NURBS.

(57)

Resumo

Vimos hoje as curvas Interativas, em

especial as curvas de Bézier e algumas

variações de curvas Splines

A principal função dessas curvas é fornecer

uma representação suave através de um

conjunto de pontos de controle

(58)

Prática

1. Baixe o código fonte “curvasInterativas.cpp” e altere-o para que o número de pontos

intermediários seja informado pelo usuário durante a execução do programa.

2. Modifique o código do exemplo anterior adicionando 3 novos pontos de controle.

3. Crie uma interface na qual pontos de controle possam ser criados e removidos. Ao final,

(59)

Exercício

1. Utilizando a interface disponível na prática

anterior, implemente o algoritmo de De Casteljau para a criação de uma curva de Bézier cúbica.

Basicamente o algoritmo deverá gerar uma lista de pontos a ser desenhado pelo OpenGL com código apropriado.

Você poderá pesquisar códigos na internet para inspirar sua implementação (veja este link por exemplo).

Referências

Documentos relacionados

--- A Câmara deliberou, por unanimidade, certificar de acordo com as minutas propostas que se anexam ao presente termo de aprovação de minuta. --- --- A presente deliberação

Parágrafo Único: ​ Em caso de atraso do solicitante, sem aviso prévio, o (s) intérprete (s) ficará (ão) no aguardo do solicitante com até quarenta e cinco minutos

Os autores destacam três formas de abordar a resolução de problemas, que configuraram o trabalho do professor: ensinar sobre resolução de problemas, teorizando

Para alternar entre uma chamada por telefone de secretária e uma chamada por computador (ou vice-versa), basta premir o outro botão de conversação para atender a chamada recebida

Determinação do perfil de compostos orgânicos, obtido por ESI(-)MS, para classificação da origem geográfica do mel do Estado do Paraná.. GUARAPUAVA

Foram obtidas satisfatoriamente a reconstituição dinâmica e a determinação do campo de deslocamento utilizando o método interferométrico de Moiré com Deslocamento de Fase

(a) uma das formas para compatibilizar direitos consagrados na Constituição Federal de 1988 diretamente relacionados com a dignidade da pessoa humana – como o respeito à vida privada

São considerados custos e despesas ambientais, o valor dos insumos, mão- de-obra, amortização de equipamentos e instalações necessários ao processo de preservação, proteção