Computação Gráfica Transformações Geométrica no Plano e no Espaço Tomás Antônio C. Badan 1
Pontos e Vetores Ponto: Posição especificada por uma coordenada em um sistema de referência Depende do sistema de coordenadas Vetor (http://pessoal.sercomtel.com.br/matematica/geometria /vetor2d/vetor2d.htm): Classe de objetos matemáticos (segmentos) com a mesma direção, mesmo sentido e mesmo módulo (intensidade). Propriedades são independentes de quaisquer sistema de coordenadas 2
Pontos e Vetores (2) 3
Propriedades dos Vetores Vetor unitário v = V/ V Módulo do vetor V =Vx 2 Vy 2 Vz 2 V(Vx, Vy) = [Vx Vy] = Vx.i + Vy.j Produto Escalar ou Interno V.W = Vx.Wx + Vy.Wy = V W cosө Se (Vx, Vy), ortogonais: (Vy, Vx) ou ( Vy, Vx) Representação: Vetor Linha :V =[Vx Vy Vz] ou Vetor Coluna :V =[Vx Vy Vz ] 4
Vetores e Matrizes Vetores matriz de 1 coluna ou de 1 linha Matriz tabela de m x n símbolos, representada sob a forma de um quadro com m linhas e n colunas 5
Definições Multiplicação de Matrizes A.B possível se n A = m B Matriz Resultante m A x n B Matriz Quadrada m = n Matriz Identidade (I) matriz quadrada, onde a ij = 1 se i = j e a ij = 0 se i j Matriz Transposta (A T ) a ij = a ji Matriz Inversa (A 1 ) A.A 1 = A 1.A = I 6
Exemplos A matriz adjunta de uma matriz quadrada A é a transposta da matriz que se obtem substituindo cada termo Ai,j pelo determinante da matriz resultante de retirar a A a linha i e a coluna j (isso é, o determinante menor) multiplicado por ( 1)i + j (isso é, alternando os sinais). 7
Observação sobre Vetores e Matrizes O produto vetorial entre dois vetores V e W produz um terceiro vetor que é ortogonal aos anteriores Magnitude = área do paralelogramo formado por V e W obedece a regra da mão direita entre V e W = i j k U =V x W Vx Vy Vz Wx Wy Wz =u V W senø onde i,j ek, vetores unitários nos eixos x, y e z,respectivamente 8
Observação sobre Vetores e Matrizes (2) Considere o seguinte sistema de equações : x '=a.xb.y y '=c.xd.y Pode ser descrito pela notação de vetor coluna : [ x ' ] y ' = [ a b ][ x y] P '=C.P c d ou pela notação de vetor linha: [ x ' y ' ]=[ x y][ a c ] P '=P.C T b d Note que trocar de uma notação pela outra, envolve alterar a ORDEM DA MULTIPLICAÇÃO e aplicar a TRANSPOSTA sobre a matriz de coeficientes. 9
Observações sobre a Notação O sistema vetor linha era usado pelos primeiros sistemas gráficos e por alguns autores Livro adotado usa essa representação Representação vetor coluna é a representação matemática padrão Utilizado pelo OpenGL, Java, PHIGS... Será a utilizada durante o curso. 10
Sistemas de Coordenadas Coordenadas Cartesianas 2D, 3D Coordenadas Polares 2D Coordenadas Cilíndricas 3D Coordenadas Esféricas 3D 11
Coordenadas Cartesianas 12
Coordenadas Polares 13
Coordenadas Cilíndricas 14
Coordenada Esférica 15
Sistema de Referências Sistemas utilizados para finalidades específicas: Sistema de Referência do Universo (SRU) Sistema de Referência do Objeto (SRO) Sistema de Referência da Câmera (SRC) Sistema de Referência Normalizado (SRN) Sistema de Referência do Dispositivo (SRD) 16
Sistema de Referência do Universo (SRU) Coordenadas do universo ou do mundo Descreve os objetos em termos de coordenadas utilizadas pelo usuário Cada tipo de aplicação especifica o seu universo de trabalho Pode estar em metros, kilômetros, milímetros, etc depende da aplicação Pode estar em qualquer sistema de coordenada Possui limites máximo e mínimo 17
Sistema de Referência do Objeto (SRO) Cada objeto é um miniuniverso individual Suas particularidades são descritas em função de seu sistema de referência Normalmente, o centro do sistema de coordenadas é o seu centro de gravidade, ou eixo de rotação Em sólidos, o centro é conhecido como pivô 18
Sistema de Referência da Câmera (SRC) Caso particular do SRO Coordenadas são normalmente especificadas em uvn 19
Sistema de Referência Normalizado (SRN) Trabalha com as coordenadas normalizadas: Alguns utilizam o intervalo entre 0 e 1 0 x 1; 0 y 1; 0 z 1 Alguns sistemas utilizam o intervalo 1 a 1 É um sistema de referência intermediária entre o SRU e o SRD Principal aplicação é tornar a geração de imagens independente do dispositivo de saída 20
Sistema de Referência do Dispositivo (SRD) Utiliza coordenadas que podem ser fonecidas diretamente para um dado dispositivo de saída Ex. se for vídeo, pode ser valor de pixels (640x480, 800x600,...) Se for uma impressora, o tamanho do papel Geralmente, depende da resolução possível e da configuração do usuário, dentro de um conjunto possíveis de configurações 21
Transformações entre Sistemas de Coordenadas Conversões entre sistemas de coordenadas Ex. cartesiano para polar r = sqrt(x*x + y*y) Ө = arctan(y/x) Transformações entre sistemas de referências SRU e SRO SRC e SRU SRN e SRD etc 22
Exemplo 23
Transformações sobre Pontos e sobre Objetos Translação Escala Rotação Reflexão Cisalhamento Transformações entre sistemas de referências 24
Translação Movimentar o objeto Transladar todos os pontos que compõem um objeto Somente os pontos que o define completamente É uma alteração de corpo rígido Não deforma o objeto transladado {x '=T xx y'=t y y z '=T z z }temos que :[x ' y' z ' ]=[T x T y T z][ x ] y, ou seja, P '=T P z 25
Translação (2) 26
Escala Altera as dimensões do objeto Multiplica cada ponto do objeto por um fator de escala Podem ser escalas diferentes em cada eixo cartesiano, por exemplo. Se não estiver na origem, causa translação { x '=Sx x y '=Sy y z '=Sz z } [ x ' ]=[Sx 0 0 x em notação matricial : y ' 0 Sy 0 y z ' 0 0 Sz][ ] z portanto, P '=S P 27
Escala (2) Não é uma alteração de corpo rígido Deforma o objeto transformado 28
Em opengl Translação: gltranslate[fd](x, Y, Z); Escala: glscale[fd](x, Y, Z); Matriz Identidade glloadidentity(); Permite inicializar o sistema de matrizes 29
Rotação 30
Rotação (2) x=r.cosø y=r.senø x '=r.cosø ß=r.cosøcos ß r.senø sen ß y '=r.senø ß=r.senøcos ßr.cosø sen ß [ x ' y ' ] = [ cos ß sen ß x '=x.cos ß y.sen ß y '=y.cos ßx.sen ß sen ß cos ß ][ x y ] onde ß ângulo de rotação,ou seja, P '=R.P 31
Rotação (3) 32
Rotação (4) Se objeto não está na origem, rotação implica também em translação Para rotacionar um objeto em torno de um determinado ponto transladar ponto P (objeto) para a origem, rotacionar, transladar de volta para o ponto P Princípio aplicado a todas as transformações que envolvem translação implícita Pode ser realizadas várias operações em cascata aplicando o mesmo princípio 33
Translação + Rotação + Translação Alteração de corpo rígido pode ser feita pela alteração inversa no sistema de coordenada Girar um objeto ø equivale a rotacionar o sistema de coordenada ø 34
Rotação em 3D Realizada individualmente sobre cada eixo, usando os ângulos de Euler Rotaciona se o plano (2D) em torno do eixo que é normal a este plano Eixos ortogonais eixos perpendiculares entre si Regra da mão direita define um sistema de eixos positivos. Padrão Regra da mão esquerda define um sistema de eixos negativos. Ex. monitores 35
Rotação em 3D (2) 36
Ângulos de Euler Rotações: no eixo X ângulo no eixo Y ângulo no eixo Z ângulo 37
Rotação em 3D (3) Eixo Z Rotação plano XY [ Eixo X Rotação plano YZ x [ x ' y ' z ' ' y ' z ' ]=[cosa sena 0 sena cosa 0 0 0 1][ ]=[1 0 0 ][ 0 cos ß sen ß 0 sen ß cos ß x ] y z x y z ] Eixo Y Rotação plano ZX ]=[ [x ' y ' z ' cosd 0 send 0 1 0 y send 0 cosd ][x ] z 38
Rotação em 3D Observações Todas as matrizes anteriores são ortonormais Ortogonais e normalizadas Se uma das linhas, ou colunas, forem considerados vetores unitarios teriam comprimento = 1 Produto escalar ou interno entre vetores seria igual a zero (ortogonais) Inversa = transposta (somente matrizes ortonormais) I = M.M 1 = M.M T 39
Rotação em 3D Observações (2) Rotação em 3D combinação de rotações definidas pelo ângulo de Euler Dependente da ordem como é feita as rotações Operação conhecida como concatenação Executada pela multiplicação de matrizes Exemplo: Rotação no eixo X, depois no eixo Y e depois no eixo Z: P' = Rz(Ry(Rx.P)) Note a ordem das matrizes. A notação está em vetor coluna, se for em vetor linha P' = ((P.Rx)Ry)Rz) P' = Rz.Ry.Rx.P Rx.Ry.Rz.P 40
Multiplicação de Matrizes no OpenGL Dada a matriz M = A.B.C.D, podemos obtêla de duas formas: Pré multiplicação M' = D M'' = C.M' M''' = B.M'' M = A.M''' Pós multiplicação M' = A M'' = M'.B M''' = M''.C M = M'''.D Política adotada no OpenGL 41
Multiplicação de Matrizes no OpenGL Exemplo Deseja se fazer umarotação,um escalonamento e, por fim, uma translação sobre um ponto P, ou seja : P '=T.S.R.P em OpenGl : glloadidentity ;inicializa o sistema de matrizes gltranslatef Tx,Ty,Tz; glscalef Sx, Sy, Sz ; glrotatef ø, Rx, Ry, Rz; Note que a primeira operação sobre o ponto é a última a ser especificada 42
Rotação em 3D Método 2 Considere que: É dado um vetor A = (Ax, Ay, Az) Unitário a = A/ A É dado um vetor B = (Bx, By, Bz) Aproximadamente ortogonal a A 43
Método 2 (2) temos que: vetor ortonormal aa e B : C=a x B c= C C =c x, c y,c z vetor ortonormal na direção aproximada de Bb ' : b'=c x a=b ' x, b ' y, b' z Portanto,matriz derotação : R=[a x b' x c x a y b' y c y a z b' z c z] 44
Método (2) Exemplo Rotação no eixo X de um ângulo ø a=1, 0,0 B=b=0,cosø, senø logo, j k c=a x b= i ø 1 0 0 0 cosø sen c=0, senø, cosø Portanto, matriz derotação no eixo X : 0 0 R=[1 ] 0 cosø senø 0 senø cosø 45
Em opengl Rotação é definida em torno de um vetor V: glrotate[fd](ø, x, y, z); Onde ø é dado em graus (sentido contrário ao ponteiro do relógio) 46
Reflexão Espelhar o objeto em um dos eixos, ou em ambos Em 2D reflexão horizontal (eixo X) ou vertical (eixo Y) Em 3D reflexão sobre os planos (XY, YZ ou ZX) Reflex ão no plano ZX [ x ' ]=[1 0 0 1][ x ] y' 0 1 0 y z ' 0 0 z Reflexão no plano ZX e YZ [ x ' ]=[ 1 0 0 1][ x ] y ' 0 1 0 y z ' 0 0 z 47
Reflexão (2) 48
Em OpenGL Basta utilizar o comando para escalonar um objeto, com parâmetros negativos Exemplo: glscalef( 1, 1, 1) Reflexão no plano YZ Tomar cuidado com a orientação das faces, para que uma face externa não se torne uma face interna Ordem dos pontos na definição de triângulos ou quadriláteros 49
[ Cisalhamento Distorce o formato do objeto Desloca se uma coordenada, proporcional ao(s) valor(es) da(s) outra(s) coordenada(s) x '=xsh.y y '=y z '=z x ' y ' z ' ]=[1 Sh 0 0 1 0 0 0 1][ x ] y z x '=x y '=a.xyb.z z '=z [x ' y ' z ' ]=[1 0 0 a 1 b 0 0 1][ x ] y z 50
Cisalhamento (2) 51
Coordenadas Homogêneas Unifica as operações de cisalhamento, reflexão, rotação, escala e translação Um ponto é expresso por 4 valores Ph T ' = [ x' y' z' M] P T = [x y z] = [x'/m y'/m z'/m] Dois conjuntos representam o mesmo ponto se forem múltiplos [2 3 4 6] = [4 6 8 12] Se M = 1 No sistema homogêneo [x y 1] equivale à [x y] no sistema cartesiano O mesmo ocorre para matrizes 52
Coordenadas Homogêneas (2) [ Rotação no eixo Z [ Escala [ Translação x x ' y ' z ' 1 ' y ' z ' 1 ]=[cosa sena 0 0 1][ 1] x sena cosa 0 0 y 0 0 1 0 z 0 0 0 ]=[Sx 0 0 0 1][ 0 Sy 0 0 0 0 Sz 0 0 0 0 x ' y ' z ' 1 1] x y z ]=[1 0 0 Tx ][ 0 1 0 Ty 0 0 1 Tz 0 0 0 1 1] x y z 53
Em OpenGL Para cisalhamento não existe um comando específico Deve especificar um buffer de 16 posições (matriz 4x4) ordenado pelas colunas da matriz m12 m13 m14 m21 m22 m23 m24 m=[m11, m31 m32 m33 m34 m41 m42 m43 m44] em C : GLdouble m[16]={m11, m21, m31,m41, m12, m22,..., m24, m34, m44}; Não é a forma usual de se especificar uma matriz emc 54
Em OpenGL (2) Substitui a matrix atual pela matrix fornecida: glloadmatrix[fd](m) Multiplica a matrix atual com a matrix especificada: glmultmatrix[fd](m) 55
Transformação entre Sistemas de Coordenadas 2D De SRO SRU 56
Transformação entre Coordenadas 2D Método 1 Rotacionar por ø R X ' Y ', XY =[cosø senø 0 senø cosø 0 0 0 1] Transladar por x 0, y 0 T X ' Y ', XY =[1 0 x 0 0 1 y 0 0 0 1 ] M X ' Y ', XY =T X ' Y ', XY. R X ' Y ', XY 57
Transformação entre Coordenadas 2D Método 2 1 Aplicando a Rotação: Conhecendo as coordenadas de V em XY : v= V V = P 1 P 0 P 1 P 0 =v x, v y vetor ortogonal a v u=v y, v x =u x,u y [ x b 0 ' y c d 0 y ' 1]=[a 0 0 1][x ] 1 aplicando o vetor unitário0,1de X ' Y ' direção dev [vx v y 1 ]=[a b 0 c d 0 1 0 0 1][0 1] b=v x d=v y 58
Transformação entre Coordenadas 2D Método 2 (2) Aplicando o vetor unitário1,0de X ' Y ' direção deu [u x u y 1 ]=[a b 0 c d 0 0 0 0 1][1 1] a=u x c=u y logo R X ' Y ', XY =[u x v x 0 u y v y 0 0 0 1] 0 x 0 M X ' Y ', XY =T X ' Y ', XY. R X ' Y ', XY =[1 ].[u x v x 0 v ] x x0 0 1 y 0 u y v y 0 u y v y y 0 0 0 1 0 0 1]=[ux 0 0 1 59
Transformação entre coordenadas 2D SRU SRO Processo inverso ao descrito anteriormente 60
SRO SRU Sabemos que: 1 1 P=M X ' Y ', XY. P ' M X ' Y ', XY. P=M X ' Y ', XY. M X ' Y ', XY. P ' 1 logo: P '=M X ' Y ', XY. P=M XY, X ' Y '. P M XY, X ' Y ' =R XY, X ' Y '.T XY, X ' Y ' T R XY, X ' Y ' =R X ' Y ', XY onde: x u y 0 =[u 1] v x v y 0 e 0 0 0 x 0 T XY, X ' Y ' =[1 ] 0 1 y 0 0 0 1 61
Transformações entre Sistemas de Coordenadas 3D Generalizado e assumindo que os vetores u,v e w são conhecidos no sistema XYZ emx 0, y 0, z 0,são ortonormais e dados por : u=u x,u y,u z v=v x,v y,v z w=w x,w y, w z M XYZ, X ' Y ' Z ' =R.T onde : u x u y u z 0 v R=[ x v y v z 1] 0 0 x0 0 0 1 0 y e T =[1 0 ] w x w y w z 0 0 0 1 z 0 0 0 0 0 0 0 1 62
Sistema de Matrizes no OpenGL Matrizes usadas: GL_MODELVIEW, GL_PROJECTION e GL_TEXTURE. Se extensão ARB_imaging é suportada, também é usada a GL_COLOR Para fazer a modelagem (rotação, escalonamento e translação) GL_MODELVIEW Especificada através do comando: glmatrixmode(modo); 63
Empilhamento de Matrizes Permite salvar a matriz atual para uso posterior: Operações realizada na contexto da placa de video Mais eficiente do que transferir da memória para a placa glpushmatrix(); copia a matriz em uso na pilha glpopmatrix(); restaura o conteúdo da pilha na matriz atual Descarta o valor que estava na pilha 64
Exemplo glmatrixmode(gl_modelview); glloadidentity(); glclear(gl_color_buffer_bit); glpushmatrix(); gltranslatef(post[0][0], post[0][1], post[0][2]); glrotatef(post[2][0], 1, 0, 0); glrotatef(post[2][1], 0, 1, 0); glrotatef(post[2][2], 0, 0, 1); glpushmatrix(); gltranslatef(0, -60*escala, 0); glscalef(escala, escala, escala); glcalllist(prism); glpopmatrix(); // descarta o objeto atual gltranslatef(0, 60*escala, 0); glscalef(-escala, -escala, escala); glcalllist(prism); glpopmatrix(); 65