19 opengl 01 - puc-riowebserver2.tecgraf.puc-rio.br/~abraposo/inf1366/2007/19...pipeline opengl •...
TRANSCRIPT
![Page 1: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/1.jpg)
OpenGLOpenGL
Alberto B. Raposo
http://www.opengl.org
![Page 2: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/2.jpg)
OpenGL: o que é?
• API– Interface para programador de aplicação
Aplicação
API abstrata
API
Hardware & Software
Dispositivo
de saída
Dispositivo
de entrada
![Page 3: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/3.jpg)
Por que OpenGL?
• rápido• relativamente simples• arquitetura bem definida• bem documentado• independente de sistemas de janelas• primitivas geométricas e imagens• padrão
– disponível em diversas plataformas
![Page 4: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/4.jpg)
Bibliotecas
• O OpenGL propriamente dito:– libGL.so ou opengl32.dll e opengl32.lib
– GL.h ou gl.h
• OpenGL Utility library (GLU): já vem com o OpenGL– libGLU.so ou glu32.dll e glu32.lib
– GLU.h ou glu.h
• O glut toolkit:
– libglut.a ou (glut32.dll e glut32.lib)
– glut.h
![Page 5: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/5.jpg)
OpenGL / GLU
• Aproximadamente 250 comandos e funções– 200 do core OpenGL– 50 da GLU – OpenGL Utility Library
• GLU– contém várias rotinas que utilizam os comandos
OpenGL de baixo nível para executar tarefascomo setar as matrizes para projeção e orientação da visualização, e fazer o rendering de uma superfície
• No Microsoft Visual C++#include <windows.h> #include <gl/gl.h> #include <gl/glu.h>
![Page 6: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/6.jpg)
GLUT
• GLUT - OpenGL Utility Toolkit– toolkit independente de plataforma– Por ser portável, OpenGL não possui funções
para gerenciamento de janelas, tratamento de eventos e manipulação de arquivos
• GLUT faz isso (criação de janelas e menus popup, gerenciamento de eventos de mouse e teclado, etc)
• http://www.opengl.org/resources/libraries/glut/
• http://www.xmission.com/~nate/glut.html
– criada para facilitar o aprendizado e a elaboraçãode programas OpenGL
– independente do ambiente de programação– pegar glut.dll e glut32.dll
![Page 7: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/7.jpg)
Aplicação típica
Aplicação
Sistema de
Interface (GLUT) OpenGL
GLU
Hardware
![Page 8: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/8.jpg)
Nomes de funções
• Todos os nomes das funções OpenGL seguem umaconvenção que indica de qual biblioteca a função fazparte e, freqüentemente, quantos e que tipos de argumentos a função tem. – <PrefixoBiblioteca> <ComandoRaiz>
<ContadorArgumentosOpcional> <TipoArgumentosOpcional>
• Exemplos:– glColor3f possui Color como raiz. O prefixo gl representa a
biblioteca gl, e o sufixo 3f significa que a função possui trêsvalores de ponto flutuante como parâmetro.
– Variações da função: recebe três valores inteiros comoparâmetro (glColor3i), três doubles (glColor3d) e assim pordiante.
– glVertex2f...
![Page 9: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/9.jpg)
Primitivas geométricas básicas
Ponto Linha
Polígono
Triângulo
Quadrado
![Page 10: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/10.jpg)
Objetos 3D
From SIGGRAPH’97 course
![Page 11: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/11.jpg)
Imagem e Textura
![Page 12: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/12.jpg)
Pipeline OpenGL
• Como uma aplicação faz chamadas às funções API OpenGL, oscomandos são colocados em um buffer de comandos. Este buffer épreenchido com comandos, vértices, dados de textura, etc. Quandoeste buffer é "esvaziado", os comandos e dados são passados para o próximo estágio
• Após a etapa de aplicação das transformações geométricas e dailuminação, é feita a rasterização, isto é, é gerada a imagem a partirdos dados geométricos, de cor e textura. A imagem final, então, écolocada no frame buffer, que é a memória do dispositivo gráfico. Istosignifica que a imagem é exibida no monitor .
http://www.inf.pucrs.br/~manssour/OpenGL
![Page 13: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/13.jpg)
Pipeline de renderização
VérticesOperações
geométricas
Operações
sobre imagensImagens Textura
RasterizaçãoOperações
sobre
fragmentos
Frame
Buffer
![Page 14: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/14.jpg)
![Page 15: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/15.jpg)
Máquina de Estados
• OpenGL é uma máquina de estados. É possívelcolocá-la em vários estados (ou modos) que não sãoalterados, a menos que uma função seja chamadapara isto. – Ex.: a cor corrente é uma variável de estado que pode ser
definida como branco. Todos os objetos, então, sãodesenhados com a cor branca, até o momento em que outracor corrente é especificada.
– Outros exemplos de variáveis de estado: estilo (padrão) de linha, posições e características de luzes, propriedades de materiais de objetos que estão sendo desenhados, etc.
• Agrupar objetos por estados pode ser interessante para ganharperformance na etapa de renderização (i.e., envia-se objetoscom mesmos estados em seqüência para a GPU, diminuindoos comandos de troca de estados).
![Page 16: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/16.jpg)
Maquina de Estados
• Trecho de programa a seguir mostraum exemplo da utilização dos estados.
![Page 17: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/17.jpg)
Primeiro Exemplo
Define a função de desenho
“Título” da janela criada
Define modo de operação da GLUT
![Page 18: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/18.jpg)
glutInitDisplayMode
• Parâmetros– GLUT_SINGLE: usa apenas um buffer de cor. A função que
efetua exibição da imagem é glFlush
– GLUT_DOUBLE: usa 2 buffers de cor. Um (visível) armazena a imagem mostrada e outro (invisível) armazena a imagem que está sendo construída. Ao finalizar a construção da imagem, força-se a troca dos buffers com a função glutSwapBuffers
• Double buffering é bom para animações
– GLUT_DEPTH: define que se necessita do Z-buffer– GLUT_RGB/GLUT_RGBA: define que cores são
especificadas por componentes RGB e A (alfa –transparência)
– GLUT_INDEX: cores do programa são especificadas por tabela de cores
![Page 19: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/19.jpg)
Definindo primitivas
• Sempre entre glBegin e glEnd
…define attributo de vértice
…define vértice
glBegin(tipo_de_prim);
glEnd();
![Page 20: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/20.jpg)
Tipos de primitivas em OpenGL
GL_LINES
0
1
2
3 5
4
GL_LINE_STRIP
0
1
2
3
GL_LINE_LOOP0 1
234
GL_POLYGON(convexo)
04
3
2
1
GL_QUADS
03
21
4 7
65
GL_QUAD_STRIP
0
31
2 4
5
GL_TRIANGLES
0
1
2
34
5
GL_TRIANGLE_STRIP
1
02
3
4
5
GL_TRIANGLE_FAN
0
1
2 3
4
GL_POINTS
01
2
![Page 21: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/21.jpg)
Segundo Exemplo
OpenGL: Uma Abordagem Prática e Objetiva
M. Cohen e I. H. Manssour
![Page 22: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/22.jpg)
Segundo Exemplo (cont.)
Indica qual matriz estará no topo da pilha para operações subsequentes:
GL_MODELVIEW: matriz do modelo
GL_PROJECTION: matriz de projeção
GL_TEXTURE: matriz de textura
Define a janela quando se trabalha com projeção 2D:
Parâmetros: x mínimo, x máximo, y mínimo, y máximo
![Page 23: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/23.jpg)
Segundo Exemplo (cont.)
![Page 24: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/24.jpg)
Terceiro Exemplo
Inicializa sistema de coordenadas: sem esse comando, poderia dar erro
![Page 25: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/25.jpg)
Terceiro Exemplo (cont.)
A viewport define a área dentro janela,
em coordenadas de tela, que OpenGL
pode usar para fazer o desenho. O
volume de visualização é, então,
mapeado para a nova viewport. Os 2
primeiros parâmetros são as coordenadas
do canto inferior esquerdo na tela, e as
2 últimas são largura e altura.
![Page 26: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/26.jpg)
Terceiro Exemplo (cont.)
![Page 27: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/27.jpg)
Window vs Viewport
• Window– Parte do universo que é do interesse
(parte do mundo que está sendo visualizada).
• SRU: Sistema de Referência do Universo
• Viewport– Parte do monitor onde será visualizado o
conteúdo
![Page 28: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/28.jpg)
Window vs Viewport
![Page 29: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/29.jpg)
Window vs Viewport
![Page 30: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/30.jpg)
Transformações geométricas
![Page 31: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/31.jpg)
Quarto Exemplo
Primitiva “clássica” em CG: bule
![Page 32: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/32.jpg)
Quarto Exemplo (cont.)
![Page 33: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/33.jpg)
Quarto Exemplo (cont.)
marks the normal plane of current
window as needing to be redisplayed.
![Page 34: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/34.jpg)
![Page 35: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/35.jpg)
gluPerspective
glMatrixMode(GL_PROJECTION);
glLoadIdentity( );
gluPerspective(fovy, aspect, near, far);
glMatrixMode(GL_PROJECTION);
glLoadIdentity( );
gluPerspective(fovy, aspect, near, far);
w / h
![Page 36: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/36.jpg)
gluLookAt
gluLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz);gluLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz);
![Page 37: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/37.jpg)
Outras Primitivas 3D
http://www.inf.pucrs.br/~manssour/
OpenGL/Tutorial.html
![Page 38: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/38.jpg)
Solid
• Todas as primitivas anteriores podem ser também sólidas, ao invés de Wireframe:– Ex.: glutSolidTeapot(50.0f)
![Page 39: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/39.jpg)
Exemplo de Animação
![Page 40: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/40.jpg)
Exemplo de Animação (cont.)
![Page 41: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/41.jpg)
c
Tem que chamar a
função timer de novo
![Page 42: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/42.jpg)
Exemplo de Animação (cont.)
![Page 43: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/43.jpg)
Exemplo de Animação (cont.)
http://www.inf.pucrs.br/~manssour/
OpenGL/Tutorial.html
![Page 44: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/44.jpg)
Iluminação em OpenGL
• Shading– Função glShadeModel.
• Parâmetros: GL_FLAT ou GL_SMOOTH (Gouraud shading, default)
• Material
pname: pode determinar as seguintes propriedades do material: GL_AMBIENT, GL_DIFFUSE,
GL_SPECULAR, GL_EMISSION, GL_SHININESS, GL_AMBIENT_AND_DIFFUSE
ou GL_COLOR_INDEXES
params: vetor que contém as componentes da propriedade que está sendo espeficada
![Page 45: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/45.jpg)
Iluminação em OpenGL
Variação da função
![Page 46: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/46.jpg)
Iluminação em OpenGL
• Modelo de iluminação
![Page 47: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/47.jpg)
Iluminação em OpenGL
• Fontes de luz: Ambiente, Difusa, Especular, Emissiva
![Page 48: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/48.jpg)
Iluminação em OpenGL
![Page 49: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/49.jpg)
Exemplo de Programa com Iluminação
![Page 50: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/50.jpg)
Exemplo de Programa com Iluminação
![Page 51: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/51.jpg)
Exemplo de Programa com Iluminação
![Page 52: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/52.jpg)
Exemplo de Programa com Iluminação
![Page 53: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/53.jpg)
Exemplo de Programa com Iluminação
![Page 54: 19 OpenGL 01 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/19...Pipeline OpenGL • Como uma aplicação faz chamadas às funções API OpenGL, os comandos são colocados](https://reader030.vdocuments.com.br/reader030/viewer/2022040318/5e3c9a884cea3034d0448d4c/html5/thumbnails/54.jpg)
Material Adicional
• http://www.novateceditora.com.br/livros/opengl• http://www.inf.pucrs.br/~manssour/OpenGL/Tutorial.
html• http://www.cs.trinity.edu/About/The_Courses/cs357/
gl.html• http://www.opengl.org/resources/code/samples/s20
01/• http://fly.cc.fer.hr/~unreal/theredbook/