Notes
Slide Show
Outline
1
Computação Gráfica
Módulo IV – OpenGL
  • UniverCidade - Prof. Ismael H F Santos


2
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.


3
Bibliografia
  • 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.
4
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


5
Ementa
  • Introdução ao OpenGL
    • 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
6
CG – CO023
7
OpenGL: o que é?
  • API
    • Interface para programador de aplicação
8
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
9
Primitivas geométricas básicas
10
Objetos 3D
11
Imagem e Textura
12
OpenGL rendering pipeline
13
Aplicação típica
14
Programa simples (usando GLUT)
15
Programa simples (usando GLUT) - cont.
16
OpenGL: máquina de estado
  • Trabalha com o conceito de valor corrente
    • Iluminação
    • Shading
    • Textura
    • etc.
17
 
18
Primitivas geométricas
19
Tipos de primitivas
20
Especificação de vértice
21
Especificação de atributos: Cor
  • Modelo de cor
    • RGB
      • glColor3d(red,green,blue);


    • Color index
      • Paleta previamente definida


      • ...
      • glIndexi(index);
22
Interpolação de cores
23
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( );
24
 
25
Suavização da tonalização
26
Transformações 3D e
Sistemas de Coordenadas
27
Visualização 3D
  • Camera
    • Posição fixa: (0.0,0.0,0.0)
    • Direção: -z
  • Composição da cena
    • move camera ou
    • move objetos
28
Transformação de
 Modelagem X Visualização
  • Transformação de modelagem - MODELVIEW
    • Sistema global fixo
    • Ordem inversa para especificação
29
 
30
Manipulação da pilha de matrizes
31
Posicionamento do mundo em relação à camera
  • Função auxiliar
32
Projeção: tipo de camera
  • Perspectiva
33
 
34
Transformação de viewport
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);
36
Animação
  • Double color buffer: BACK & FRONT
    • Inicialização - GLUT
    •   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);


    • Atualização da tela - GLUT
      • glutSwapBuffers();
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
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!
39
Fontes de luz
  • Tipos


  • 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);
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);
41
Culling de faces
  • Define orientação das faces
    • glFrontFace (GL_CCW);


  • Descarta faces (culling)
    • glCullFace (GL_BACK);
    • glEnable(GL_CULL_FACE);
42
Material
  • 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
43
Cor como material
  • Usando cor para definição de material
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


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

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 (   );
47
Sistema solar: implementação
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
49
 
50
Fatores de combinação
  • Fonte (source)
    • 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
51
Especificação dos fatores
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)
      • glEnable (GL_BLEND);
      • glBlendFunc (GL_SRC_ALPHA,                 GL_ONE_MINUS_SRC_APHA);
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
54
Buffers
  • Color
    • onde desenha-se
  • Depth
    • z-buffer
  • Stencil
    • usado para restringir desenho a uma área do color buffer.
  • Accumulation
    • usado para composição de imagem.
    • também é um RGBA buffer
55
Antialiasing
  • Cobertura dos pixels é multiplicada na componente alpha da cor
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);
57
Antialiasing
  • Polígonos
    • glEnable (GL_POLYGON_SMOOTH);


    • glEnable (GL_BLEND);
    • glBlendFunc
      (GL_SRC_ALPHA_SATURATE, GL_ONE);


    • Desenha polígonos em ordem (front to back)!
58
Fog
  • Decaimento
    • 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
59
Polygon Offset
  • glPolygonOffset (factor, units)


  • o = r . units + m . Factor
    •  r = menor valor que garante diferença em zw
    •  m = declividade na profundidade

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
61
Operações sobre imagens
  • Read
  • Draw
  • Copy
62
Formato de cada pixel
63
Tipo de cada elemento
64
Desenhando imagens
  • Posiçã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);
65
Zoom de imagem
66
Modos de armazenamento de pixel
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);
68
Coordenada de textura
  • 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
69
Mapeamento de textura
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
71
Geração automática de
coordenadas de textura (cont.)
  • Mapeamento de ambientes
    • representação de objetos reflexivos
72
LOD: multiresolução
73
Construção de mipmaps
74
Filtragem
75
Bordas
  • Garantir repetição de padrões
  • Definir como truncar mapeamento da textura
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
77
Exemplo de modulação
78
Referências
  • “The Red Book”
    • 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