Computação Gráfica Módulo IV – OpenGL

Slides:



Advertisements
Apresentações semelhantes
Sistemas de Interfaces com o Usuário e Glut/OpenGL
Advertisements

Funções para serem usadas no exercício de Lab
Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro Conteúdo: - Transformações geométricas no plano.
A busca das mulheres para alcançar seu espaço dentro das organizações
Vamos contar D U De 10 até 69 Professor Vaz Nunes 1999 (Ovar-Portugal). Nenhuns direitos reservados, excepto para fins comerciais. Por favor, não coloque.
Computação Gráfica Mapeamento de textura
OpenGL Computação Gráfica.
Exercício do Tangram Tangram é um quebra-cabeças chinês no qual, usando 7 peças deve-se construir formas geométricas.
Nome : Resolve estas operações começando no centro de cada espiral. Nos rectângulos põe o resultado de cada operação. Comprova se no final.
OpenGL Clique para adicionar texto Soraia Musse 6/4/2011.
António Ramires Fernandes & Luís Paulo Santos – Adaptado por Alex F. V. Machado Computação Gráfica Pipeline Gráfico.
Projeções e OpenGL Alex F. V. Machado.
Curso de ADMINISTRAÇÃO
COMPUTAÇÃO GRÁFICA.
Introdução a OpenGL (parte final).
EXPRESSÕES ARITMÉTICAS
Claudio Esperança Paulo Roma Cavalcanti
Introdução à Computação Gráfica
Introdução à Computação Gráfica OpenGL Básico
Computação Gráfica Interativa - Gattass
Navegador de cenas com openGL e rastreamento de raios
OpenGL Conceitos Básicos
Sistemas de Interfaces com o Usuário e OpenGL/Glut
OpenGL Alberto B. Raposo.
Computação Gráfica Introdução
Paulo Sérgio Rodrigues PEL205
Laboratório de Computação Gráfica OpenGL
Iluminação Para programar um sistema de iluminação, dois passos principais devem ser considerados: c) Que tipo e posição de Iluminação se deseja b) Que.
Aula 4 Nomes, Vinculações, Tipos e Escopos
OpenGL – Uma abordagem prática e objetiva
Computação Gráfica Desempenho.
Computação Gráfica Iluminação e Texturas.
Computação Gráfica Pipeline Gráfico.
Instituto de Geociências Universidade Federal de Minas Gerais
Renda até 2 SM.
Diagnósticos Educativos = Diagnósticos Preenchidos 100% = 1.539
PESQUISA SOBRE PRAZO MÉDIO DA ASSISTÊNCIA NA SAÚDE SUPLEMENTAR
Computação Gráfica – Transformações Geométricas
Simulação Massa-Mola para Tecidos
Introdução à Computação Gráfica Projeções
Visibilidade em Computação Gráfica
CATÁLOGO GÉIA PÁG. 1 GÉIA PÁG. 2 HESTIA PÁG. 3.
PROCESSOS PRINCIPAIS Alunos - Grau de Satisfação 4971 avaliações * Questões que entraram em vigor em 2011 ** N.A. = Não Aplicável Versão: 07/02/2012 INDICADORES.
Trabalho sobre Cor Thiago Marques Toledo.
Coordenação Geral de Ensino da Faculdade
Animações Independentes na Mesma Cena
Computação Gráfica – Textura
Tarefa: Implementar o Demo na página da disciplina. Para trabalhar com iluminação em OpenGL, deve-se definir: 1)Vetores de iluminação : Ex: GLfloat luzAmbiente[4]={0.2,0.2,0.2,1.0};
Projeto Medindo minha escola.
Iluminação e Sombreamento
Computação Gráfica Aula 3 Transformações Geométricas
Computação Gráfica – Visibilidade
Computação Gráfica Mapeamento de textura
1 Aplicações do Fecho Regular. 2 A interseção de uma linguagem livre de contexto e uma linguagem regular é uma linguagem livre de contexto livre de contexto.
Olhe fixamente para a Bruxa Nariguda
Computação Gráfica Introdução ao OpenGL.
Introdução à Computação Gráfica OpenGL Básico
Mapeamento de Textura: Aspectos Gerais
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Introdução à Computação Gráfica
Computação Gráfica – Transformações Projetivas
Luiz Fernando Marcio Neves Petrônio Gomes Thiago Monteiro Victor Hazin
Desenhos Tridimensionais
Computação Gráfica – Transformações Geométricas
April 05 Prof. Ismael H. F. Santos - 1 Computação Gráfica Módulo I – Imagem UniverCidade - Prof. Ismael H F Santos.
OpenGL Aula Prática.
Visualização Tridimensional
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Visualização Tridimensional. Quando se trabalha em três dimensões, o SRU (Sistema de Referência do Universo) passa a ser composto por três eixos ortogonais.
Transcrição da apresentação:

