Visualização. - Aula 4 -

Documentos relacionados
Sist. Coordenadas Câmera (SCC)

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

Computação Gráfica e Processamento de Imagens. - mapeamento - visualização. Prof. Julio Arakaki

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

Computação Gráfica - OpenGl 02

Projeções e Visualização

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

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

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

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

Pipeline de Visualização 3D

Computação Gráfica OpenGL 05 3D

CG 2013/2014 Primeiro Teste LEIC Alameda/Taguspark

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

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

Disciplina: Computação Gráfica Prof. Dr. Paulo R. G. Luzzardi. Universidade Católica de Pelotas Centro Politécnico Ciência da Computação

Transformações geométricas

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

Engenharia Informática Computação Gráfica

Computação Gráfica e Processamento de Imagens. recorte ( clipping ) de : o segmentos de retas o polígonos o textos. Prof.

OpenGL. Alberto B. Raposo

Pipeline de Visualização Câmara Virtual

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

1º Exame. Computação Gráfica

1º Exame. Computação Gráfica

Viewing 3D. SCC Computação Gráfica. Prof. Fernando V. Paulovich

Visualização e Projeções

2º Exame. Computação Gráfica

- INF Remoção de faces ocultas Aula 21

Prova Fundamentos Computação Gráfica

Objetos definidos no seu próprio sistema de coordenadas

Computação Gráfica OpenGL 05 3D

Computação Gráfica. Prof. MSc. André Yoshimi Kusumoto

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

FCG2006 Prova sobre OpenGL e Rastreamento de Raios

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

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

2º Exame de Animação e Visualização Tridimensional

Computação Gráfica e Áreas Correlatas

Aula /2 Sistemas de coordenadas Window x Viewport

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. Prof. MSc André Yoshimi Kusumoto

Visualização 2D: - Transformação window to viewport - Clipping

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

Transformações Geométricas Grafos de Cena

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

Computação Gráfica. Prof. MSc. André Yoshimi Kusumoto

Rendering de Polígonos. Determinação de Superfícies Visíveis. Back Face Culling. Back Face Culling. Back Face Culling. Back Face Culling.

Algoritmos de Recorte em 2D

Transformações 3D. Soraia Raupp Musse

Pipeline de Visualização 2D

Transformações 3D. Soraia Raupp Musse

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

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

Computação Gráfica 09

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

Transcrição:

Visualização - Aula 4 -

Pipeline de visualização 2D window recorte mapeamento viewport descrição geométrica rasterização

Visualização de objetos 2D y viewport 1 região (window) 1 região (window) 2 viewport 2 espaço universo x espaço de tela

Transformação de visualização Na prática, a viewport é uma região da janela gráfica associada ao programa de aplicação

Como especificar viewports? (0,0) da tela (xw,yw) glutinitwindowposition (xw,yw); glutwindowsize(m,n); glut CreateWindow ( Janela ); viewport viewport h w (xv,yv) viewport glviewport(xv,yv,h,w)... h e w são em pixels (0,0) da janela

Como especificar window no SRU? y A window é a região de interesse no espaço universo Retângulo delimitado por x=left, x=right left top right x y=top, y=bottom bottom y y top top left right left right x x bottom bottom

Região de interesse no caso de SRU 3D near far A imagem é uma projeção dos objetos 3D num plano A região de interesse pode ser determinada por um paralelepípedo cuja face frontal é esse plano de projeção glmatrixmode (GL_PROJECTION); glloadidentity(); // inicializa matriz de projeção com identidade glortho (left, right, bottom, top, near, far); ou gluortho2d (left, right, bottom, top); near = -1, far = 1... usado para o caso de SRU 2D

Como indicar região de interesse em qualquer posição espacial?

Mudando a posição do observador -zw yw xw Coordenadas Universo Modificado de M.M. Oliveira

Mudando a posição do observador -zw yw xw Coordenadas Universo Modificado de M.M. Oliveira

xc O problema da visualização 3D Mudança de sistemas de coordenadas! Camera Coordinate System (CCS) yc -zc yo -zo Object Coordinate System (OCS) xo -zw yw xw World Coordinate System (WCS)

Visualização 3D: aspectos envolvidos Posicionamento da câmera Observador Orientação da câmera Direção da projeção Definição do tipo de projeção Paralela ou Perspectiva Definição da região de interesse SRU Prisma ou tronco de pirâmide

