• Nenhum resultado encontrado

03 Transformações em 2D [Parte I]

N/A
N/A
Protected

Academic year: 2021

Share "03 Transformações em 2D [Parte I]"

Copied!
52
0
0

Texto

(1)

Transformações Geométricas

Computação Gráfica – DCC065

(2)

Sumário

Tópicos da aula de hoje:

Por que transformações?

Classificação das transformações

Transformações

Translação

Escala

Rotação

Coordenadas Homogêneas

Combinando transformações

(3)

Por que transformações?

● Em CG, uma vez tendo um objeto definido,

“transformações” são utilizadas para mover este objeto, mudar seu tamanho (escala) ou rotacioná-lo.

Imagens de Hearn & Baker

(4)

Classificação das Transformações

● Transformações Rígidas

São transformações geométricas que preservam a forma, o tamanho e os ângulos dos objetos.

Elas são:

● Rotação ● Translação ● Reflexão

(5)

Classificação das Transformações

● Transformações Não-Rígidas

São transformações geométricas que preservam o paralelismo entre as linhas mas não seus

comprimentos e ângulos. Exemplo de transformações Não-Rígidas:

● Escala

(6)

Classificação das Transformações

● Transformações Lineares

Uma função (ou mapeamento ou ainda

transformação) F é linear se, para todos

os vetores v

1

e v

2

e todos escalares k:

● F(V

1+V2) = F(V1) + F(V2)

● F(kV

1) = kF(V1)

● Exemplos de transformações lineares:

● Escala ● Reflexão ● Rotação

(7)

Classificação das Transformações

● Transformações Afins

Basicamente as transformações afins são: Transformações Lineares + Translações

● Desta forma, podemos afirmar que toda

transformação linear é também afim, mas o contrário não é verdade

● Então a função y = mX+b não é linear, mas é

(8)

Classificação - Resumo

Translação

Rotação

Reflexão

Escala

Cisalhamento

Rígidas Não-Rígidas Lineares Afim

(9)

Translação

● Move um objeto de uma posição para outra

x

new

= x

old

+ dx

y

new

= y

old

+ dy

y x 0 1 1 2 2 3 4 5 6 7 8 9 10 3 4 5 6

(10)

Exemplo de Translação

y x 0 1 1 2 2 3 4 5 6 7 8 9 10 3 4 5 6 (1, 1) (3, 1) (2, 3)

● O que acontecerá ao objeto se aplicarmos

(11)

Exemplo de Translação

y x 0 1 1 2 2 3 4 5 6 7 8 9 10 3 4 5 6

● O que acontecerá ao objeto se aplicarmos

(12)

Escala

● Escalas multiplicam todas as coordenadas ● Atenção: Objetos podem mudar de lugar ao

aplicarmos operações de escala

xnew = Sx × xold ynew = Sy × yold

y x 0 1 1 2 2 3 4 5 6 7 8 9 10 3 4 5 6

(13)

Escala

● Escalas multiplicam todas as coordenadas ● Atenção: Objetos podem mudar de lugar ao

aplicarmos operações de escala

xnew = Sx × xold ynew = Sy × yold

y x 0 1 1 2 2 3 4 5 6 7 8 9 10 3 4 5 6

Como podemos fazer para que objetos não sofram alteração de posição?

(14)

Exemplo de Escala

y 0 1 1 2 2 3 4 5 6 7 8 9 10 3 4 5 6 (1, 1) (3, 1) (2, 3)

● O que acontecerá ao objeto se aplicarmos

(15)

Exemplo de Escala

y 0 1 1 2 2 3 4 5 6 7 8 9 10 3 4 5 6

● O que acontecerá ao objeto se aplicarmos

(16)

Rotação

● Rotaciona todas as coordenadas por um

ângulo específico

xnew = xold × cosθ – yold × sinθ ynew = xold × sinθ + yold × cosθ

● Pontos sempre serão rotacionados em

relação a origem y x 0 1 1 2 2 3 4 5 6 7 8 9 10 3 4 5 6

(17)

Rotação

Atenção!

Muitas linguagens (como C e C++) já possuem funções trigonométricas implementadas. Nestas funções, normalmente, o ângulo a ser passado como parâmetro deve estar em radianos e não em graus. Se necessário, para converter de

graus (g) para radianos (r), utilize a seguinte fórmula:

Em OpenGL as funções de rotação utilizam

(18)

Exemplo de Rotação

y 0 1 1 2 2 3 4 5 6 7 8 9 10 3 4 5 6 (3, 1) (5, 1) (4, 3)

● O que acontecerá ao objeto se aplicarmos

(19)

Exemplo de Rotação

Primeiro, vamos calcular o ângulo em radianos (no exercício g = 30)

r = g * PI / 180 = 0,5235

Vamos agora calcular as funções trigonométricas