Computação Gráfica Módulo IV – OpenGL UniverCidade - Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 1

Considerações Gerais Objetivo: Discutir os principais conceitos eos princípios básicos dos Sistemas Gráficos e a Programação em OpenGL. A quem se destina : Alunos e Profissionais que desejem aprofundar seus conhecimentos sobre Computação Grafica e suas aplicações. April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 2

Bibliografia http://www.lcg.ufrj.br/compgraf1/downloads/apostila.ps.gz Computação Gráfica Volume 1. Jonas Gomes e Luiz Velho. Instituto de Matemática Pura e Aplicada – IMPA. Introdução a Computação Gráfica - Paulo Roma http://www.lcg.ufrj.br/compgraf1/downloads/apostila.pdf http://www.lcg.ufrj.br/compgraf1/downloads/apostila.ps.gz Notas do Curso ministrado na Universidade de Maryland pelo Prof. David Mount ftp://ftp.cs.umd.edu/pub/faculty/mount/427/427lects.ps.gz http://www.lcg.ufrj.br/~esperanc/CG/427lects.ps.gz Apostila Fundamentos da Imagem Digital – Antonio Scuri Computer Graphics: Principles and Practice, Second Edition. James Foley, Andries van Dam, Steven Feiner, John Hughes. Addison-Wesley. OpenGL Programming Guide, 2nd Edition. Mason Woo, Jackie Neider, Tom Davis. Addison Wesley. April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 3

Bibliografia OpenGL OpenGL® Programming Guide, 2nd Edition. Mason Woo, Jackie Neider, Tom Davis. Addison Wesley. http://www.lcg.ufrj.br/redbook Manual de referência online http://www.lcg.ufrj.br/opengl Sítio oficial do OpenGL www.opengl.org April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 4

Ementa Introdução ao OpenGL Exemplos de Transformações 2D Geometria Exemplos de Transformações 2D Fórmulas e cálculos das transformações 2D Usando matriz de transformação (por que?) Coordenadas Homogêneas Concatenação de transformações Transformações 3D Projeções Histórico April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 5

Transformações Geométricas CG – CO023 Transformações Geométricas April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 6

OpenGL: o que é? API Interface para programador de aplicação Aplicação API abstrata API Hardware & Software Dispositivo de saída de entrada April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 7

Por que OpenGL? primitivas geométricas e imagens arquitetura bem definida relativamente simples boa performance (sw & hw) bem documentado independente de sistemas de janelas padrão disponível em diversas plataformas April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 8

Primitivas geométricas básicas Ponto Linha Triângulo Quadrado Polígono (convexo) April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 9

Objetos 3D From SIGGRAPH’97 course April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 10 From SIGGRAPH’97 course

Imagem e Textura April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 11

OpenGL rendering pipeline Vértices Operações geométricas sobre imagens Imagens Textura Rasterização sobre fragmentos Frame Buffer April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 12

Janelas/Interface (IUP) Aplicação típica Aplicação GLU Sistema de Janelas/Interface (IUP) OpenGL Hardware April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 13

Programa simples (usando GLUT) #ifdef _WIN32 #include <windows.h> #endif #include "GL/gl.h" #include "GL/glu.h” #include “GL/glut.h” int main (int argc, char* argv[]) { glutInit(&argc, argv); /* openg GLUT */ glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (250, 250); glutCreateWindow (”simple"); /* create window */ glutDisplayFunc(display); glutMainLoop(); /* interact … */ return 0; } April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 14

Programa simples (usando GLUT) - cont. void display (void) { /* clear window */ glClearColor(1,1,1,1); glClear(GL_COLOR_BUFFER_BIT); /* draw red triangle */ glColor3d(1,0,0); glBegin(GL_TRIANGLES); glVertex2d(-1,-1); glVertex2d(1,-1); glVertex2d(0,1); glEnd(); /* update screen */ glFlush(); } April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 15

