Transformações geométricas

Documentos relacionados
Computação Gráfica OpenGL 05 3D

CG 2013/2014 Primeiro Teste LEIC Alameda/Taguspark

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

Projeções e Visualização

Computação Gráfica OpenGL 05 3D

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

2º Exame. Computação Gráfica

Sist. Coordenadas Câmera (SCC)

Transformações Geométricas

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

Visualização. - Aula 4 -

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

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. Licenciatura em Engenharia Informática e de Computadores Alameda/Taguspark. 1º Exame 29 Junho de 2010

Computação Gráfica OpenGl 03

3D no OpenGL. Visualização e Transformações Perspectiva. Transformações do Modelview. Processo

Transformações Geométricas

Pipeline de Visualização Câmara Virtual

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

Computação Gráfica - 06

Cap. 4: Janelas, Visores & Recorte Gráfico

Engenharia Informática Computação Gráfica

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

Computação Gráfica - OpenGl 02

OpenGL. Conceitos Básicos. Waldemar Celes. Tecgraf/PUC-Rio

1º Exame. Computação Gráfica

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Alameda / Taguspark. Exame de Recurso 29 de Junho de 2011

1º Exame. Computação Gráfica

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

Introdução ao OpenGL

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

OpenGL. Parte I: Geometria. Waldemar Celes Departamento de Informática Tecgraf/PUC-Rio

CG 2015/2016 Segundo Teste LEIC Alameda/Taguspark. Segundo Teste. 18 de Novembro de 2015

7. Projeções Geométricas e Visualização 3D

Computação Gráfica. 5385: Licenciatura em Engenharia Informática. Cap. 3 Janelas e Visores. Janelas e Visores

PROGRAMAÇÃO OPENGL LIVRO: TEORIA DA COMPUTAÇÃO GRÁFICA

- INF Remoção de faces ocultas Aula 21

CG 2015/2016 Prova de Repescagem LEIC Alameda/Taguspark. 12 de Janeiro de 2016

Animação e Visualização Tridimensional

Simulação do controle de tráfego de automóveis em uma malha rodoviária urbana: Versão 3.0

Pedro Vasconcelos DCC/FCUP. Programação Funcional 11 a Aula Gráficos usando Gloss

Fundamentos de Computação Gráfica. Transformações Geométricas

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

Computação Gráfica - 04

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

FUNDAMENTOS E APLICAÇÕES. Luis Valente

FCG2006 Prova sobre OpenGL e Rastreamento de Raios

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

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

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

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

Transformações Geométricas Grafos de Cena

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

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

Programa de Aprimoramento Discente em Modelagem Geométrica Computacional. Curso Básico de OpenGL

Transformações 3D. Soraia Raupp Musse

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

Modelos Geométricos Transformações

Transcrição:

Módulo 7 Sistemas Gráficos e Interação Instituto Superior de Engenharia do Porto Filipe Pacheco ffp@isep.ipp.pt Transformações geométricas SGRAI 2017/18 DEI-ISEP 97

Conteúdo Tipos de transformações Model/View Viewport Operações de transformação Rotação Translação Escalamento Posicionamento da câmara Composição de transformações SGRAI 2017/18 DEI-ISEP 98

Analogia da câmara fotográfica 1. Apontar a câmara à cena (viewing transformation). 2. Compor a cena (modeling transformation). 3. Escolher o tipo de lente e acertar o zoom (projection transformation). 4. Determinar o tamanho físico da cena (viewport transformation). SGRAI 2017/18 99

Tipos de transformações View e Model glmatrixmode(gl_modelview) Posicionamento da câmara Rotações, translações, escalamentos Projection glmatrixmode(gl_projection) Definição do volume de projeção Viewport glviewport (x, y, width, height) SGRAI 2017/18 DEI-ISEP 100

