Baixe o app para aproveitar ainda mais
Prévia do material em texto
Computação Gráfica I aula 10 Transformações Geométricas Simples e Compostas Computação Gráfica I2 Introdução - Coordenadas Homogêneas • Objetivo: facilitar a concatenação das transformações de escala e rotações com as transformações de translação. • O Sistema de Coordenadas Homogêneas utiliza um valor adicional para representar um ponto num sistema de coordenadas qualquer • A representação de uma transformação composta se reduz a uma multiplicação de matrizes quadradas com coordenadas homogêneas de quaisquer transformações simples Ex: Ponto no sistema 3D: (x,y,z)→ (x´,y´,z´, M) Onde: x = x´/M , y = y´/M e z = z´/M Transformações Geométricas Computação Gráfica I3 Matriz de Transformação Considere as transformações f , g e h, que levam pontos de coordenadas (x, y, z) em pontos de coordenadas (x’, y’, z´), tais que: x´ = f(x, y, z) y´ = g(x, y, z) z´ = h(x, y, z) Utilizando coordenadas Homogêneas, existe uma matriz A de dimensões 4 x 4, tal que: X´ = A X, onde: X’ = (x´, y´, z´, 1) e X =(x, y, z, 1) são quartênios Exemplo: Considere o sistema: x´ = x + y + z y´= 2x + y + 3z + 1 z´ = -x + 4y + 5z – 2 Esse sistema pode ser escrito na forma matricial como: x’ 1 1 1 0 x y’ = 2 1 3 1 y z´ -1 4 5 -2 z 1 0 0 0 1 1 Transformações Geométricas Computação Gráfica I4 Transformações afins tem a função de modificar a posição dos pontos no espaço 2D ou 3D, ou de objetos contidos no espaço 2D ou 3D. Essas transformações aplicadas sobre objetos, têm a propriedade de: Transformar linhas paralelas em linhas paralelas; Manter os ângulos entre as linhas do objeto. Essas propriedades fazem com que os objetos alterados por essas transformações mantenham as suas características. Translação, Escala e Rotação são exemplos de transformações afins que veremos a seguir. Transformações Afins Computação Gráfica I5 Translação: nessa transformação um deslocamento é aplicado em cada dimensão dos pontos de um objeto. Assim, uma translação no espaço 2D, significa aplicar um deslocamento (deltaX, deltaY) em cada ponto do objeto. Transformações Afins - Translação Computação Gráfica I6 Translação - Deslocamento ao longo de uma direção (sem girar) Em Duas Dimensões: x´ = x + xObj y´ = y + yObj 1100 10 01 1 y x yObj xObj y x x x’ y y’ yObj xObj Transformações Geométricas - Translação Computação Gráfica I7 Translação - Deslocamento ao longo de uma direção (sem girar) Em Três Dimensões: x´ = x + xObj y´ = y + yObj z´ = z + zObj V0 V1 V3 V2 V4 V5 V7 xObj zObj yObj1 . 1000 100 010 001 1 z y x zObj yObj xObj z y x Transformações Geométricas - Translação Computação Gráfica I8 Escala: nessa transformação um valor é multiplicado a cada dimensão dos pontos de um objeto. Essa transformação tem o objetivo de ampliar, reduzir ou distorcer o objeto em questão. Assim, uma escala no espaço 2D, significa multiplicar um valor (Sx, Sy) em cada ponto do objeto. Transformações Afins - Escala Computação Gráfica I9 Variação de escala: ampliação/redução da figura Em Duas Dimensões: x´= x. Sx y´= y. Sy • Sx <> Sy distorção: alongamento ou encolhimento • Sx = Sy < 0 (por ex: –1) imagens refletidas (mirror) 1100 00 00 1 y x S S y x y x x’ = Sx. x x yy’ = Sy.y Transformações Geométricas – Escala 2D Computação Gráfica I10 Variação de escala: ampliação/redução da figura • Em Três Dimensões x´= x. Sx y´= y. Sy z´= z. Sz 1 z y x . 1000 0 zz profObj 00 00 yy altObj 0 000 xx Objargl 1 z y x 70 32 30 V0 V1 V3 V2 V4 V5 V7 largObj altObj profObj Transformações Geométricas – Escala 3D Computação Gráfica I11 Rotação: nessa transformação um ângulo de rotação é aplicado a cada ponto de um objeto, fazendo com que esse objeto gire em torno de um ponto de referência (normalmente a origem) Assim, uma rotação no espaço 2D, significa aplicar o mesmo ângulo de rotação em cada ponto do objeto. Transformações Afins - Rotação Computação Gráfica I12 UVA – Universidade Veiga de Almeida Rotação - Em Duas Dimensões R.sin(b) = y R.sin(a + b) = y’ R.cos(b) = x R.cos(a + b) = x’ Mas sin(a + b) = sin(a).cos(b) + sin(b).cos(a) Assim: R.sin(a + b) = R[sin(a). cos(b) + sin(b).cos(a)] = y’ R.sin(a).cos(b) + R.sin(b).cos(a) = y’ R.cos(b).sin(a) + R.sin(b).cos(a) = y’ x.sin(a) + y.cos(a) = y’ Também cos(a + b) = cos(a).cos(b) – sin(a).sin(b) Assim: R.cos(a + b) = R.[cos(a).cos(b) – sin(a).sin(b)] = x’ R.cos(a).cos(b) – R.sin(a).sin(b) = x’ R.cos(b).cos(a) – R.sin(b).sin(a) = x’ x.cos(a) – y.sin(a) = x’ 1100 0)cos()( 0)()cos( 1 y x aasin asina y x x y’ a b y x’ R R Transformações Geométricas – Rotação 2D Computação Gráfica I13 Rotação Em Três Dimensões • A rotação em três dimensões muda a direção e inclinação do objeto default, requerendo a definição de um ângulo de rotação e de um eixo de rotação. Rotação em torno do eixo z • Quando se gira um objeto em torno do eixo z, o valor da coordenada z dos seus vértices não se altera. • Assim, o valor de z’ deve ser o mesmo de z (z’= z), o que significa que a terceira linha da matriz deverá ter o valor “1” na posição correspondente à z (terceira coluna). • Não existe nenhuma contribuição da coordenada z às demais coordenadas. • Portanto, a terceira coluna (correspondente à coordenada z) deverá ter valor nulo nas posições referentes às coordenadas x e y. • Resposta: Os pontos giram no plano x-y como no caso de duas dimensões. Transformações Geométricas – Rotação 3D Computação Gráfica I14 • Rotação em torno do eixo z 1 . 1000 0100 00cossen 00sencos 1 z y x RollObjRollObj RollObjRollObj z y x Observador +Z +X +Y Roll Transformações Geométricas – Rotação 3D Computação Gráfica I15 Rotação em torno do eixo y • Quando se gira um objeto em torno do eixo y, o valor da coordenada y dos seus vértices não se altera. • Assim, o valor de y’ deve ser o mesmo de y (y’= y), o que significa que a segunda linha da matriz deverá ter o valor “1” na posição correspondente à y (segunda coluna). • Não existe nenhuma contribuição da coordenada y às demais coordenadas. • Portanto, a segunda coluna (correspondente à coordenada y) deverá ter valor nulo nas posições referentes às coordenadas x e z. • Resposta: Os pontos giram no plano x-z como no caso de duas dimensões. Transformações Geométricas – Rotação 3D Computação Gráfica I16 Rotação em torno do eixo y (cont.) 1 . 1000 0cos0sen 0010 0sen0cos 1 z y x YawObjYawObj YawObjYawObj z y x Observador +Z +X +Y Yaw Transformações Geométricas – Rotação 3D Computação Gráfica I17 Rotação em torno do eixo x • Quando se gira um objeto em torno do eixo x, o valor da coordenada x dos seus vértices não se altera. • Assim, o valor de x’ deve ser o mesmo de x (x’= x), o que significa que a primeira linha da matriz deverá ter o valor “1” na posição correspondente à x (primeira coluna). • Não existe nenhuma contribuição da coordenada x às demais coordenadas. • Portanto, a primeira coluna (correspondente à coordenada x) deverá ter valor nulo nas posições referentes às coordenadas y e z. • Resposta: Os pontos giram no planoy-z como no caso de duas dimensões. Transformações Geométricas – Rotação 3D Computação Gráfica I18 Rotação em torno do eixo x (cont.) 1 . 1000 0cossen0 0sencos0 0001 1 z y x PitchObjPitchObj PitchObjPitchObj z y x Observador +Z +X +Y Pitch Transformações Geométricas – Rotação 3D Computação Gráfica I19 • As transformações geométricas são usadas para manipular um modelo, isto é, através delas é possível mover, rotacionar ou alterar a escala de um objeto. A aparência final da cena ou do objeto depende muito da ordem na qual estas transformações são aplicadas. • A biblioteca gráfica OpenGL é capaz de executar transformações de translação, escala e rotação através de uma multiplicação de matrizes. A idéia central destas transformações em OpenGL é que elas podem ser combinadas em uma única matriz, de tal maneira que várias transformações geométricas possam ser aplicadas através de uma única operação. • Isto ocorre porque uma transformação geométrica em OpenGL é armazenada internamente em uma matriz. A cada transformação que é aplicada, esta matriz é alterada e usada para desenhar os objetos a partir daquele momento. A cada nova alteração é feita uma composição de matrizes. Transformações Geométricas – Open GL Computação Gráfica I20 • A translação é feita através da função glTranslatef(Tx, Ty, Tz), que pode receber três números float ou double (glTranslated) como parâmetro. Neste caso, a matriz atual é multiplicada por uma matriz de translação baseada nos valores dados. • A rotação é feita através da função glRotatef(Ângulo, x, y, z), que pode receber quatro números float ou double (glRotated) como parâmetro. Neste caso, a matriz atual é multiplicada por uma matriz de rotação de "Ângulo" graus ao redor do eixo definido pelo vetor "x,y,z" no sentido anti-horário. • A escala é feita através da função glScalef(Ex, Ey, Ez), que pode receber três números float ou double (glScaled) como parâmetro. Neste caso, a matriz atual é multiplicada por uma matriz de escala baseada nos valores dados. • Para evitar este efeito "cumulativo", é necessário utilizar as funções glPushMatrix() e glPopMatrix(), que salvam e restauram, respectivamente, a matriz atual em uma pilha interna da OpenGL. Transformações Geométricas – Open GL Computação Gráfica I21 • Exemplos void Desenha(void) { glMatrixMode(GL_MODELVIEW); // Especifica sistema de coordenadas do modelo de objeto 3D glLoadIdentity(); // Inicializa a matriz de transformação geométrica glClear(GL_COLOR_BUFFER_BIT); glTranslatef(10.0f, 20.0f, 0.0f); glScalef(2.0f, 2.0f, 1.0f); glRotatef(45.0f, 0.0f, 0.0f, 1.0f); glBegin(GL_QUADS); glVertex2i(10,10); glVertex2i(-10,10); glVertex2i(-10,-10); glVertex2i(10,-10); glEnd(); glFlush(); }: Transformações Geométricas – Open GL Computação Gráfica I22 Introdução • Para funções matriciais o processo de composição é equivalente à multiplicação de matrizes. Por exemplo: 122 .XTX 1 . 1000 0 0 0 1 1 1 1 333231 232221 131211 2 2 2 z y x bbb bbb bbb z y x • Segunda Transformação: 1 . 1000 0 0 0 1 0 0 0 333231 232221 131211 1 1 1 z y x aaa aaa aaa z y x • Primeira Transformação: 011 .XTX Transformações Geométricas Compostas Computação Gráfica I23 • Mas substituindo X1 por T1 . X0 (da primeira transformação): X2 = T2 . T1. X0 – N-ésima Transformação: Xn = Tn....T2 . T1. X0 – Colocando: T = Tn....T2 . T1 tem-se: Xn = T. X0 • Não é preciso aplicar individualmente a todos os vértices, cada transformação de coordenada, basta se usar a transformação composta T (obtida como produto de matrizes de cada transformação individual) e só então aplicar esta transformação aos vértices dos objetos. • A última transformação sempre pré-multiplica as transformações anteriores. Exemplos: – Uma rotação de seguida de translação de v tem como matriz composta: T = T v . R – Uma translação de v seguida de rotação de tem como matriz composta: T = R . T v Transformações Geométricas Compostas Computação Gráfica I24 Composição de transformações • Exemplo em 2D: Rotação de 90 de um triângulo e deslocamento para esquerda (translação), produz resultado diferente se aplicada da forma inversa: Rotação Translação Rotação Translação Transformações Geométricas Compostas Computação Gráfica I25 • Se for alterada a ordem da multiplicação das matrizes, a matriz resultante será diferente: – Fazendo primeiro a rotação e depois a translação tem-se: 1100 0)cos()( 0)()cos( 100 10 01 1 y x aasin asina T T y x y x 1100 )cos()( )()cos( 1 y x Taasin Tasina y x y x Transformações Geométricas Compostas Computação Gráfica I26 - Fazendo primeiro a translação e depois a rotação tem-se: 1100 10 01 100 0)cos()( 0)()cos( 1 y x T T aasin asina y x y x 1100 )cos(.)(.)cos()( )(.)cos(.)()cos( 1 y x aTasinTaasin asibTaTasina y x yx yx Transformações Geométricas Compostas Computação Gráfica I27 Composição de transformações • A combinação da seqüência de transformações em uma única transformação pode produzir o mesmo efeito da aplicação seqüencial das transformações originais. • A operação de composição não é comutativa, • A alteração da ordem da aplicação das transformações destrói o resultado final. Transformações Geométricas Compostas Computação Gráfica I28 Na prática, a movimentação de polígonos e segmentos de reta em um plano 2D é obtido através da composição de um conjunto de transformações. Ao compor transformações é importante notar que a ordem em que as transformações são aplicadas é importante, ou seja, nem sempre vale a propriedade comutativa ! Exemplo: um quadrado (2, 2), (4, 2), (4, 4), (2, 4) Translação com dx=3 e dy=3 Rotação de 90º em torno da origem (seno = 1 e coseno = 0) Composição de Transformações Computação Gráfica I29 Aplicando: 1) Translação com dx=3 e dy=3 2) Rotação de 90º (seno = 1 e coseno = 0) temos os pontos (-5,5), (-5, 7), (-7,7), (-7,5). Composição de Transformações Computação Gráfica I30 Aplicando: 1) Rotação de 90º (seno = 1 e coseno = 0) 2) Translação com dx=3 e dy=3 temos os pontos (1,5), (1,7),(-1,7), (-1, 5) Composição de Transformações Computação Gráfica I31 Exercício 1: defina a sequência e os parâmetros das transformações necessárias para gerar a figura 2 a partir da figura 1. Composição de Transformações Computação Gráfica I32 Exercício 1: defina a sequência e os parâmetros das transformações necessárias para gerar a figura 2 a partir da figura 1. Escala: sx=2 sy=2 Translação: dx=12 dy=12 Composição de Transformações Computação Gráfica I33 Exercício 2: defina a sequência e os parâmetros das transformações necessárias para gerar a figura 2 a partir da figura 1. Composição de Transformações Computação Gráfica I34 Exercício 2: defina a sequência e os parâmetros das transformações necessárias para gerar a figura 2 a partir da figura 1. Translação: dx=-2 dy=6 Rotação: 45º Composição de Transformações Computação Gráfica I35 Exercício 3: defina a sequência e os parâmetros das transformações necessárias para gerar a figura 2 a partir da figura 1. Composição de Transformações Computação Gráfica I36 Exercício3: defina a sequência e os parâmetros das transformações necessárias para gerar a figura 2 a partir da figura 1. Translação: dx=-2 dy=6 Rotação: 45º Translação: dx=5 dy=-1 Composição de Transformações Computação Gráfica I37 Exercício 4: defina a sequência e os parâmetros das transformações necessárias para gerar a figura 2 a partir da figura 1. Composição de Transformações Computação Gráfica I38 Exercício 4: defina a sequência e os parâmetros das transformações necessárias para gerar a figura 2 a partir da figura 1. Translação: dx=2 dy=3 Rotação: 90º Translação: dx=-1 dy=2 Composição de Transformações Computação Gráfica I39 Transformações para Coordenadas da Câmera • A cena, vista da câmera, exige os objetos referenciados ao sistema de coordenadas da câmera. • SOLUÇÃO: Mover os objetos para o sistema de coordenadas da câmera, e em seguida retornar com os objetos para sua posição original, mantendo o sistema de coordenadas dos objetos fixo no sistema de coordenadas da câmera. – Associar o sistema de coordenadas da câmera ao sistema de coordenadas do objeto (eqüivale a colocar o centro do objeto no sistema de coordenadas da câmera. – Mover o objeto em direção oposta à posição da câmera, mantendo seu sistema de coordenadas centrado na câmera. Se a câmera roda de => o objeto roda de - Transformações Geométricas – Câmera Computação Gráfica I40 Construindo métodos para Transformações da Câmera (Observador) • Recalcula-se as coordenadas do objeto em relação à câmera através de transformações de escalonamento, rotação e translação. • Os valores das novas coordenadas serão exatamente os mesmos obtidos com a câmera fixa e o objeto movendo-se por transformações inversas: Se a câmera translada de v => o objeto translada de –v Se a câmera roda de => o objeto roda de - Se a câmera aproxima-se de Sx => o objeto cresce de 1 / Sx • Considerando que as transformações geométricas alteram os vértices reais e as transformações de coordenadas criam vértices virtuais, não alterando as coordenadas dos vértices reais (permanecem onde estão), tem-se: Transformações Coordenadas Geométrica Translação T v T - v Rotação R R - Escalonamento S Sx, Sy, Sz S 1/Sx, 1/Sy, 1/Sz Transformações Geométricas – Câmera Computação Gráfica I41 Métodos para Transformações da Câmera (Observador) void EspecificaParametrosVisualizacao(void) { // Especifica sistema de coordenadas de projeção glMatrixMode(GL_PROJECTION); // Inicializa sistema de coordenadas de projeção glLoadIdentity(); // Especifica a projeção perspectiva gluPerspective(angle,fAspect,0.1,500); // Especifica sistema de coordenadas do modelo glMatrixMode(GL_MODELVIEW); // Inicializa sistema de coordenadas do modelo glLoadIdentity(); // Especifica posição do observador e do alvo gluLookAt(0,80,200, 0,0,0, 0,1,0); } Transformações Geométricas – Câmera
Compartilhar