OpenGL: máquina de estado Trabalha com o conceito de valor corrente Iluminação Shading Textura etc. glEnable / glDisable April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 16

Inicialização da área de desenho OpenGL: inicializações Inicialização da área de desenho glClearColor(red,green,blue,alpha); glClear(GL_COLOR_BUFFER_BIT); Atualização da área de desenho glFlush( ); glFinish( ); // modal April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 17

Primitivas geométricas glBegin(tipo_de_prim); …define attributo de vértice …define vértice glEnd(); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 18

Tipos de primitivas GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP 1 Tipos de primitivas 2 GL_POINTS 1 4 3 2 1 3 5 3 4 2 2 1 GL_LINES GL_LINE_STRIP GL_LINE_LOOP 2 6 1 5 1 5 3 2 1 3 4 7 4 2 3 4 GL_POLYGON GL_QUADS GL_QUAD_STRIP 2 3 1 3 1 3 5 1 4 4 2 5 4 2 GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_TRIANGLES April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 19

Especificação de vértice glVertex{tam}{tipo}{vetor} (…); exemplo: GLdouble pos[ ] = {0.4,9.0,2.0}; glVertex3dv(pos); ou glVertex3d(0.4,9.0,2.0); OpenGL trabalha com coordenadas homegêneas April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 20

Especificação de atributos: Cor Modelo de cor RGB glColor3d(red,green,blue); Color index Paleta previamente definida ... glIndexi(index); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 21

Interpolação de cores void glShadeModel (GL_SMOOTH); void glShadeModel (GL_FLAT); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 22

Modelo de Shading Flat glShadeModel(GL_FLAT); glBegin(GL_TRIANGLES); glColor3f(1.0,0.0,0.0); // red glVertex2f(-1.0,-1.0); glColor3f(0.0,1.0,0.0); // green glVertex2f(1.0,-1.0); glColor3f(0.0,0.0,1.0); // blue glVertex2f(0.0,1.0); glEnd( ); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 23

Modelo de Shading Smooth (Gouraud) glShadeModel(GL_SMOOTH); // default glBegin(GL_TRIANGLES); glColor3f(1.0,0.0,0.0); // red glVertex2f(-1.0,-1.0); glColor3f(0.0,1.0,0.0); // green glVertex2f(1.0,-1.0); glColor3f(0.0,0.0,1.0); // blue glVertex2f(0.0,1.0); glEnd( ); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 24

Suavização da tonalização Gouraud c1 c4 c2 c3 c12 c43 c Phong N1 N4 N N12 N43 c N2 April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 25 N3

Transformações 3D e Sistemas de Coordenadas April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 26 From SIGGRAPH’97 course

Visualização 3D Camera Composição da cena Posição fixa: (0.0,0.0,0.0) Direção: -z Composição da cena move camera ou move objetos y x z April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 27

Transformação de Modelagem X Visualização Transformação de modelagem - MODELVIEW Sistema global fixo Ordem inversa para especificação ... glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glRotatef(30,0,0,1); glTranslatef(10,0,0); X Y April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 28

Transformação de Modelagem X Visualização (cont.) Transformação de visualização Sistema local móvel Ordem natural para especificação … glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glRotatef(30,0,0,1); glTranslatef(10,0,0); ... x y X Y April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 29

Manipulação da pilha de matrizes … glMatrixMode(GL_MODELVIEW); glLoadIdentity( ); glPushMatrix( ); glRotate(30,0,0,1); glTranslate(10,0,0); draw_object_1( ); glPopMatrix( ); ... I I I I R I RT I April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 30

Posicionamento do mundo em relação à camera Função auxiliar … glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(eye_x, eye_y, eye_z, center_x, center_y, center_z, up_x, up_y, up_z ); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 31

Projeção: tipo de camera Perspectiva teta w h near far … glMatrixMode(GL_PROJECTION); glLoadIdentity( ); gluPerspective (teta_y,aspect,znear,zfar); ... aspect = w / h April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 32

Projeção: tipo de camera (cont.) Ortográfica near far … glMatrixMode(GL_PROJECTION); glLoadIdentity( ); glOrtho (xleft,xright,ybottom,ytop,znear,zfar); ... 2D: gluOrtho2D (xleft,xright,ybottom,ytop); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 33