cos(0.5235)=0.866 sin(0.5235)=0.5

Recapitulando a fórmulas

xnew = xold × cosθ – yold × sinθ ynew = xold × sinθ + yold × cosθ

(20)

Exemplo de Rotação

Basta agora calcularmos os novos pontos

x’(3, 1) = 3*0.866 – 1*0.5 = 2.598 – 0.5 = 2.098 y’(3, 1) = 3*0.5 + 1*0.866 = 1.5 + 0.866 = 2.366 x’(5, 1) = 5*0.866 – 1*0.5 = 4.33 – 0.5 = 3.83 y’(5, 1) = 5*0.5 + 1*0.866 = 2.5 + 0.866 = 3.366 x’(4, 3) = 4*0.866 – 3*0.5 = 3.46 – 1.5 = 1.96 y’(4, 3) = 4*0.5 + 3*0.866 = 2.0 + 2.598 = 4.598

(21)

Exemplo de Rotação

y 0 1 1 2 2 3 4 5 6 7 8 9 10 3 4 5 6 ● Resultado (2.09, 2.36) (3.83, 3.36) (1.96, 4.59)

(22)

Representando transformações

● Podemos representar as transformações

através de matrizes

● Esta forma de representação tem como

vantagem básica permitir que em uma única matriz represente a combinação de várias transformações.

(23)

Escala

● A escala de um ponto por

(s

x

, s

y

)

pode ser

(24)

Rotação

● A rotação de um ponto em relação a origem

(25)

Translação

● Defina agora a matriz 2 x 2 que nos

possibilite representar operações de translação:

(26)

Translação

● Defina agora a matriz 2 x 2 que nos

possibilite representar operações de translação:

Não é possível representar matrizes 2 x 2 para resolver esse problema.

(27)

Por que usar coordenadas

homogêneas?

● As operações de translação, rotação e

escala podem ser facilmente executadas com o uso de matrizes.

● Porém, enquanto as operações de rotação e

escala podem ser concatenadas numa única matriz (pela multiplicação prévia de suas

respectivas matrizes) as operações de

translação ainda têm de ser conduzidas em separado, uma vez que sua aplicação

(28)

Por que usar coordenadas

homogêneas?

● Usando coordenadas homogêneas,

representaremos transformações em 2D

através de matrizes 3 x 3 e transformações em 3D através de matrizes 4 x 4

● Com isso, poderemos concatenar todas as

matrizes de transformação numa única matriz global de transformação que será aplicada a todos os pontos da cena

(29)

Coordenadas Homogêneas

● Um ponto

(x, y)

pode ser reescrito em

coordenadas homogêneas como

(x

h

, y

h

, h)

O parâmetro

h

é um valor diferente de zero tal

que:

Deste modo, o ponto cartesiano (x, y)

corresponde à uma infinidade de triplas

(hx, hy,

h)

, incluindo o caso particular de

(x, y, 1)

(30)

Escala

● A escala de um ponto por

(s

x

, s

y

)

pode ser

reescrita matricialmente em coordenadas homogêneas como:

(31)

Rotação

● Já a rotação de um ponto em relação a

(32)

Translação

● Finalmente a translação de um ponto por

(dx, dy)

pode ser reescrita matricialmente como:

(33)

Transformações Inversas

● Transformações podem ser facilmente

(34)

Combinando Transformações

● Como já visto, várias transformações podem

ser combinadas em uma única matriz para facilitar o processamento

● Permitido pelo fato de usarmos coordenadas homogêneas

● Imagine rotacionar um polígono em volta de

um ponto que não seja a origem:

● Translade o centro do polígono para a origem ● Rotacione normalmente em relação a origem ● Faça a translação inversa

(35)

Combinando Transformações

(cont…)

1 2

(36)

Combinando Transformações

(cont…)

1 2 3 4 Exemplo:

(37)

Combinando Transformações

(cont…)

1 2 3 4 Exemplo:

(38)

Combinando Transformações

(cont…)

1 2 3 4 Exemplo:

(39)

Combinando Transformações

(cont…)

● As três transformações seriam combinadas

da seguinte forma

Lembre-se: Multiplicação de matrizes não é uma

operação comutativa, então a ordem IMPORTA!

(40)

Combinando Transformações

(cont…)

● A ordem de execução é a seguinte:

1º 2º

(41)

Resumo das operações

● Translação

x

new

= x

old

+ dx

y

new

= y

old

+ dy

● Escala xnew = Sx × xold ynew = Sy × yold ● Rotação

xnew = xold × cosθ – yold × sinθ ynew = xold × sinθ + yold × cosθ

(42)

Resumo das operações

Translação:

Escala:

(43)

Transformações Geométricas com OpenGL ● Os principais comandos em OpenGL para

realizar as transformações geométricas são os seguintes:

glTranslatef(dx, dy, dz);

