1
|
- UniverCidade - Prof. Ismael H F Santos
|
2
|
- 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
|
- 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
|
- 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
|
5
|
- 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
|
|
7
|
- API
- Interface para programador de aplicação
|
8
|
- 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
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|
16
|
- Trabalha com o conceito de valor corrente
- Iluminação
- Shading
- Textura
- etc.
|
17
|
|
18
|
|
19
|
|
20
|
|
21
|
- Modelo de cor
- RGB
- glColor3d(red,green,blue);
- Color index
- Paleta previamente definida
- ...
- glIndexi(index);
|
22
|
|
23
|
- 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
|
|
26
|
|
27
|
- 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 - MODELVIEW
- Sistema global fixo
- Ordem inversa para especificação
|
29
|
|
30
|
|
31
|
|
32
|
|
33
|
|
34
|
|
35
|
- Z-BUFFER
- Inicializa window (default)
- Habilita teste em Z
- glEnable (GL_DEPTH_TEST);
- Define teste
- Limpa buffer
- glClear (GL_DEPTH_BUFFER_BIT);
|
36
|
- Double color buffer: BACK & FRONT
- Inicialização - GLUT
- glutInitDisplayMode
(GLUT_SINGLE | GLUT_RGB);
- Atualização da tela - GLUT
|
37
|
- Cor do objeto depende de:
- fonte de luz
- orientação da superfície
- posição do observador
- reflexividade do material
- ambiente
- difusa
- especular
|
38
|
- Vetor normal em cada vértice
- Se não for normalizado
- glEnable(GL_RESCALE_NORMAL);
- ou
- glEnable (GL_NORMALIZE);
- Obs: cálculo de normal é caro!
|
39
|
- 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
|
- 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
|
- Define orientação das faces
- Descarta faces (culling)
- glCullFace (GL_BACK);
- glEnable(GL_CULL_FACE);
|
42
|
- 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
|
- Usando cor para definição de material
|
44
|
- 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 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
|
- 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
|
|
48
|
- 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
|
- 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
|
|
52
|
- 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
|
- habilita-se z-buffer
- desenha-se objetos opacos
- define-se z-buffer como read-only
- desenha-se objetos com transparência em ordem
|
54
|
- Color
- Depth
- Stencil
- usado para restringir desenho a uma área do color buffer.
- Accumulation
- usado para composição de imagem.
- também é um RGBA buffer
|
55
|
- Cobertura dos pixels é multiplicada na componente alpha da cor
|
56
|
- Pontos e linhas
- glEnable (GL_POINT_SMOOTH);
- glEnable (GL_LINE_SMOOTH);
- glEnable (GL_BLEND);
- glBlendFunc
(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
|
57
|
- 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
|
- 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
|
- glPolygonOffset (factor, units)
- o = r . units + m . Factor
- r = menor valor que garante
diferença em zw
- m = declividade na profundidade
|
60
|
- 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
|
|
62
|
|
63
|
|
64
|
- 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
|
|
66
|
|
67
|
- 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
|
- 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
|
|
70
|
- 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
|
- Mapeamento de ambientes
- representação de objetos reflexivos
|
72
|
|
73
|
|
74
|
|
75
|
- Garantir repetição de padrões
- Definir como truncar mapeamento da textura
|
76
|
- Decal
- 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
|
|
78
|
- “The Red Book”
- OpenGL: Programming Guide
- Release 1.1
- M. Woo, J. Neider, T. Davis
- Web sites
- The official OpenGL web page
- SGI’s OpenGL WWW Center
- http://www.sgi.com/Technology/openGL
- Gateway to OpenGL
- http://reality.sgi.com/mjk_asd/opengl-links.html
|