Transformação de viewport … glViewport (x, y, width, height); ... GLUT: A função default de “resize” define a viewport como sendo a área total do canvas. April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 34

Exemplo: sistema solar Sol e um planeta Raio Rotação diária Rotação anual Sol: desenhado na origem Planeta: Pensando em sistema local Rotação anual Translação em x Rotação diária April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 35

Remoção de superfícies ocultas Z-BUFFER Inicializa window (default) Habilita teste em Z glEnable (GL_DEPTH_TEST); Define teste glDepthFunc (GL_LESS); Limpa buffer glClear (GL_DEPTH_BUFFER_BIT); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 36

Animação Double color buffer: BACK & FRONT Inicialização - GLUT glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); Atualização da tela - GLUT glutSwapBuffers(); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 37

Rendering Cor do objeto depende de: fonte de luz orientação da superfície posição do observador reflexividade do material ambiente difusa especular Modelo de iluminação: Phong April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 38

Especificação da orientação Vetor normal em cada vértice glNormal3d(nx,ny,nz); Se não for normalizado glEnable(GL_RESCALE_NORMAL); ou glEnable (GL_NORMALIZE); Obs: cálculo de normal é caro! April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 39

Fontes de luz Tipos Cor e intensidade: ambiente, difusa, especular Glfloat pos[ ] = {x,y,z,w}; glLightf (GL_LIGHT0, GL_POSITION, pos); Cor e intensidade: ambiente, difusa, especular Glfloat dif[ ] = {red,green,blue,alpha}; glLightf (GL_LIGHT0, GL_DIFFUSE, dif); Habilitação glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); Direcional Pontual Spot April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 40

Parâmetros adicionais de iluminação Luz ambiente global GLfloat amb[ ] = {0.2,0.2,0.2,1.0}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, amb); Posição do observador: local ou infinito glLightModeli (GL_LIGHT_MODEL_VIEWER, GL_TRUE); Iluminação de faces: back e front glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); Iluminação especular em separado (p/ texturas) glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 41

Culling de faces Define orientação das faces Descarta faces (culling) glFrontFace (GL_CCW); Descarta faces (culling) glCullFace (GL_BACK); glEnable(GL_CULL_FACE); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 42

Material Brilho (shininess) Emissão Cor (reflexividade) Ambiente não depende de orientação Difusa depende da orientação da superfície e da posição da fonte de luz Especular depende da orientação da superfície, da posição da fonte de luz e posição do observador Brilho (shininess) fator de brilho da reflexão especular Emissão para representação de fontes de luz na cena Glfloat color [ ] = { red, green, blue, alpha }; glMaterialf (GL_BACK_AND_FRONT, GL_AMBIENT_AND_DIFFUSE, color); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 43

Cor como material Usando cor para definição de material glColorMaterial (GL_BACK_AND_FRONT, GL_AMBIENT_AND_DIFFUSE); glEnable (GL_COLOR_MATERIAL); … glColor3f (red, green, blue); ... April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 44

Propriedades dos vértices em arrays Array de vértices glEnableClientState (GL_VERTEX_ARRAY); glVertexPointer (size, type, stride, pointer); size: 2, 3 ou 4 (coordenadas) type: GL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE stride: byte offset entre vértices consecutivos pointer: ponteiro para área de memória Arrays de normais e cores tem API análoga April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 45

Acessando arrays de propriedades Acessando um elemento glBegin (GL_TRIANGLES); ... glArrayElement ( i ); glEnd ( ); Acessando um conjunto elemento glDrawElements ( mode, count, type, indices); mode: GL_LINES, GL_TRIANGLES, etc. count: número de elementos a ser desenhados type: tipo do vetor de índices: GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, GL_UNSIGNED_INT indices: vetor de índices glDrawRangeElements ( mode, start, end, count, type, indices); start, end: delimitam valores dos índices para permitir pre-processamento April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 46

Pilha de grupos de atributos Permite restaurar atributos eficientemente Pilha de atributos (do servidor) glPushAttrib ( GL_FOG_BIT | GL_LIGHTING_BIT | etc ); glPopAttrib ( ); Pilha de atributos do cliente glPushClientAttrib ( GL_CLIENT_PIXEL_STORE | GL_CLIENTE_VERTEX_ARRAY_BIT ); glPopClientAttrib ( ); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 47

