34
Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

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

Embed Size (px)

Citation preview

Page 1: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Computação Gráfica – Transformações Projetivas

Profa. Mercedes Gonzales Márquez

Page 2: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Tópicos

Conceito de Projeção Projeção Paralela (Ortográfica) e Projeção

Perspectiva Projeções em OpenGL

Page 3: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

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

Page 4: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

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).

Page 5: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Transformações Projetivas

– A projeção permite a visualização bidimensional de objetos tridimensionais.

– Para gerar a imagem de um objeto 3D a partir de um ponto de vista dado, é necessário realizar a sua projeção, ou seja, converter as suas coordenadas 3D em coordenadas 2D.

Page 6: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Elementos básicos da Projeção

Plano de Projeção; Projetante, ou raio projetante; Centro de projeção.

P

P´ Plano de Projeção

Raio de Projeção

xz

y

Centro de Projeção

Page 7: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Elementos básicos da Projeção

Plano de Projeção: A superfície onde será projetado o objeto, ou seja, onde ele será representado em 2D;

Projetante, ou raio projetante: Retas que passam pelos pontos do objeto e pelo centro de projeção.

Centro de projeção: Ponto fixo de onde os raios projetantes partem.

Page 8: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Tipos de Projeção

Existem dois tipos de projeção: (a)Projeção Paralela, Ortogonal ou ortográfica(b)Projeção perspectiva

Page 9: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Tipos de Projeção

(a) Projeção perspectiva : É a mais realista, pois é análogo ao processo de formação de imagens em nossos olhos ou numa câmera fotográfica. Considera a profundidade como elemento de seu cálculo e apresenta um resultado mais familiar ao observador humano. 

Page 10: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Tipos de Projeção

(b)Projeção Paralela ou ortográfica: É a projeção ortogonal de um ponto no plano de projeção. Pode ser vista como uma projeção perspectiva onde o centro de projeção está no infinito. 

Page 11: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Projeção Paralela

As linhas que unem os pontos A e B às suas projeções A’ e B’ são paralelas, isto faz com que o segmento projetado tenha o mesmo tamanho para qualquer distância entre o plano de projeção e o objeto.

Page 12: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Tipos de Projeção

Page 13: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Matriz de Projeção Paralela

Se quisermos a projeção ortográfica em relação ao plano xy (ou z=0), a matriz em coordenadas homogêneas é

11000

0000

0010

0001

1

'

'

'

z

y

x

z

y

x

Se no lugar do plano z=0 for escolhido outro plano qualquer z=Tz paralelo a ele, a matriz será

11000

000

0010

0001

1

'

'

'

z

y

x

Tzz

y

x

Page 14: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Modelo perspectivo ideal

P

p

O

P

O o P1p

p1

y x

z

yx

z

Plano imagem

Plano imagem f

f

oP1p1

Page 15: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Matriz de Projeção Perspectiva

11/100

0000

0010

0001

1

'

'

'

z

y

x

f

z

y

x

Por similaridade de triângulos temos

Centro de projeção

Plano de projeção

(x,y,z)

(x´,y´)

f

fz

y

f

y

fz

x

f

x

'

'

x

y

Page 16: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Projeções em OpenGL

A transformação de projeção em OpenGL descreve como especificar a forma e orientação do volume de visualização. O volume de visualização determina:como a cena será projetada na tela (com projeção paralela ou perspectiva) e

quais objetos ou partes de objetos serão eliminados da cena.

Page 17: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Projeção paralela ortográfica

Page 18: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Projeção em perspectiva

Centro de projeção fixo: eye (posição da câmera)

Duas possibilidades:– Determina um tronco de pirâmide:

glFrustrum– Determina o ângulo de visão

gluPerspective

Page 19: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Definição do volume de visualização

glFrustrum(left, right, bottom, top, near, far);nao precisa ser simétrico

gluPerspective(fovy, aspect ratio, near, far);simétrico

Esses comandos definem a matriz de projeção (PROJECTION)

Page 20: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

glFrustrum

Page 21: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

glFrustrum

Page 22: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

gluPerspective

Page 23: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

gluPerspective

Page 24: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Matrizes de transformação

glMatrixMode(GL_PROJECTION);– Define tipo e parâmetros da projeção

Page 25: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

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.

Page 26: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Exemplo – Cubo (Programa cube.c)

Example 3-1 : Transformed Cube: cube.c

#include <GL/gl.h>

#include <GL/glu.h>

#include <GL/glut.h>

void init(void){

glClearColor (0.0, 0.0, 0.0, 0.0);

glShadeModel (GL_FLAT);

}

Page 27: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

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 ();

}

Page 28: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

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);

}

Page 29: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

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;

}

Page 30: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Exercício

(1)Modifique o programa cube.c de forma que(a) Projete o cubo ortogonalmente. (b) Projete o cubo em perspectiva porém com a função gluPerspective().

Page 31: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

glViewPort

glViewPort (x,y,width, height)Define um retângulo de pixels na janela no qual a imagem final será mapeada.

(x,y) : o canto inferior esquerda da viewport e (width,height) largura e altura do retângulo da viewportPor default os valores iniciais são (0,0,w,h) ondew, h são os tamanhos pré-definidos da janela.

Page 32: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

glViewPort

A razão da viewport deve ser igual à razão do volume de visualização. Se as duas razões forem diferentes, a imagem projetada será distorcida ao ser mapeada na viewport.

Page 33: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Exercício

O programa planet.c usa glRotate*() para rotacionar um planeta ao redor do sol e para rotacionar o planeta ao redor do seu próprio eixo.

Modifique o programa para que acrescente mais dois planetas com seus respectivos satélites. Como se trata de objetos hierárquicos use glPushMatrix e glPopMatrix (vide aula).

Page 34: Computação Gráfica – Transformações Projetivas Profa. Mercedes Gonzales Márquez

Exercício

Seguindo a orientação dada nos slides de transformações geométricas, faça um programa que desenhe um carro com cinco parafusos em cada uma das suas quatro rodas.