Computação Gráfica – Transformações Geométricas Profa. Mercedes Gonzales Márquez.

Slides:



Advertisements
Apresentações semelhantes
SLIDE 1 – Transformações - Translação
Advertisements

Daniel de Vasconcelos Campos
Funções para serem usadas no exercício de Lab
Computação Gráfica I Conteúdo: Professor:
Paulo Sérgio Rodrigues PEL205
Sistema de coordenadas utilizando a regra da mão direita
The Cyclops Project German-Brazilian Cooperation Programme on IT CNPq GMD DLR Departamento de Informática e Estatística - INE/CTC/UFSC Computação Gráfica:
Computação Gráfica Geometria de Transformações
The Cyclops Project German-Brazilian Cooperation Programme on IT CNPq GMD DLR Departamento de Informática e Estatística - INE/CTC/UFSC Computação Gráfica:
Introdução a OpenGL (parte final).
Claudio Esperança Paulo Roma Cavalcanti
Introdução à Computação Gráfica Geometria
Transformações Geométricas em C.G.
Navegador de cenas com openGL e rastreamento de raios
INF 1366 – Computação Gráfica Interativa Transformações
Transformações Geométricas Coordenadas Homogêneas e Rotações.
Funções para serem usadas no exercício de Lab nos dias (11/03/2010 e 17/03/10) Visualização 3D Incluir no FrameWork Básico (na página da disciplina), as.
Computação Gráfica Teórica
Callback de Teclado // registro void glutKeyboardFuc(Teclado);
TE804 Eletrodinâmica Computacional
ROBÓTICA Helder Anibal Hermini.
Computação Gráfica – Transformações Geométricas
Fundamentos Corel Draw Aula I Prof. David Bianchini
ROBÓTICA Helder Anibal Hermini.
Introdução à Computação Gráfica Projeções
Animações Independentes na Mesma Cena
Vetores Grandeza escalar: grandeza física descrita por um número e obedecem as leis da aritmética e da álgebra elementar. Ex: temperatura, 25º. Grandeza.
Transformações Geométricas no Plano e no Espaço
Planificando cubos e outros “dados”
UNIFESO – NAI PROF. ILYDIO SÁ
Computação Gráfica Aula 3 Transformações Geométricas
TRANSFORMAÇÕES GEOMÉTRICAS
Computação Gráfica – Visibilidade
Visualização Tridimensional (Câmera Sintética)
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Realidade Virtual Aula 4
COMPUTAÇÃO GRÁFICA E INTERFACES
Skeleton and Skinning Pablo Carneiro Elias 30 de maio de 2006.
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Matemática Discreta 1 – MD 1
Prof. Eng. Francisco Lemos Disciplina: Mecânica Geral
Computação Gráfica – Transformações Projetivas
Desenhos Tridimensionais
Computação Gráfica – Introdução ao OpenGL
Computação Gráfica – Transformações Geométricas
Realidade Virtual Aula 5
Profa. Mercedes Gonzales Márquez
OpenGL Aula Prática.
Visualização Tridimensional
Campus de Caraguatatuba
Introdução à Computação Gráfica
Viewport.
Computação Gráfica – Animação
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Visualização Tridimensional. Quando se trabalha em três dimensões, o SRU (Sistema de Referência do Universo) passa a ser composto por três eixos ortogonais.
Figura 5 - O plano mostrando detalhes da projeção em perspectiva.
Prof. Eng. Francisco Lemos Disciplina: Mecânica Geral
Felipe Cavalcanti Ferreira Fernando Valente Kakimoto
Modelo e Câmera e Projeção no OpenGL
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Animação 2D. // Variáveis que guardam a translação que será aplicada // sobre a casinha GLfloat Tx; GLfloat Ty; // Variáveis que guardam os valores mínimos.
Computação Gráfica IGCE – Instituto de Geociências e Ciências Exatas
Transformações Geométricas
Objetos Predefinidos da GLUT
Análise de Componentes Principais
Revisão Matemática II Profa. Mercedes Gonzales Márquez.
Computação Gráfica – Transformações Geométricas Profa. Mercedes Gonzales Márquez.
Cinemática de Robôs Manipuladores
Computação Gráfica – Transformações Geométricas
Transcrição da apresentação:

Computação Gráfica – Transformações Geométricas Profa. Mercedes Gonzales Márquez

Tópicos Transformação Geométrica Revisão sobre matrizes e vetores As três transformações geométricas básicas: Translação, Escala e Rotação.

Transformação Geométrica Transformação que altera algumas características como posição, orientação, forma ou tamanho das figuras geométricas no espaço. Apresentamos as três transformações básicas x y a c b x y a c b y x TranslaçãoEscalaRotação

Revisão de matrizes e vetores Matrizes em Computação Gráfica – As matrizes são mais fáceis de usar e entender do que as equações algébricas – As matrizes são parecidas com o modelo organizacional da memória dos computadores – Matrizes quadradas de 2 x 2 – 2D (x,y) 3 x 3 – 3D (x,y,z)

