opengl: transforma˘c~oes geom etricas e viewing

33
images/logo OpenGL:Transforma¸c˜ oes Geom´ etricas e Viewing Transforma¸ oes Geom´ etricas nos espa¸ cos 2D e 3D P.A.E. Eric Macedo Cabral 1 Profa. Rosane Minghim 2 1 [email protected], 2 [email protected] Instituto de Computa¸c˜ ao e Matem´ atica Computacional (ICMC) Universidade de S˜ ao Paulo (USP) 27 de Setembro de 2018 Cabral, Eric M. (ICMC USP) OpenGL – 2. Transforma¸c˜oes e Viewing 27 de Setembro de 2018 1 / 33

Upload: others

Post on 16-Jul-2022

16 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

OpenGL: Transformacoes Geometricas e ViewingTransformacoes Geometricas nos espacos 2D e 3D

P.A.E. Eric Macedo Cabral1 Profa. Rosane Minghim2

[email protected], [email protected]

Instituto de Computacao e Matematica Computacional (ICMC)Universidade de Sao Paulo (USP)

27 de Setembro de 2018

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 1 / 33

Page 2: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Sumario

1 Introducao

2 Projecoes

3 Transformacoes Geometricas

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 2 / 33

Page 3: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Roteiro

1 IntroducaoAmbiente Visual 2DAmbiente Visual 3D

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 3 / 33

Page 4: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Ambiente Visual

No monitor do computador e adotado o SRT (Sistema de Referenciada Tela).

A origem fica no canto superior esquerdo do monitor.

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 4 / 33

Page 5: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Ambiente Visual 2D I

Janela de Selecao (Window)

E a area que define a porcao do universo que desejamos mapear na tela.

Metodo OpenGL que define a janela de selecao:

1 void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, ←↩GLdouble top)

left: Limite inferior do eixo X.

right: Limite superior do eixo X.

bottom: Limite inferior do eixo Y.

top: Limite superior do eixo Y.

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 5 / 33

Page 6: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Ambiente Visual 2D II

Janela de Exibicao (Viewport)

E a area do monitor que deseja-se exibir o conteudo da janela de selecao(Window).

Metodo OpenGL que define a janela de exibicao:

1 void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)

x: Posicao no eixo x referente a coordenadas da tela.

y: Posicao no eixo y referente a coordenadas da tela..

width: Proporcao de largura da janela de exibicao.

height: Proporcao de altura da janela de exibicao.

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 6 / 33

Page 7: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Ambiente Visual 2D III

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 7 / 33

Page 8: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Ambiente Visual 2D IV

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 8 / 33

Page 9: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Ambiente Visual 3D I

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 9 / 33

Page 10: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Ambiente Visual 3D II

A GLU oferece a seguinte funcao para posicionar e orientar a camera:

1 void gluLookAt(GLdouble obsx, obsy, obsz, alvox, alvoy, alvoz, upx, upy←↩, upz)

obs*: define a posicao da camera.

alvo*: ponto para onde o observador esta olhando.

up*: vetor que indica a ’vertical’ da camera.

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 10 / 33

Page 11: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Ambiente Visual 3D III

Desenho 3D

Em 3D e necessario especificar tambem a coordenada Z.

Sao utilizadas as mesmas primitivas graficas apresentadas em 2D:

GL POINTS, GL LINES, GL LINE LOOP, GL QUADS,GL TRIANGLES, etc.

Remocao de superfıcies escondidas

Ao renderizar objetos solidos, devemos ter o cuidado de exibir apenasas faces que realmente devem aparecer na cena.

Nao devemos exibir as faces escondidas, localizadas atras de outrosobjetos.

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 11 / 33

Page 12: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Ambiente Visual 3D IV

Remocao de superfıcies escondidas

A OpenGL implementa um algoritmo simples e eficiente para remocaode faces ocultas: Z-Buffering.