Esqueleto de código void reshape(int w, int h) { // viewport transformation glviewport(0, 0, w, h); // projection transformation glmatrixmode(gl_projection); glloadidentity(); projecao();... } void display() { // modelview transformation glmatrixmode(gl_modelview); // costuma estar na reshape glloadidentity(); // posicionamento da câmara camara(); // transformações do modelo... } SGRAI 2017/18 DEI-ISEP 101

Evitar transformações desnecessárias Deve-se evitar cálculos acumulados nas matrizes Exemplo: não ir aplicando rotações na mesma matriz, mas sim ter uma variável com o ângulo de rotação SGRAI 2017/18 DEI-ISEP 102

Inicializar as matrizes Antes de definir transformações deve-se inicializar a matriz de transformação usando glloadidentity() SGRAI 2017/18 DEI-ISEP 103

Rotações void glrotate{f d} (angle, ex, ey, ez) R SGRAI 2017/18 DEI-ISEP 104

Rotações glloadidentity(); glcolor3f(1, 0, 0); glrectf(-0.5,-0.5,0.5,0.5); glrotatef(10, 0, 0, 1); glcolor3ub(0, 255, 0); glrectf(-0.25,-0.25,0.25,0.25); R SGRAI 2017/18 DEI-ISEP 105

Translações void gltranslate{f d} (dx, dy, dz); T SGRAI 2017/18 DEI-ISEP 106

Translações glloadidentity(); glcolor3f(1, 0, 0); glrectf(-0.5,-0.5,0.5,0.5); gltranslatef(0.5, 0.0, 0.0); glcolor3ub(0, 255, 0); glrectf(-0.25,-0.25,0.25,0.25); T SGRAI 2017/18 DEI-ISEP 107

Translações glloadidentity(); glcolor3f(1, 0, 0); glrectf(-0.5,-0.5,0.5,0.5); gltranslatef(0.5, 0.0, 0.0); glcolor3ub(0, 255, 0); glrectf(-0.25,-0.25,0.25,0.25); 0.5, 0.5 0.5, 0.5 0.25, 0.25 0.25, 0.25 T 0.0, 0.0 0.5, 0.0-0.5, -0.5-0.25, -0.25-0.5, -0.5-0.25, -0.25 SGRAI 2017/18 DEI-ISEP 108

Escalamento void glscale{f d} sx, sy, sz) evitar escalas não proporcionais (sx!= sy!= sz) pois alteram vectores normal, rotações, etc S SGRAI 2017/18 DEI-ISEP 109

Escalamento glloadidentity(); glcolor3f(1, 0, 0); glrectf(-0.5,-0.5,0.5,0.5); glscalef(0.5, 0.5, 0.5); glcolor3ub(0, 255, 0); glrectf(-0.25,-0.25,0.25,0.25); S SGRAI 2017/18 DEI-ISEP 110

Escalamento glloadidentity(); glcolor3f(1, 0, 0); glrectf(-0.5,-0.5,0.5,0.5); glscalef(0.5, 0.5, 0.5); glcolor3ub(0, 255, 0); glrectf(-0.25,-0.25,0.25,0.25); 0.5, 0.5 0.5, 0.5 0.25, 0.25 1.0, 1.0 S -1.0, -1.0 0.25, 0.25-0.5, -0.5-0.25, -0.25-0.5, -0.5-0.25, -0.25 SGRAI 2017/18 DEI-ISEP 111

Demo SGRAI 2017/18 DEI-ISEP 112

Posição da câmara Por omissão a câmara está colocada na origem (0, 0, 0) dirigida para o eixo negativo dos zz SGRAI 2017/18 DEI-ISEP 114

Posicionamento da câmara void glulookat( eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz) center eye SGRAI 2017/18 DEI-ISEP 115

Posicionamento da câmara void glulookat(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz) SGRAI 2017/18 DEI-ISEP 116

Posição da câmara Mover a câmara ou mover a cena têm o mesmo resultado glulookat(0,0,+5, 0,0,0, 0,1,0) gltranslatef(0, 0, -5) y (0, 1,0) z (0, 0,5) (0, 0,0) SGRAI 2017/18 DEI-ISEP 117