Aritmética de Vetores e Matrizes Adição : [1 2 3] + [2 0 1] = [3 2 4] Subtração : [1 2 3] – [2 0 1] = [-1 2 2] Multiplicação de uma matriz por um escalar: Multiplicação entre matrizes: Multiplicação entre matrizes:

Multiplicação entre matrizes(exemplos) Multiplicação entre matrizes(exemplos) Impossível Possível Transposta de um vetor ou matriz: Transposta de um vetor ou matriz: Aritmética de Vetores e Matrizes

Associativa: A.(B.D) = (A.B).D. Distributiva à direita: A.(B + D) = A.B + A.D. Distributiva à esquerda: (A + B).D = A.D + B.D. Existência de elemento neutro: A.I = I.A = A. Uma matriz I de ordem n é uma matriz identidade, se i jk = 1, quando j = k e os outros elementos são nulos. Propriedades do Produto de Matrizes

Transformações lineares: Translação x y a = x y c b x’ y’ Transladar significa movimentar o objeto. Transladamos um objeto transladando todos os seus pontos. Para obter a partir de um ponto (x,y) um novo ponto (x’,y’) no plano adicionamos quantidades às suas coordenadas.

Transformações lineares: Escala x y a = x y x´ y´ a´a´ = Redução (0< s x, s y <1), Aumento (s x, sy >1) c b Escalar significa mudar as dimensões de escala. Para isso multiplicamos os valores de suas coordenadas por um fator de escala.

Transformações lineares: Rotação x´ y´ p' = x´ y´  r x´ = x.cos  - y.sen  y´ = x.sen  + y.cos  x y p = x y   r rr Rotacionar significa girar. Na Figura abaixo mostra-se a rotação de um ponto p em torno da origem (0,0), passando para a posição p’. Matriz de rotação no plano xy por um ângulo Ө

Resumo - Transformações 2D Translação Escala Rotação

Transformações 3D Translação Escala Rotação ao redor do eixo z

Rotações 3D Plano yz Plano xy Plano zx x y z

Rotação em torno de um ponto que não é a origem Caso de um objeto não estar definido na origem do sistema de coordenadas - A multiplicação de suas coordenadas por uma matriz de rotação também resulta em um translação. x y (9,2)(5,2) (7,7) x y y P x Em torno da origem Em torno de P

Para alterar a orientação de um objeto em torno de um certo ponto, é necessário, (1) realizar uma translação para localizar esse ponto na origem do sistema, (2) aplicar a rotação desejada e, (3) Aplicar uma translação inversa Rotação em torno de um ponto que não é a origem

x y P x y (1) (2) (3) y y P Objeto original Depois da Translação de Após Rotação Após Translação que P à origem retorna à posição original Rotação em torno de um ponto que não é a origem

Coordenadas homogêneas Translação não é linear. Como representar em forma de matriz? x’=x+tx y’=y+ty z’=z+tz Solução: uso de coordenadas homogêneas

Coordenadas Homogêneas Adiciona uma terceira coordenada w. Um ponto 2D passa a ser um vetor com 3 coordenadas Uma transformação do sistema homogêneo para o cartesiano se dá pela seguinte relação: (x’,y’)=(x/w,y/w) W=1 a transformação entre os espaços é direta de modo que, (x,y,1) no sistema homogêneo tem os mesmos valores no espaço cartesiano 2D: (x,y).

Transformações 3D

Rotação : glRotatef(angle,x,y,z) Plano yz Plano xy Plano zx x y z

Analogia da Câmera (OpenGL) O processo de transformação para produzir a cena desejada para visualização é análogo a tirar uma foto com uma câmera.

O modelo de visualização em OpenGL, é similar a uma câmera fotográfica! – Tripé: visualização – Modelo: modelagem – Lente: projeção – Papel: viewport A Câmera OpenGL

Analogia da Câmera (OpenGL) O processo de transformação para produzir a cena desejada para visualização é análogo a tirar uma foto com uma câmera. Os passos são: – 1. Orientar a câmera em direção da cena (transformação de visualização) – 2. Posicionar devidamente o(s) objeto(s), a serem fotografados, no cenário (transformações geométricas estudadas em aula, também chamadas transformações de modelagem). – 3. Escolher o lente da câmera ou ajustar o zoom (transformação de projeção). – 4. Determinar o tamanho desejado para a fotografia final (transformação de viewport).

Orientar a câmera em direção da cena (transforma ç ão de visualiza ç ão)

A câmera em OpenGL “por default” tem sua posição na origem de coordenadas (0,0,0) e a sua orientação é com vetor up=(0,1,0). Existem três opções para mudar sua posição e orientação: (1) Usar glTranslate*() e glRotate*(). Move a camera ou move todos os objetos em relação a uma camera fixa; (2) gluLookAt()

Visualizando devidamente o objeto (Exemplo) Objeto e câmera na origem

Visualizando devidamente o objeto Para visualizá-lo tenho duas opções: (a) Mudar a câmera, ou (b) Mudar o objeto Com a câmera na origem (0,0,0) não posso visualizar devidamente um objeto na posição (0,0,0)

