Computação Gráfica OpenGl 03

Documentos relacionados
Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Taguspark / Alameda. Primeiro Teste 17 de Março de 2012

Computação Gráfica - OpenGl 02

CG 2013/2014 Primeiro Teste LEIC Alameda/Taguspark

Sistemas de Referência

Fundamentos Matemá3cos para Computação Gráfica

Transformações geométricas

Transformações Geométricas

Computação Gráfica OpenGL 05 3D

Conceitos importantes da Computação Gráfica [3]

Transformações geométricas no plano e no espaço

Computação Gráfica Transformações Geométrica no Plano e no Espaço

Computação Gráfica OpenGl 01

Computação Gráfica - 13

Transformações Geométricas

Computação Gráfica 09

Computação Gráfica - 04

aula8 Transformações Geométricas no Plano e no Espaço 2016/2 IC / UFF

Sumário COMPUTAÇÃO GRÁFICA E INTERFACES. Modelos e modelagem. Modelos e modelagem. Transformações Geométricas e Visualização 2D

Computação Gráfica. Engenharia de Computação. CEFET/RJ campus Petrópolis. Prof. Luis Retondaro. Aula 6. Projeções

OpenGL, GLU e GLUT. GLUT (OpenGL Utility Toolkit) OpenGL. Linguagem. OpenGL. Esqueleto de um programa em PyOpenGL

Computação Gráfica - 10

Transformações de Pontos. Computação Gráfica Prof. Dr. Paulo Roberto Gomes Luzzardi Aluna: Karina da Silva Salles

Projeções e Transformações em 3D

Transformações Geométricas. Transformações Geométricas. Sistemas de Coordenadas. Translação: M.C.F. de Oliveira Rosane Minghim 2006

4. Curvas Paramétricas e Transformações 2D

Desenho de uma matriz de retângulos Serve de base para o exercício das cores

Capítulo 3 Primeiros Passos em OpenGL Função Desenha Função Teclado Função Inicializa Programa Principal...

Computação Gráfica - 11

Transformações Geométricas 2D e 3D

OpenGL. Sumário COMPUTAÇÃO GRÁFICA E INTERFACES. Introdução. Introdução. Carlos Carreto

Revisões. Módulos Sistemas Gráficos e Interação. Filipe Pacheco SGRAI 2017/18 DEI-ISEP 228. Instituto Superior de Engenharia do Porto

Introdução a OpenGL. Renato Rodrigues Oliveira da Silva Danilo Medeiros Eler

Computação Gráfica - 06

Computação Gráfica - 09

Introdução Programando com OpenGL Exemplos. O que é OpenGL? [1]

Computação Gráfica II

Computação Gráfica - 09

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Alameda / Taguspark. Terceiro Teste 19 de Maio de 2012

Computação Gráfica - 13

OpenGL. Computação Gráfica ISEL/DEETC/SP Computação Gráfica

Coordenadas Homogêneas no Plano e no Espaço

Modelo Hierárquico & Transformações Geométricas

Computação Gráfica OpenGL 05 3D

Projeções e Visualização

Transformações Geométricas Grafos de Cena

aula9 Coordenadas homogêneas e projeções 2016/2 IC / UFF

Transformações Geométricas

Mecânica Un.2. Momento em relação a um Ponto. Créditos: Professor Leandro

Computação Gráfica - 13

COMPUTAÇÃO GRÁFICA - PROF. MSC. LEANDRO TONIETTO SELEÇÃO DE OBJETOS EM OPENGL - SELECT BUFFER

Modelos Geométricos Transformações

6. Geometria, Primitivas e Transformações 3D

Matemática Discreta - 05

Transformações (Cap 4.3, 4.4 e 4.6 a 4.10)

Introdução ao OpenGL

Introdução à Computação Gráfica

Transcrição:

Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação Computação Gráfica OpenGl 03 Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav

Desenhando Shapes Desenhando um foguete Bico void Bico() { glbegin(gl_triangles); glcolor3f(0,1,0); glvertex3f(3.0,6.0,0); glvertex3f(4.0, 8.0,0); glvertex3f(5.0,6.0,0); glend(); Página 2

Desenhando Shapes Desenhando um foguete Corpo void Corpo() { glbegin(gl_quads); glcolor3f(0,0,1); glvertex3f(3.0,1.0,0); glvertex3f(5.0, 1.0,0); glvertex3f(5.0,6.0,0); glvertex3f(3.0,6.0,0); glend(); Página 3

Desenhando Shapes Desenhando um foguete Asa Esquerda void AsaEsquerda() { glbegin(gl_triangles); glcolor3f(1,0,0); glvertex3f(1.5,1.0,0); glvertex3f(3.0, 1.0,0); glvertex3f(3.0,3.0,0); glend(); Página 4

Desenhando Shapes Desenhando um foguete Asa Direita void AsaDireita() { glbegin(gl_triangles); glcolor3f(1,0,0); glvertex3f(5.0,1.0,0); glvertex3f(6.5, 1.0,0); glvertex3f(5.0,3.0,0); glend(); Página 5

Desenhando Shapes Desenhando um foguete Chamada dos procedimentos na callback de desenho. void DesenhaFoguete(void) { glclearcolor(1.0f, 1.0f, 1.0f, 1.0f); glclear(gl_color_buffer_bit); Bico(); Corpo(); AsaEsquerda(); AsaDireita(); glflush(); Página 6

Em muitas aplicações de computação gráfica, há a necessidade de alterar e manipular o conteúdo de uma cena Animações, por exemplo, são produzidas pelo movimento da câmera ou dos objetos presentes na cena Mudanças em orientação, tamanho e formato estão ligadas às transformações geométricas São cumulativas, ou seja, podem ser aplicadas umas sobre as outras Uma transformação geométrica de OpenGL é armazenada internamente em uma matriz A cada transformação esta matriz é alterada e usada para desenhar os objeto a partir daquele momento, até que seja novamente alterada Página 7

Translação Em OpenGL: gltranslate {f,d ( Tx, Ty, Tz ), onde: Tx: é o quanto se quer transladar o objeto em relação ao eixo X Ty: é o quanto se quer transladar o objeto em relação ao eixo Y Tz: é o quanto se quer transladar o objeto em relação ao eixo Z gltranslatef(xf, yf, zf); glbegin(gl_polygon); glvertex2f( xf, yf); glvertex2f( xf, yf); glvertex2f( xf, yf); glend(); Página 8

Translação void DesenhaFoguete(void) { glclearcolor(1.0f, 1.0f, 1.0f, 1.0f); glclear(gl_color_buffer_bit); gltranslatef(3.0f, 2.0f, 0.0f); Bico(); Corpo(); AsaEsquerda(); AsaDireita(); glflush(); Página 9

Rotação É o ato de efetuar um giro em um objeto de acordo com um ângulo e um eixo definidos anteriormente. Para efetuar uma rotação há o comando glrotatef(angulo, x, y, z) que gira o objeto ao redor do vetor (x,y,z). O giro é de Angulo graus, no sentido anti-horário. glrotatef(45.0f,0.0f,0.0f,1.0f);// roda 45 graus no eixo z glbegin(gl_polygon); glvertex2f( xf, yf); glvertex2f( xf, yf); glvertex2f( xf, yf); glend(); Página 10

Rotação void DesenhaFoguete(void) { glclearcolor(1.0f, 1.0f, 1.0f, 1.0f); glclear(gl_color_buffer_bit); glrotatef(20, 0.0f, 0.0f, 1.0f); Bico(); Corpo(); AsaEsquerda(); AsaDireita(); glflush(); Página 11

Escala Redimensiona o objeto segundo parâmetros fornecidos. Para efetuar uma escala usa-se o comando glscalef( x, y, z) que redimensiona o objeto. Se Sx = Sy = Sz, objeto manterá proporções relativas em x, y e z; Se (Sx=Sy=Sz) > 1 objeto será ampliado; Se (Sx=Sy, Sz) < 1 objeto será reduzido; Se os 3 valores forem distintos objeto será deformado. glscalef(0.5f,0.5f,0.5f);// reduz o tamanho do objeto à metade glbegin(gl_polygon); glvertex2f( xf, yf); glvertex2f( xf, yf); glvertex2f( xf, yf); glend(); Página 12

Escala void DesenhaFoguete(void) { glclearcolor(1.0f, 1.0f, 1.0f, 1.0f); glclear(gl_color_buffer_bit); glscalef(0.5f, 0.5f, 1.0f); Bico(); Corpo(); AsaEsquerda(); AsaDireita(); glflush(); Página 13

void DesenhaFoguete(void) { glclearcolor(1.0f, 1.0f, 1.0f, 1.0f); glclear(gl_color_buffer_bit); gltranslatef(3.0f, 2.0f, 0.0f); glscalef(0.5f, 0.5f, 1.0f); glrotatef(20, 0.0f, 0.0f, 1.0f); Bico(); Corpo(); AsaEsquerda(); AsaDireita(); glflush(); Página 14

void DesenhaFoguete(void) { glclearcolor(1.0f, 1.0f, 1.0f, 1.0f); glclear(gl_color_buffer_bit); glscalef(0.5f, 0.5f, 1.0f); gltranslatef(3.0f, 2.0f, 0.0f); glrotatef(20, 0.0f, 0.0f, 1.0f); Bico(); Corpo(); AsaEsquerda(); AsaDireita(); glflush(); Página 15

void DesenhaFoguete(void) { glclearcolor(1.0f, 1.0f, 1.0f, 1.0f); glclear(gl_color_buffer_bit); gltranslatef(3.0f, 2.0f, 0.0f); Bico(); glscalef(0.5f, 0.5f, 1.0f); Corpo(); glrotatef(20, 0.0f, 0.0f, 1.0f); AsaEsquerda(); AsaDireita(); glflush(); Página 16

As transformações em OpenGL são cumulativas; Isto ocorre porque uma transformação geométrica de OpenGL é armazenada internamente em uma matriz; Para evitar este efeito "cumulativo", é necessário utilizar as seguintes funções: glpushmatrix() Utilizada para empilhar a matriz de transformação corrente; glpopmatrix() Utilizada para desempilhar a matriz de transformação corrente do topo da pilha, substituindo a corrente. glloadidentity() Utilizada para zerar as transformações, a partir do carregamento da matriz identidade. Página 17

void DesenhaFoguete(void) { glclearcolor(1.0f, 1.0f, 1.0f, 1.0f); glclear(gl_color_buffer_bit); glpushmatrix(); //guarda matriz orig gltranslatef(3.0f, 2.0f, 0.0f); Bico(); glpopmatrix(); //chama matriz orig Bico(); glpushmatrix(); glrotatef(20, 0.0f, 0.0f, 1.0f); Corpo(); glpopmatrix(); glscalef(0.5f, 0.5f, 1.0f); Bico(); Corpo(); AsaEsquerda(); AsaDireita(); glflush(); Página 18

Pilha de Matrizes Hierarquia de objetos As vezes queremos construir objetos hierárquicos nos quais objetos complicados são construídos a partir de objetos mais simples. Por exemplo, Uma mesa ou; Um automóvel com 4 rodas onde cada uma delas é ligada ao carro com cinco parafusos; O corpo humano.

Pilha de Matrizes Hierarquia de objetos Tronco Coxa Canela Pé

Transformações Hieráquicas Ao movimentarmos o ombro, causa um movimento no braço. Ao movimentarmos o braço, a mão também irá se movimentar. Cria-se então uma hierarquia para construção de objetos complexos de uma maneira modular e a possibilidade de modificação completa ou por parte das estruturas dos seus componentes. Para essa manipulação, há a necessidade de acumular as transformações geométricas aplicadas de maneira a combiná-las para alcançar o resultado esperado. No OpenGl, essa acumulação e recuperação deve ser feita com as funções glpushmatrix e glpopmatrix.

Pilha de Matrizes Hierarquia de objetos glpushmatrix glpopmatrix Código Exemplo