Sistemas de Coordenadas 3D Y 2D Mão Direita Y (x,y,z) (x,y) Z X Y Z X Mão Esquerda X

Posicionamento e orientação da câmera yq Y Posição do observador vetor visão Q observador + vetor zq xq X plano de projeção Z

Sistema de referência da câmera (SRC) Y Yc Xc SRC SRU vetor visão = Zc Plano de projeção X Z IMPORTANTE: SRU é mão direita e o SRC é mão esquerda

Posição e orientação da câmera Os parâmetros da transformação são compostos na matriz ModelView glmatrixmode (GL_MODELVIEW); glloadidentity (); glulookat (px,py,pz, atx,aty,atz, vx,vy,vz); v = u x n y n O ax,ay,az u = n x up px,py,pz z SRU x

Transformação SRU SRC v u SRC j P w O SRU k O i P = O + x c u + y c v + z c w = (x, y, z) SRC P = O + x u i + y u j + z u k = (x, y, z) SRU

Posição e orientação da câmera Função da GLU indicação da posição do observador, do ponto-alvo e de um vetor que indica a vertical da câmera glulookat ( eyex, eyey, eyez, atx, aty, atz, upx, upy, upz ) AtPoint (alvo) Y Up Vector (y) Eye (posição) Z X

Visualização 3D z y câmera x // Para este exemplo // valores aproximados glmatrixmode (GL_MODELVIEW); glloadidentity(); // inicializa matriz de modelagem com identidade glulookat(0,0,0,0,0,-1,0,1,0); glmatrixmode (GL_PROJECTION); glloadidentity(); // inicializa matriz de projeção com identidade glortho (0, 100, 0, 80,1,100);

Visualização 3D y // Para este exemplo // valores aproximados câmera z x glmatrixmode (GL_MODELVIEW); glloadidentity(); // inicializa matriz de modelagem com identidade glulookat(0,0,0,0,0,-1,0,1,0); glmatrixmode (GL_PROJECTION); glloadidentity(); // inicializa matriz de projeção com identidade glortho (0, 100, 0, 80,-50,100);

Visualização 3D y // Para este exemplo // valores aproximados glmatrixmode (GL_MODELVIEW); glloadidentity(); // inicializa matriz de modelagem com identidade glulookat(50,0,0,-1,0,0,0,1,0); z x câmera glmatrixmode (GL_PROJECTION); glloadidentity(); // inicializa matriz de projeção com identidade glortho (-10, 100, 0, 80,10,80);

Mapeamento window viewport Objetos no plano num universo 2D ou objetos projetados no caso de 3D precisam ser exibidos na viewport y window viewport x

Mapeamento window viewport (xwmax, ywmax) (xu,yu) (xv,yv) (xvmax, yvmax) (xwmin, ywmin) (xvmin, yvmin) 1) Como calcular (xv,yv)? 2) É possível representar o mapeamento window-viewport através de transformações geométricas, tal que Pv = Pu.M Qual a matriz M que representa estas transformações?

Mapeamento window viewport (xwmax, ywmax) (xu,yu) (xv,yv) (xvmax, yvmax) (xwmin, ywmin) (xvmin, yvmin) xv = xvmin + (xu - xwmin) * xvmax - xvmin xwmax - xwmin yv = yvmin + (yu - ywmin) * yvmax - yvmin ywmax - ywmin

Visualização 2D: conseqüências Várias janelas na tela Visões de regiões diferentes do mesmo universo Visão de detalhe do universo Efeitos possíveis Ampliação/Redução (zoomin e zoom-out ) Panorâmica (panning) Compressão horizontal/vertical Como implementar comandos do tipo: View-All ou Fit? View 50%? View 200%?

Mapeamento window viewport (xwmax, ywmax) (xvmax, yvmax) (xu,yu) hw (xv,yv) hv (xwmin, ywmin) ww (xvmin, yvmin) wv Relação de aspecto = largura/altura Na window: ww/hw Na viewport: wv/hv

Exercício Como manter a relação de aspecto dos objetos quando as proporçõessãodiferentes? ww/hw = wv/hv Quando se tem controle sobre a transformação para coordenadas de tela, pode-se corrigir uma das coordenadas dos pontos para manter a relação Como manter a relação de aspecto quando a janela é redimensionada? Redefinindo a viewport ou a window