Posição da câmara Mover a câmara ou mover a cena têm o mesmo resultado glulookat(0,0,+5, 0,0,0, 0,1,0) gltranslatef(0, 0, -5) y y z z (0, 0, -5) SGRAI 2017/18 DEI-ISEP 118

Posição da câmara Podem usar glulookat ou construir a vossa própria rotina de visualização, por exemplo, câmara com movimento polar usando as operações básicas de transformação SGRAI 2017/18 DEI-ISEP 119

O sistema de coordenadas local Ao aplicar uma transformação estão na realidade a mover um sistema de coordenadas agarrado ao modelo glutsolidcube(2) gltranslatef(3, 3, 0) glrotate(45, 0, 0, 1) glutsolidcube(2) SGRAI 2017/18 DEI-ISEP 122

O sistema de coordenadas local glutsolidcube(2) glrect(3, 2, 0, 5, 4, 0) gltranslatef(3, 3, 0) glrotate(45, 0, 0, 1) glutsolidcube(2) glrect(3, 2, 0, 5, 4, 0) SGRAI 2017/18 DEI-ISEP 123

Efeito cumulativo de transformações Translação + Rotação Rotação + Translação T R R T SGRAI 2017/18 DEI-ISEP 124

PushMatrix + PopMatrix Cena final desejada glloadidentity() glpushmatrix() gltranslatef(3, 3, 0) glrotate(45, 0, 0, 1) glutsolidcube(2) glpopmatrix() glrect(3, 2, 0, 5, 4, 0) SGRAI 2017/18 DEI-ISEP 126

Transformações locais Guardar a matriz de transformação usando glpushmatrix() Recuperar a matriz anterior usando glpopmatrix() glpushmatrix e glpopmatrix podem ser usados para a matriz de projeção ou para a matriz de modelo/vista Devem ter em atenção, qual a matriz ativa no momento SGRAI 2017/18 DEI-ISEP 127

Transformações (in)dependentes SGRAI 2017/18 DEI-ISEP 128

Demo SGRAI 2017/18 DEI-ISEP 129

Texto em GLUT Desenhar um carácter glutstrokecharacter(fonte, caracter) glutbitmapcharacter(fonte, caracter) Fontes GLUT_STROKE_ROMAN GLUT_STROKE_MONO_ROMAN GLUT_BITMAP_ 9_BY_15 GLUT_BITMAP_ 8_BY_13 GLUT_BITMAP_TIMES_ROMAN_ 10 GLUT_BITMAP_TIMES_ROMAN_ 24 GLUT_BITMAP_HELVETICA_ 10 GLUT_BITMAP_HELVETICA_ 12 GLUT_BITMAP_HELVETICA_ 18 SGRAI 2017/18 DEI-ISEP 130

Texto em GLUT Desenhado usando o sistema de coordenadas locais e todas as transformações em vigor O tamanho de cada carácter é tipicamente 120 unidades Necessário escalar Proteger a matriz de transformação usando push e pop matrix Ciclo para imprimir uma string completa SGRAI 2017/18 DEI-ISEP 131

Função escreve() void drawstring(glfloat x, GLfloat y, GLfloat z, GLfloat scale, char* msg) { glpushmatrix(); gltranslatef(x, y, z); glscalef(scale, scale, scale); for (int i = 0; i < strlen(msg); i++) glutstrokecharacter(glut_stroke_roman, msg[i]); glpopmatrix(); } SGRAI 2017/18 DEI-ISEP 132

Texto sem usar transformações do modelo // exemplo glpushmatrix(); glloadidentity(); glulookat(0, 0, 5, 0, 0, 0, 0, 1, 0); drawstring(-2, -2, 0, 0.002, msg); glpopmatrix(); SGRAI 2017/18 DEI-ISEP 133

Demo SGRAI 2017/18 DEI-ISEP 134