Utiliza um buffer para cor (Color Buffer) e outro para a profundidade(Depth Buffer).

Objetos mais proximos da camera virtual definem a cor dos pixels dacena.

Para indicar o uso do buffer de profundidade:

1 glutInitDisplayMode( ... | GLUT_DEPTH);

Para habilitar o uso do buffer:

1 glEnable(DL_DEPTH_TEST);

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 12 / 33

Page 13: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Ambiente Visual 3D V

Fonte: R. W. Linderman, http://web.cs.wpi.edu/ gogo/courses/cs543/

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 13 / 33

Page 14: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Roteiro

2 ProjecoesParalelaPerspectiva

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 14 / 33

Page 15: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Projecoes I

Obtem representacoes bidimensionais de objetos tridimensionais.

A projecao e definida por raios de projecao (projetantes) que passamatraves de cada vertice dos objetos e interceptam o plano de projecao.

Dois tipos de projecoes:

Paralela Ortografica.

Perspectiva.

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 15 / 33

Page 16: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Projecao Paralela I

As projetantes sao paralelas entre si.

Nao ha alteracao nas medidas do objeto.

1 void gluOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble ←↩top, GLdouble near, GLdouble far);

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 16 / 33

Page 17: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Projecao Paralela II

Exemplo de Projecao Paralela:

1 void Desenha(){

2 glMatrixMode(GL_PROJECTION);

3 glLoadIdentity();

4 glOrtho(-65.0, 65.0, -65.0, 65.0, -400.0, 400.0);

5 glMatrixMode(GL_MODELVIEW);

6 glLoadIdentity();

7 gluLookAt(40,60,100, 0,0,0, 0,1,0);

8 glClearColor(1.0f, 1.0f, 1.0f, 1.0f);

9 glClear(GL_COLOR_BUFFER_BIT);

10 glColor3f(0.0f, 0.0f, 0.0f);

11 glutWireCube(50);

12 glFlush();

13 }

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 17 / 33

Page 18: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Perspectiva I

As projetantes emanam de um unico ponto, a uma distancia finita doplano de projecao.

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 18 / 33

Page 19: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Perspectiva II

1 void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, ←↩GLdouble zFar);

fovy: angulo de abertura da camera em y.

aspect: aspecto de visualizacao em x.

zNear: distancia do observador ao plano de corte frontal.

zFar: distancia do observador ao plano de corte traseiro.

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 19 / 33

Page 20: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Perspectiva III

Exemplo de Projecao Perspectiva:

1 void Desenha(){

2 glMatrixMode(GL_PROJECTION);

3 glLoadIdentity();

4 gluPerspective(60, 1.0, 0.5, 500);

5 glMatrixMode(GL_MODELVIEW);

6 glLoadIdentity();

7 gluLookAt(40, 60, 100, 0, 0, 0, 0, 1, 0);

8 glClearColor(1.0f, 1.0f, 1.0f, 1.0f);

9 glClear(GL_COLOR_BUFFER_BIT);

10 glColor3f(0.0f, 0.0f, 1.0f);

11 glutWireCube(50);

12 glFlush();

13 }

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 20 / 33

Page 21: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Roteiro

3 Transformacoes GeometricasTransformacoes BasicasTransformacoes Hierarquicas

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 21 / 33

Page 22: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Transformacoes Geometricas I

O objeto transformado deve inicialmente ser transladado para aorigem.

Entao deve ser aplicada a transformacao.

Por fim o objeto deve ser transladado novamente para sua posicaoinicial.

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 22 / 33

Page 23: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Transformacoes Geometricas II

Matriz de Transformacao

Todos os comandos de transformacao sao compostos em uma matrizde transformacao.

Cada novo comando e acumulado, alterando a configuracao da matriz.

Ao especificar um novo vertice, a sua posicao e calculada aplicando-sea matriz de transformacao corrente as suas coordenadas.

A matriz de transformacao e inicializada com a matriz identidade:

