COMPUTAÇÃO GRÁFICA - ft.unicamp.brmagic/ST765/CG2009_Transformacoes.pdf · Computação Gráfica...

Post on 25-Sep-2018

231 views 0 download

Transcript of COMPUTAÇÃO GRÁFICA - ft.unicamp.brmagic/ST765/CG2009_Transformacoes.pdf · Computação Gráfica...

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

COMPUTAÇÃO GRÁFICATransformações geométricas

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Objetivos

•• Entender os princípios daEntender os princípios datransformações geométricas do tipotransformações geométricas do tipotranslação, rotação e escalamento.translação, rotação e escalamento.

•• Efetuar transformações geométricasEfetuar transformações geométricasutilizando coordenadas homogêneas.utilizando coordenadas homogêneas.

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Fundamentos

•• Transformações geométricas envolvem Transformações geométricas envolvemoperações com vetores e matrizes, do tipooperações com vetores e matrizes, do tiposoma e multiplicação, além desoma e multiplicação, além deconhecimentos básicos de álgebra econhecimentos básicos de álgebra egeometria.geometria.

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Transformações básicas - OpenGL

•• Transla Translaçãoção

glTranslatefglTranslatef((dxdx, , dydy, , dzdz););

•• Escalamento Escalamento

glScalefglScalef((sxsx, , sysy, , szsz););

•• Rota Rotaçãoção

glRotatefglRotatef((angang, x, y, z);, x, y, z);

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Translação

EXEMPLO 2DEXEMPLO 2D

posição inicialposição final

x

y

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Translação

P1 = (1,1) P2 = (6,1)

P3

P4

P5

2

4

0

6

2 4 6 8 10

Nova posição da figura para dx = 6 e dy = 2

P1’ P2’

P3’

P4’

P5’

12 14

8

EXEMPLO 2DEXEMPLO 2D

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Translação•• É uma operação que desloca pontos em umaÉ uma operação que desloca pontos em umadeterminada direção. Define-se através da equação:determinada direção. Define-se através da equação:

tal que, para o caso 2Dtal que, para o caso 2D

Onde x, y são os pontos originais; xOnde x, y são os pontos originais; x’’, y , y ’’ são os pontos são os pontosdeslocados; e deslocados; e dxdx, , dy dy correspondem ao deslocamentocorrespondem ao deslocamentonas direções x e y, respectivamente.nas direções x e y, respectivamente.

PP’’ = P + T = P + T

xy

x'y ’

dxdy

P = P’ = T =

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Escala

situação inicial

situação final

x

y

x

y

EXEMPLO 2DEXEMPLO 2D

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Escala

P1 = (2,1) P2 = (6,1)

P3P42

4

02 4 6 8

P1’= (4,2) P2’ = (12,2)

P3’P4’

Novo objeto para sx = 2e sy = 2

3

6

03 6 9 12

EXEMPLO 2DEXEMPLO 2D

Situação inicial

Situação final

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Escala

xy

PP’’ = S · P = S · P

x'y ’

sx 00 sy

P = P’ = S =

•• Escalamento pode tornar um objeto maior Escalamento pode tornar um objeto maiorou menor. A equação abaixo define essaou menor. A equação abaixo define essaoperação.operação.

tal que, para o caso 2Dtal que, para o caso 2D

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Rotação

situação inicial situação final

x

y

x

y

EXEMPLO 2DEXEMPLO 2D

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Rotação

P1 = (2,1) P2 = (4,1)

P3P4

2

4

02 4 6 8

Novo objeto para θ =45º

2

02 4 6

P3’

P4’

P1’

P2’

Situação inicial

Situação final

EXEMPLO 2DEXEMPLO 2D

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Rotação

PP’’ = R · P = R · P

•• Rotaciona Rotaciona (gira) um objeto de um(gira) um objeto de umdeterminado ângulo determinado ângulo θθ. É dada pela equação:. É dada pela equação:

xy

x'y ’

cosθ -sinθsinθ cosθP = P’ = R =

tal que, para o caso 2Dtal que, para o caso 2D

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Rotação / Escala

•• Como pode ser visto nos desenhos Como pode ser visto nos desenhosanteriores, as operações de escalamento eanteriores, as operações de escalamento erotação também deslocam o objeto, poisrotação também deslocam o objeto, poisforam definidas a partir de um ponto naforam definidas a partir de um ponto naorigem.origem.

•• Portanto, para que não ocorra translação Portanto, para que não ocorra translaçãodesnecessária no objeto é preciso realizar asdesnecessária no objeto é preciso realizar asseguintes etapas:seguintes etapas:

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Rotação / Escala

1. Transladar o objeto para a origem1. Transladar o objeto para a origem

2. 2. Rotacionar Rotacionar (ou efetuar o escalamento)(ou efetuar o escalamento)

3. Transladar o objeto para a posição original3. Transladar o objeto para a posição original

Objeto que se deseja modificarObjeto que se deseja modificar

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Coordenadas homogêneas

PP’’ = R · P = R · P

•• As operações matriciais diferem entreAs operações matriciais diferem entreadição (translação) e multiplicação (rotação-adição (translação) e multiplicação (rotação-escala).escala).

PP’’ = S · P = S · P

PP’’ = P + T = P + T

•• Uma forma de tratar as transformaçõesUma forma de tratar as transformaçõesatravés da mesma operação é expressar osatravés da mesma operação é expressar ospontos em pontos em COORDENADAS HOMOGÊNEASCOORDENADAS HOMOGÊNEAS..

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Coordenadas homogêneas

PP’’ = (R ou S ou T) · P = (R ou S ou T) · P