Sistema solar: implementação int main (int argc, char **argv) { /* GLUT - Initialization */ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(500, 500); glutCreateWindow("CG2001-T1"); /* Registrando callbacks */ glutDisplayFunc(display); glutReshapeFunc(redraw); Programa: Lua_scene.cpp // glutMouseFunc(mouseCall); // glutMotionFunc(motionCall); // glutKeyboardFunc(keyboardCall); glutIdleFunc(display); /* GLUT main loop */ glutMainLoop(); return 0; } April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 48

Blending Combinação da cor do fragmento sendo processado com a cor do pixel depois da rasterização e antes do fragmento ser desenhado no framebuffer. Aplicações transparência composição digital pintura April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 49 obs: blending não funciona com color index.

OpenGL rendering pipeline Operações geométricas Operações sobre fragmentos Vértices Rasterização Operações sobre imagens Imagens Textura Frame Buffer April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 50

Fatores de combinação Fonte (source) Destino (destination) Fatores representa fragmento SR, SG, SB, SA Destino (destination) representa pixel DR, DG, DB, DA Fatores RS, GS, BS, AS RD, GD, BD, AD Resultado RS SR+ RD DR, GS SG+ GD DG, BS SB+ BD DB April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 51

Especificação dos fatores glBlendFunc (fator_frag, fator_pixel); GL_ZERO src or dst (0,0,0,0) GL_ONE src or dst (1,1,1,1) GL_DST_COLOR src (Rd,Gd,Bd,Ad) GL_SRC_COLOR dst (Rs,Gs,Bs,As) GL_ONE_MINUS_DST_COLOR src (1,1,1,1) - (Rd,Gd,Bd,Ad) GL_ONE_MINUS_SRC_COLOR dst (1,1,1,1) - (Rs,Gs,Bs,As) GL_SRC_ALPHA src or dst (As,As,As,As) GL_ONE_MINUS_SRC_ALPHA src or dst (1,1,1,1) - (As,As,As,As) GL_DST_ALPHA src or dst (Ad,Ad,Ad,Ad) GL_ONE_MINUS_DST_ALPHA src or dst (1,1,1,1) - (Ad,Ad,Ad,Ad) GL_SRC_ALPHA_SATURATE src (f ,f ,f ,1); f = min(As,1-Ad) April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 52

Blending: exemplos de uso Desenho temporário sobre imagem glEnable (GL_BLEND); glBlendFunc (GL_ONE_MINUS_DST_COLOR, GL_ZERO); glColor3d (1.0, 1.0, 1.0); Objetos transparentes Cor dada por: (red, green, blue, opacity) glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_APHA); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 53

Transparência em cena 3D habilita-se z-buffer desenha-se objetos opacos define-se z-buffer como read-only glDepthMask (GL_FALSE); desenha-se objetos com transparência em ordem April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 54

Buffers Color Depth Stencil Accumulation onde desenha-se z-buffer usado para restringir desenho a uma área do color buffer. Accumulation usado para composição de imagem. também é um RGBA buffer April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 55

Antialiasing Controle da qualidade: Cobertura dos pixels é multiplicada na componente alpha da cor Controle da qualidade: glHint (GL_primitive_SMOOTH_HINT, GL_NICEST); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 56

Antialiasing Pontos e linhas glEnable (GL_POINT_SMOOTH); glEnable (GL_LINE_SMOOTH); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 57

Antialiasing Polígonos Desenha polígonos em ordem (front to back)! glEnable (GL_POLYGON_SMOOTH); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA_SATURATE, GL_ONE); Desenha polígonos em ordem (front to back)! April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 58

Fog Decaimento Cor Qualidade glFogi (GL_FOG_MODE, GL_LINEAR); glFogf (GL_FOG_START, zstart); glFogf (GL_FOG_END, zend); Cor glFogfv (GL_FOG_COLOR, color); Qualidade glHint (GL_FOG_HINT, GL_NICEST); // per pixel April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 59

Polygon Offset glPolygonOffset (factor, units) o = r . units + m . Factor r = menor valor que garante diferença em zw m = declividade na profundidade April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 60

Imagens Representa uma área retangular de valores associados aos pixels Fatores complicantes existem diferentes dados associados aos pixels existem diferentes formas de armazenar uma imagem existem diferentes conversões de dados quando operamos sobre pixels April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 61

Operações sobre imagens Read Draw Copy Frame buffer Memória Memória Frame buffer Frame buffer Frame buffer April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 62