Callback Reshape: mudando a viewport No main glutreshapefunc(myreshape); void myreshape(glsizei w, GLsizei h) { /* w e h são os tamanhos da janela redimensionada suponha que ww e hw são os tamanhos da window no universo em unidades de SRU e que esta não deve ser alterada */ aspect = ww/hw; } if (w > h) glviewport (0,0,h*aspect, h); // janela usada parcialmente na horizontal else glviewport(0, 0, w, w/aspect); // janela usada parcialmente na vertical glmatrixmode(gl_projection); glortho2d (left, right, bottom, top); glmatrixmode (GL_MODELVIEW);

Callback Reshape: mudando a window No main glutreshapefunc(myreshape); void myreshape(glsizei w, GLsizei h) { /* w e h são os tamanhos da janela redimensionada suponha que ww e hw são os tamanhos da window no universo em unidades de SRU e que esta deve ser alterada de acordo com a janela */ aspect = w/h; glviewport(0, 0, w, h); // viewport é toda a janela glmatrixmode(gl_projection); // redefine window de acordo com a janela na tela if (w>h) hw = ww/aspect; else ww = hw * aspect; glortho2d (-ww/2, ww/2, -hw/2, hw/2); // window centrada no (0,0) glmatrixmode (GL_MODELVIEW); }

Visualização 3D y y z x câmera Projeção ortográfica x projeção perspectiva z x câmera

Definindo Projeções em OpenGL Y Y Z Z SRC X SRC X Paralela Perspectiva

Projeção paralela ortográfica Determina um paralelepípedo: glortho ( xmin, xmax, ymin, ymax, near, far) Y Z SRC ymax near ymin xmin far xmax X

Projeção paralela ortográfica Ortográfica glmatrixmode (GL_PROJECTION); glloadidentity(); glortho (left, right, bottom, top, near, far); glmatrixmode (GL_MODELVIEW); glloadidentity(); // near e far correspondem a planos em profundidade ao longo de z; são distâncias dadas relativamente ao observador

Visualização (2D) em OpenGL Utilizando a GLU gluortho2d (left, right, bottom, top); todos os parâmetros são double Esta função chama glortho (left, right, bottom, top, near, far); near = -1.0 e far = 1.0 especificando limites do volume, distâncias do observador no SRU Não se especifica posição do observador O observador está em (0,0,0) olhando para a direção do eixo z negativo

Projeção Perspectiva xmin,ymin xmax,ymax observador near far near e far são distâncias do observador

Projeção perspectiva Centro da projeção fixo: eye (posição da câmera) Duas possibilidades Determina um tronco de pirâmide: glfrustum Determina o ângulo de visão: gluperspective

Define volume de visualização glfrustrum(left, right, bottom, top, near, far) Frustrum não precisa ser simétrico ou gluperspective(fovy, aspect ratio, near, far) Simétrico Estes comandos definem outra matriz importante matriz de projeção (PROJECTION)

Projeção perspectiva Y Z (xmax, ymax) SRC (xmin, ymin) near far X glmatrixmode (GL_PROJECTION); glloadidentity(); glfrustum (xmin, xmax, ymin, ymax, near, far); glmatrixmode (GL_MODELVIEW); glloadidentity();

Projeção perspectiva Y Z SRC fovy w h near far gluperspective(fovy, aspect ratio, near, far) X fovy é o ângulo de visão em y aspect = w/h é a relação entre as dimensões da janela sobre o plano near

Projeção perspectiva Y Z SRC fovy near far X glmatrixmode (GL_PROJECTION); glloadidentity(); gluperspective (fovy, aspect, near, far); glmatrixmode (GL_MODELVIEW); glloadidentity();

Matrizes de transformação Projeção e Universo têm matrizes individuais glmatrixmode (GL_PROJECTION); // define tipo e parâmetros da projeção glmatrixmode (GL_MODELVIEW); // define câmera // define transformações geométricas e desenha // sistema default

Exemplo glmatrixmode(gl_modelview); glloadidentity(); glulookat( 0.0, 0.0, 10.0, // olho 0.0, 0.0, 0.0, // alvo 0.0, 1.0, 0.0); // up glmatrixmode(gl_projection); glloadidentity(); gluperspective( angle, (double)viewwidth/viewheight, near, far); glviewport( 0, 0, viewwidth, viewheight); desenha (); glutget(glut_window_width) glutget(glut_window_height)

Bibliografia Foley et.al. Computer Graphics Principles and Practice (1990). Cap. 6. Hearn & Baker Computer Graphics in C (1986). Cap. 12. F.S. Hill, Computer Graphics Using OpenGL. Cap. 7.