•• Todas as transformações são tratadasTodas as transformações são tratadasatravés de multiplicações. Portanto, podemosatravés de multiplicações. Portanto, podemosusar a expressão:usar a expressão:

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Coordenadas homogêneas

•• Em coordenadas homogêneas, uma terceiraEm coordenadas homogêneas, uma terceiracoordenada é adicionada (caso 2D)coordenada é adicionada (caso 2D)

1 0 dx0 1 dy0 0 1

sx 0 00 sy 00 0 1

cosθ -sinθ 0sinθ cosθ 00 0 1

R = S =T =

xy1

P =

E as transformaE as transformações são escritas na forma:ções são escritas na forma:

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Transformações 3D

•• Matrizes de transformações para o caso 3DMatrizes de transformações para o caso 3D

1 0 0 dx0 1 0 dy0 0 1 dz0 0 0 1

sx 0 0 00 sy 0 00 0 sz 00 0 0 1

S =T =

TranslaçãoTranslação EscalaEscala

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Transformações 3D

•• Matrizes de transformações para o caso 3DMatrizes de transformações para o caso 3D

RotaçãoRotação

x

y

z Atenção!!! As rotações foramAtenção!!! As rotações foramdefinidas no sentido anti-horário.definidas no sentido anti-horário.

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Transformações 3D

•• Matrizes de transformações para o caso 3DMatrizes de transformações para o caso 3D

RotaçãoRotaçãocosθ -sinθ 0 0sinθ cosθ 0 00 0 1 00 0 0 1

Rz (θ) =

cosθ 0 sinθ 00 1 0 0-sinθ 0 cosθ 00 0 0 1

Ry (θ) =

1 0 0 00 cosθ -sinθ 00 sinθ cosθ 00 0 0 1

Rx (θ) =

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Transformações 3D

•• Outras transformaçõesOutras transformações

CisalhamentoCisalhamento ReflexãoReflexão

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Transformações - OpenGL•• O O OpenGL OpenGL trabalha comtrabalha com m matrizes deatrizes detransformaçõestransformações•• As opera As operações sãoções são efetuadas viaefetuadas viamultiplicação de matrizes, de acordo com omultiplicação de matrizes, de acordo com oestado existenteestado existente•• Portanto, é necessárioPortanto, é necessário ““carregarcarregar”” a matriz a matrizidentidadeidentidade

glLoadIdentityglLoadIdentity();();

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Transformações - OpenGL•• O OpenGL trabalha com matrizes de O OpenGL trabalha com matrizes detransformações...transformações...

Utiliza-se o comando Utiliza-se o comando glMatrixModeglMatrixMode

Parâmetro GL_PROJECTION antes dosParâmetro GL_PROJECTION antes doscomandos que especificam o tipo decomandos que especificam o tipo deprojeção (glOrtho, por exemplo).projeção (glOrtho, por exemplo).

Parâmetro GL_MODELVIEW antes deParâmetro GL_MODELVIEW antes detransformações geométricas.transformações geométricas.

glMatrixMode(GL_PROJECTION);glMatrixMode(GL_PROJECTION);

glMatrixMode(GL_MODELVIEW);glMatrixMode(GL_MODELVIEW);

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Transformações - OpenGL

•• Uma transformação pode alterar todos osUma transformação pode alterar todos osobjetos na objetos na sequênciasequência: não desejado,: não desejado,dependendo da aplicaçãodependendo da aplicação•• OpenGLOpenGL: escopo das transformações...: escopo das transformações...

São utilizados comando São utilizados comando glPushMatrixglPushMatrix() e() eglPopMatrixglPopMatrix() para definir início e fim do bloco() para definir início e fim do blocode objetos onde será(de objetos onde será(ãoão) efetuada(s) a(s)) efetuada(s) a(s)transformação(transformação(õesões).).

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Transformações - OpenGL

•• OpenGL: escopo das transformações... OpenGL: escopo das transformações...

Objeto1Objeto1glPushMatrix ();glPushMatrix ();

glPopMatrix ();glPopMatrix ();

glRotatef(...);glRotatef(...);

Objeto1Objeto1

glPushMatrix ();glPushMatrix ();

glPopMatrix ();glPopMatrix ();

glRotatef(...);glRotatef(...);Objeto2Objeto2

Objeto2Objeto2

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Transformações - OpenGLvoid display(void){ glClear (GL_COLOR_BUFFER_BIT); glPushMatrix();

/* Cubo 1 */ glPushMatrix(); glTranslatef (-2.0, 0.0, 0.0); glScalef (2.0, 1.0, 4.0); glutWireCube (1.0); glPopMatrix();/* Cubo 2 */ glPushMatrix(); glRotatef (25.0, 0.0, 0.0, 1.0); glTranslatef (2.0, 0.0, 0.0); glScalef (2.0, 1.0, 4.0); glutWireCube (1.0); glPopMatrix();/* Cubo 3 */ glPushMatrix(); glTranslatef (0.0, 2.0, 0.0); glScalef (2.0, 1.0, 4.0); glutWireCube (1.0); glPopMatrix();/* Cubo 4 */ glPushMatrix(); glTranslatef (0.0, -2.0, 0.0); glScalef (2.0, 1.0, 4.0); glutWireCube (1.0); glPopMatrix();

glPopMatrix(); glutSwapBuffers();}

MARCO ANTONIO GARCIA DE CARVALHOFevereiro de 2009

Computação Gráfica

Para saber mais:

[MANSSOUR06] Capítulo 9

[ANGEL97] Capítulo 4

Executar programas do Nate Robins