Formato de cada pixel De 1 a 4 elementos representam um pixel GL_RGB GL_RGBA GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_DEPTH_COMPONENT GL_STENCIL_INDEX GL_COLOR_INDEX April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 63

Tipo de cada elemento UNSIGNED_BYTE …………………………………… 8 bits UNSIGNED_SHORT …………………………………. 16 bits SHORT …………………………………………………. 15 bits UNSIGNED_INT ………………………………………. 32 bits INT ………………………………………………………. 31 bits FLOAT ………………………………………………….. [0.0,1.0] BITMAP…………………………………………………. 1 bit April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 64

Desenhando imagens Posição da imagem Especificação da imagem glRasterPos* (x, y, z, w); Especificação da imagem glDrawPixels (width, height, format, type, pixels) Especificação de bitmap Projetado para suportar desenho de fontes raster glBitmap (width, height, x0, y0, xinc, yinc, bitmap); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 65

Zoom de imagem Image pixel Screen pixel glPixelZoom (zoomx, zoomy); Quadrilateral rasterização podem ser fracionários April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 66

Modos de armazenamento de pixel Frame buffer Memória transferência (pack) mapeamento (unpack) Exemplos glPixelStorei (GL_UNPACK_SWAP_BYTES, GL_TRUE); glPixelStorei (GL_PACK_ALIGNMENT, 4); Também permite especificação de subáreas da imagem April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 67

Textura Mapeamento de imagens sobre primitivas Imagem composta por texels Largura e altura: 2n gluScaleImage (format, width_in, height_in, type_in, data_in, width_out, height_out, type_out, data_out); Especificação: 1D e 2D glEnable (GL_TEXTURE_2D or GL_TEXTURE_1D); glTexImage2D (GL_TEXTURE_2D, level, components, width, height, border, format, type, pixels); glTexImage1D (GL_TEXTURE_1D, level, components, width, border, format, type, pixels); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 68

Coordenada de textura glTexCoord* (s, t, r, q); Para cada vértice coordenada: identifica qual o pixel no buffer coordenada de textura: identifica qual o texel Coordenadas de textura: s, t, r, q Coordenadas de textura são linearmente interpoladas entre vértices glTexCoord* (s, t, r, q); Intervalo [0,1], senão wrap? Transformados pela matriz de textura April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 69

Mapeamento de textura (0,1) (1,1) (0,0) (1,0) Textura (0,4) (8,4) (8,0) April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 70

Geração automática de coordenadas de textura Coordenadas definidas pela distância dos vértices a um plano Em relação às coordenadas do objeto Em relação às coordenadas do olho objeto olho April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 71

Geração automática de coordenadas de textura (cont.) Mapeamento de ambientes representação de objetos reflexivos Exemplo de especificação glEnable (GL_TEXTURE_GEN_S); glTexGeni (GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_PLANE); glTexGenfv (GL_S, GL_OBJECT_PLANE, plane); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 72

mip := latim: “multim im parvo”; muitas coisas num mesmo lugar LOD: multiresolução mipmaps mip := latim: “multim im parvo”; muitas coisas num mesmo lugar 1 2 3 April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 73

Construção de mipmaps Dado a imagem de maior resolução, pode-se construir e definir a pirâmide de mipmaps gluBuild2DMipmaps (GL_TEXTURE_2D, components, width, height, format, type, data); level 0 64 x 16 32 x 8 16 x 4 8 x 2 4 x 1 2 x 1 1 x 1 April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 74

Filtragem magnification minification textura polígono magnification minification Filtragem: GL_NEAREST, GL_LINEAR, etc Especificação glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 75

Bordas Garantir repetição de padrões Definir como truncar mapeamento da textura April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 76

Combinação de pixel com texel Decal Cor definida pelo texel Modulate Cor do pixel é modulada pela cor do texel Blend Cor combinada com uma cor adicional de ambiente Exemplo Modular com a cor branca para dar iluminação glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 77

Exemplo de modulação DECAL MODULATE April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 78

Referências “The Red Book” Web sites OpenGL: Programming Guide Release 1.1 M. Woo, J. Neider, T. Davis Web sites The official OpenGL web page http://www.opengl.org SGI’s OpenGL WWW Center http://www.sgi.com/Technology/openGL Gateway to OpenGL http://reality.sgi.com/mjk_asd/opengl-links.html April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 79