glScalef(sx, sy, sz);

(44)

Transformações Geométricas com OpenGL

● Na próxima aula aprenderemos como utilizar

pilhas de matrizes, mas para o exercício de hoje basta sabermos sobre este assunto que é possível "salvar" a posição inicial do

sistema de transformações geométricas utilizando os comandos:

glPushMatrix(); glPopMatrix();

(45)

Transformações Geométricas com OpenGL ● Exemplo. Imagine que

queremos gerar a

imagem ao lado. Nesta imagem queremos desenhar 5 círculos, com a esfera da esquerda na posição (-10, 0) e a esfera da direita na posição (10, 0)

(46)

Transformações Geométricas com OpenGL

● Sem armazenarmos a posição inicial teríamos, por

exemplo, o seguinte código:

glTranslatef(-10.0, 0.0, 0.0); // Posiciona primeira esfera

for(int i = 0; i <= 5; i++) // Usado apenas como contador

{

glutSolidSphere(1, 20, 20); // Desenha esfera

glTranslatef(5, 0, 0); // Vai para próxima posição

}

for(int i = -10; i <= 10; i+=5)

{

glPushMatrix(); // Armazena posição inicial

// A partir da origem, move para a posição desejada

glTranslatef(i, 0, 0);

glutSolidSphere(1, 20, 20); // Desenha esfera

glPopMatrix(); // Descarta translação realizada

}

● Se armazenarmos a posição inicial teríamos, por

(47)

Saiba mais!

Computer Graphics, C Version

Capítulo 5

Neste capítulo você encontrará uma abordagem teórica

interessante a respeito de

(48)

Saiba mais!

Computação Gráfica - Teoria e

Prática.

Capítulo 2

Este capítulo traz boas definições a respeito do tema desta aula

incluindo uma seção que trata do assunto em OpenGL.

(49)

49

Saiba mais!

Mathematics for Computer

Graphics

Capítulo 7

Uma abordagem mais matemática dos temas abordados nesta aula pode ser encontrada neste capítulo do livro do John Vince. Todas as

deduções matemáticas das

formulações que utilizamos estão abertas neste capítulo.

(50)

Saiba mais!

OpenGL Programming Guide

Seventh Edition

Capítulo 3 e Apêndice C

O Capítulo 3 trata dos comandos de transformação em OpenGL e o Apêndice C desta referência trata das coordenadas homogêneas e um breve resumo sobre matrizes de transformação.

(51)

Saiba mais!

Learn OpenGL

Capítulo 8

Neste capítulo há uma revisão de conceitos matemáticos sobre operações com vetores e

matrizes e como utilizá-los em OpenGL/GLSL utilizando a

(52)

Exercício 1

● Crie de forma iterativa, através de translações, o tabuleiro ao lado com

dimensões -3.0 a 3.0 em todos os eixos (glOrtho terá essas dimensões).

● Crie um pequeno círculo de lado 1 que será movimentado pelos espaços do tabuleiro.

● A movimentação será realizada com as teclas 'w','a','s','d' e o círculo não poderá ser movido para fora do tabuleiro.

Dica 1: Cada quadrado do tabuleiro poderá ser feito manualmente ou com a

função glutSolidCube (pesquise os parâmetros).

Dica 2: Utilize a função glutSolidSphere para criar o círculo vermelho.

Pesquise os parâmetros desta função.

Dica 3: É possível desenhar apenas os espaços pretos ou brancos

Referências

Documentos relacionados

– Projeto de decisão dos Representantes dos Governos dos Estados-Membros, reunidos no Conselho que autoriza a Comissão Europeia a encetar negociações e a negociar, em nome

Esta descrição, além de intentar compreender o papel dessa experiência na vida do crente, aponta também para uma possibilidade de união de propósitos prevista no ecumenismo, haja

O objetivo deste módulo é descrever aos alunos como as atualizações parciais da página e o armazenamento em cache podem otimizar a capacidade de resposta de um aplicativo

Serviços Especializados -Atividades Típicas de Ser­ vidor do Quadro da Instituição&#34; (Tribunal de Contas da União) (vol. 5) 247 - Ver &#34;Cautelas e Formalidades Necessárias

unidade de volume, modo como as partículas se acomodam etc. Com relação ao estudo dessa variável, deve-se considerar que, para valores da percentagem em peso superiores

O USO DE TECNOLOGIAS NO PROCESSO DE CONSTRUÇÃO DO CONHECIMENTO DE ALUNOS DEFICIENTES VISUAIS E OUTRAS DEFICIÊNCIAS ASSOCIADAS AUTOR: MILENE CORDEIRO VIANA ORIENTADOR: ANA CLÁUDIA

(iv) É aplicável o art. 485, §§ 4° e 5°, do Código de Processo Civil, no âmbito da ação de desapropriação? Essas questões são respondidas mediante o