1 glLoadIdentity();

Nao altera os objetos

1 0 00 1 00 0 1

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 23 / 33

Page 24: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Transformacoes Geometricas III

Translacao:

1 void glTranslatef(GLfloat x, GLfloat y, GLfloat z);

x, y, z: representam a quantidade a ser transladada no respectivo eixo.

Em 2D: z = 0.

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 24 / 33

Page 25: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Transformacoes Geometricas IV

Rotacao:

1 void glRotatef(GLfloat angulo, GLfloat x, GLfloat y, GLfloat z);

Angulo: especifica o angulo de rotacao (em graus).

x, y, z: o eixo a ser realizada a rotacao.

Para o caso 2D: x = 0, y = 0, z = 1.

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 25 / 33

Page 26: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Transformacoes Geometricas V

Escala:

1 void glScalef(GLfloat x, GLfloat y, GLfloat z);

x, y, z: Representam o fator de escala nos respectivos eixos.

Em 2D: z = 0.

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 26 / 33

Page 27: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Transformacoes Hierarquicas I

Sao transformacoes diferentes aplicadas em objetos que seguem umahierarquia.

As transformacoes de nıvel mais baixo na hierarquia acumulam astransformacoes de nıveis hierarquicos mais altos.

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 27 / 33

Page 28: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Transformacoes Hierarquicas II

Para aplicar transformacoes hierarquicas em diversos objetos, epossıvel salvar a matriz de transformacao corrente em uma pilha.

Cada objeto transformado utiliza sua propria versao da matriz detransformacao, que e empilhada desempilhada conforme anecessidade.

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 28 / 33

Page 29: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Transformacoes Hierarquicas III

1 glPushMatrix();

Empilha a matriz de transformacao atual.

Nao altera a matriz atual.

1 glPopMatrix();

Retira a matriz do topo da pilha.

A matriz atual e substituıda pela matriz desempilhada.

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 29 / 33

Page 30: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Proxima Aula

Exercıcio:

Fazer uma aplicacao OpenGL que posicione um observador na origemdo R3 e que desenhe um objeto diferente em cada quadrante. Alemdisso, a aplicacao deve permitir uma mudanca na direcao de visao doobservador por meio das teclas direcionais.

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 30 / 33

Page 31: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Duvidas

Horario de atendimento: Quarta-feira, das 14 as 16h.

Laboratorio VICG (Bloco 1, sala 007)Enviar email com antecedencia.

Email : [email protected]

Subject : [CG2018 2]

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 31 / 33

Page 32: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Bibliografia

Basica:Hearn, D. Baker, M. P. Computer Graphics with OpenGL, PrenticeHall, 2004. (livro texto)Neider, J. Davis, T. Woo, M. OpenGL programming guide, 2007.(livro base para aulas praticas)Angel, E. Interactive computer graphics: a top-down approach withOpenGL, Addison Wesley, 2000.Foley, J. et. al - Introduction to Computer Graphics, Addison-Wesley,1993.Kessenich, J., Sellers, G., Shreiner, D. OpenGL Programming Guide:The Official Guide to Learning OpenGL, Version 4.5 with SPIR-V -Ninth Edition.

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 32 / 33

Page 33: OpenGL: Transforma˘c~oes Geom etricas e Viewing

images/logo

Bibliografia

Complementar:Computer Graphics Comes of Age: An Interview with Andries vanDam. CACM, vol. 27, no. 7. 1982The RenderMan – And the Oscar Goes to... IEEE Spectrum, vol. 38,no. 4, abril de 2001.Material do ano passado:https://sites.google.com/site/computacaograficaicmc2017t2/

Apostilas antigas da disciplina Computacao Grafica

http://www.gbdi.icmc.usp.br/material?q=system/files/

apostilas.pdf

Cabral, Eric M. (ICMC USP) OpenGL – 2. Transformacoes e Viewing 27 de Setembro de 2018 33 / 33