glTranslatef(0.0, 0.0, -5.0); (b) Mudando o objeto Usando glTranslate() e glRotate()

Usando gluLookAt gluLookAt(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz) (a) Mudando a câmera

gluLookAt A cena é constru í da na origem e definimos uma posi ç ão arbitr á ria para a câmera void gluLookAt (eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz); – Eye: localização da camera – Center: para onde a camera aponta – Up: vetor de direção de topo da camera

gluLookAt

Exemplo – Cubo (Programa cube.c) Um cubo é escalado pela transformação de modelagem glScalef (1.0, 2.0, 1.0). A transformação de visualização gluLookAt(), posiciona e orienta a câmera em direção do cubo. As transformações de projeção e viewport são também especificadas.

Exemplo – Cubo (Programa cube.c) Example 3-1 : Transformed Cube: cube.c #include void init(void){ glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_FLAT); }

Exemplo – Cubo (Programa cube.c) void display(void){ glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glLoadIdentity (); /* clear the matrix */ /* viewing transformation */ gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glScalef (1.0, 2.0, 1.0); /* modeling transformation */ glutWireCube (1.0); glFlush (); }

Exemplo – Cubo (Programa cube.c) void reshape (int w, int h){ glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0); glMatrixMode (GL_MODELVIEW); }

Exemplo – Cubo (Programa cube.c) int main(int argc, char** argv){ glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return 0; }

Matrizes de transforma ç ão glMatrixMode(GL_MODELVIEW); - Define a matriz de transformação de visualização. Após isso deve-se definir a câmera com gluLookAt ou definir as transforma ç ões geom é tricas glRotate e/ou glTranslate para orientar e posicionar os objetos em rela ç ão da câmera.

Pilha de Matrizes – Hierarquia de objetos As vezes queremos construir objetos hierarquicos nos quais objetos complicados são construidos a partir de objetos mais simples. Por exemplo, (a) Uma mesa ou (b) um automovel com 4 rodas onde cada uma delas é ligada ao carro com cinco parafusos. (c) O corpo humano

Pilha de Matrizes – Hierarquia de objetos Tronco Coxa Canela Pé

Pilha de Matrizes – Hierarquia de objetos Os passos para desenhar um carro serião: - Desenhe o corpo do carro. - Guarde a posição onde estamos e translade à direita a roda da frente. - Desenhe a roda e elimine a última translação talque a posição corrente esteja de volta na origem do carro. - Guarde a posição onde estamos e translade à esquerda a roda da frente.... Assim, para cada roda, desenhamos a roda, guardamos a posição onde estamos, e sucessivamente transladamos a cada uma das posições que os parafusos são desenhados, eliminamos as transformações depois que cada parafuso é desenhado.

Pilha de Matrizes – Hierarquia de objetos glPushMatrixglPopMatrix

Pilha de Matrizes – Hierarquia de objetos Desenhe um automovel asumindo que existem as rotinas que desenham o corpo do carro, a roda e o parafuso. Example 3-4 : Pushing and Popping the Matrix draw_wheel_and_bolts(){ long i; draw_wheel(); for(i=0;i<5;i++){ glPushMatrix(); glRotatef(72.0*i,0.0,0.0,1.0); glTranslatef(3.0,0.0,0.0); draw_bolt(); glPopMatrix(); }}

Pilha de Matrizes – Hierarquia de objetos draw_body_and_wheel_and_bolts(){ draw_car_body(); glPushMatrix(); glTranslatef(40,0,30); /*move to first wheel position*/ draw_wheel_and_bolts(); glPopMatrix(); glPushMatrix(); glTranslatef(40,0,-30); /*move to 2nd wheel position*/ draw_wheel_and_bolts(); glPopMatrix();... /*draw last two wheels similarly*/ }

Formas geométricas tridimensionais As formas geométricas tridimensionais que mais usaremos e que a Glut fornece são: void glutWireSphere(GLdouble radius, GLint slices, GLint stacks); void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks); void glutWireCube(GLdouble size); void glutSolidCube(GLdouble size); void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius,GLint nsides, GLint rings); void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius,GLint nsides, GLint rings);

Formas geométricas tridimensionais void glutWireIcosahedron(void); void glutSolidIcosahedron(void); void glutWireOctahedron(void); void glutSolidOctahedron(void); void glutWireTetrahedron(void); void glutSolidTetrahedron(void); void glutWireDodecahedron(GLdouble radius); void glutSolidDodecahedron(GLdouble radius); void glutWireCone(GLdouble radius, GLdouble height, GLint slices,GLint stacks); void glutSolidCone(idem); void glutWireTeapot(GLdouble size); void glutSolidTeapot(GLdouble size);

Exercício (1) Faça um programa C/OpenGL que desenhe uma mesa retangular, a partir de cubos (glutWireCube) e transformações de modelagem. (2) Oriente devidamente a câmera, de forma que obtenhamos as seguintes imagens da mesa: (a) (b) (c) (d)