OpenGL
Modulo 2E:
Marcus G. Pivatto
- transformações
- cores
- luz
Conteúdo
•
•
•
•
•
•
realidade virtual ? (linguagens 3D & resultados)
projeções e seus efeitos
rotação, translação, escala
animação, problemas hardware/software
atribuição de cores
definições de luz
•
•
•
•
•
TITLE: warm_up
Megapov 0.7
NAME: Norbert Kern, Germany
TOPIC: Insects and Spiders
PARSE: 11min 40s TRACE: 101 h 18 min MEMORY: 1110 MB peak
HARDWARE USED: 1,4 GHz Athlon C / 1 GB RAM
•
•
•
•
•
TITLE: The wet bird
NAME: Gilles Tran, France
TOPIC: City
RENDER TIME: 21 h
HARDWARE USED:
Pentium II 350
• Megapov 0.4
M.C. Escher
(1898- 1972)
• A Dutch graphic artist,
most recognized for
spatial illusions,
impossible buildings,
repeating geometric
patterns (tessellations),
and his incredible
techniques in
woodcutting and
lithography.
Projeções
• visão  percepção
• real  virtual
• 2D  3D
• TITLE: That's
Impossible
• NAME: Joe Wise
• COUNTRY: USA
Ortogonal
• A Projeção Ortogonal é selecionada pelo comando glOrtho
e utiliza seis parâmetros que definem um volume de visão.
glOrtho(left,right,bottom,top,near,far);
Perspectiva
• A percepção das distâncias entre os objetos e o ponto de visão é o efeito
característico da projeção em perspectiva.
• Comando glFrustum, define o volume de visão em forma de tronco de
pirâmide ( frustum ).
ou
glFrustrum(left,right,bottom,top,near,far);
gluPerspective(angle,aspect,near,far);
Exemplo - Ortogonal
• Observar o sentido de
rotação do disco
colorido!
Exemplo - Perspectiva
• Observar o sentido de
rotação do disco
colorido!
Transformações - Comandos
•
•
•
•
•
Translação
Rotação
Escala
Reinicialização
Armazenar e restaurar um
“estado de transformação” anterior.
Estado de Transformação
• A idéia central as transformações em OpenGL é
que elas são cumulativas, ou seja, podem ser
aplicadas umas sobre as outras.
• Uma transformação geométrica de OpenGL é
armazenada internamente em uma matriz. A cada
tranformação esta matriz é alterada e usada para
desenhar os objeto a aprtir daquele momento, até
que seja novamente alterada.
Matrizes de Transformação
• O OpenGL mantém três matrizes de transformação:
ModelView, Projection e ViewPoint
que são usadas para transformar um vértice qualquer
dado em um ponto da janela de visualização.
• Cada vértice especificado é multiplicado por estas três
Pipeline de Transformação
• glMatrixMode executado com uma das constantes:
GL_MODELVIEW, GL_PROJECTION ou GL_TEXTURE.
O GL_Fotógrafo
• Arrumar o tripé e posicionar a câmera para fotografar a cena equivalente a especificar as transformações de visualização
( função gluLookAt );
• Arrumar a cena para ser fotografada, incluindo ou excluindo
objetos/pessoas - equivalente à etapa de modelagem (inclui as
tranformações geométricas, glTranslatef, glScalef, glRotatef,
e o desenho dos objetos);
• Escolher a lente da câmera ou ajustar o zoom - equivalente a especificar
as transformações de projeção ( função gluPerspective );
• Determinar o tamanho final da foto (maior ou menor) - equivalente a
especificar a viewport (funções glViewport e ChangeSize).
Exemplo de Código
glMatrixMode( GL_MODELVIEW ); // Define a Matriz alvo
glLoadIdentity(); // re-inicializa a matriz
DesenhaObjeto(); // Desenha o objeto na posição
// correspondente às suas coordenadas
// originais
glTranslatef(10,10,10);
DesenhaObjeto(); // Desenha o objeto descolado de 10
// unidades em cada eixo
glTranslatef(10,10,10);
DesenhaObjeto(); //
//
//
//
Desenha o objeto descolado de 20
unidades em cada eixo
LEMBRE-SE, AS TRANSFORMAÇÕES SÃO
CUMULATIVAS
Transformações - Translação
Para efetuar uma translação há o comando:
glTranslatef(tx, ty, tz)
que move todas as coordenadas dos objetos
ao longo dos eixos coordenados.
Transformações - Rotação
Para efetuar uma rotação há o comando:
glRotatef(Angulo, x, y, z)
que gira o objeto ao redor do vetor (x,y,z). O
giro é de Angulo graus, no sentido antihorário.
Transformações - Escala
Para efetuar uma escala há o comando:
glScalef(ex, ey, ez)
que altera a escala do objeto ao logo dos
eixos coordenados.
Reinicializando as Tranformações
Para permitir que a transformação atual seja
reinicializada há o comando:
glLoadIdentity().
Limitando o escopo das
Tranformações
Para permitir que uma transformação valha somente em
um certo trecho de prograam e assim não altere o que está
sendo desenhado depois, há os comados:
glPushMatrix() e glPopMatrix().
A idéia é que o glPushMatriz armazene as
transformações atuais em um pilha interna do OpenGL e
que estas transformações possam ser retiradas depois por
um glPopMatriz.
Exercício 1
Inserir os comandos:
glLoadIdentity
glPushMatrix
glPopMatrix
glRotatef
glTransalef
adequadamente no código
fornecido, de maneira a obter
um disco branco, girando
como uma moeda sobre a
mesa.
Cor – Conceitos Básicos
Cor – Comandos Básicos
• glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
define a cor ( Red, Green, Blue, Alpha ) utilizada ao se
apagar a janela
• glClear(GL_COLOR_BUFFER_BIT);
apaga a janela com a cor definida em glGlearColor
• glColor3f(1.0f, 0.0f, 0.0f);
define a cor ( Red, Green, Blue ) com a qual os próximos
objetos serão desenhados
Cada vértice tem cor própria !
glBegin( GL_TRIANGLES );
// red
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(0.000f, 1.000f, -5.000f);
// green
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(-0.866f, -0.500f,-5.000f);
// blue
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(0.866f, -0.500f, -5.000f);
glEnd();
Vsync?
f H = 96kHz
horizontal scanning
frequency
Vres = 768 pixel
Hres = 1024 pixel
Refresh rate = f H / Hres * 0.95
= 89 Hz
 Vsync
Luz
OpenGL considera que a luz é dividida em quatro componentes independentes:
• Ambiente: resultado da luz refletida no ambiente; é uma luz que vem de
todas as direções;
• Difusa: luz que vem de uma direção, atinge a superfície e é refletida em
todas as direções; assim, parece possuir o mesmo brilho independente de
onde a câmera está posicionada;
• Especular: luz que vem de uma direção e tende a ser refletida numa única
direção;
• Emissiva: simula a luz que se origina de um objeto; a cor emissiva de uma
superfície adiciona intensidade ao objeto, mas não é afetada por qualquer
fonte de luz; ela também não introduz luz adicional da cena.
Materiais
• A cor do material de um objeto depende da porcentagem
de luz vermelha, verde e azul incidente que ele reflete.
Para determiná-la deve-se multiplicar o coeficiente de
reflexão (MR, MG, MB) do material pelos componentes
(LR, LG, LB) de intensidade da luz incidente.
luz que chega no observador é dada por:
(LR.MR, LG.MG, LB.MB)
Efeito da luz sobre o objeto
Abaixo o memo modelo com todos
parâmetros de luz definidos
Parâmetros de luz
• glEnable(GL_LIGHTING); habilita a iluminação
GL_COLOR_MATERIAL atribui a cor para o material a partir da cor
corrente
• glShadeModel(GL_SMOOTH); estabelece o modelo de tonalização
(GL_FLAT, GL_SMOOTH)
• glMaterialfv(GL_FRONT, GL_SPECULAR, especularidade); estabelece os
parâmetros do material que serão usados pelo modelo de iluminação
(GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_EMISSION,
GL_SHININESS, GL_AMBIENT_AND_DIFFUSE ou
GL_COLOR_INDEXES)
Parâmetros de luz – cont.
• glLightModelfv(GL_LIGHT_MODEL_AMBIENT, luzAmbiente);
estabelece os parâmetros do modelo de iluminação usado por OpenGL
(GL_LIGHT_MODEL_AMBIENT,
GL_LIGHT_MODEL_LOCAL_VIEWER ou
GL_LIGHT_MODEL_TWO_SIDE;)
• glLightfv(GL_LIGHT0, GL_AMBIENT, luzAmbiente);
estabelece os parâmetros da fonte de luz para uma das oito fontes de
luz disponíveis de GL_LIGHT0 a GL_LIGHT7
(GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_POSITION,
GL_SPOT_DIRECTION, GL_SPOT_EXPONENT,
GL_SPOT_CUTOFF. GL_CONSTANT_ATTENUATION,
GL_LINEAR_ATTENUATION,
GL_QUADRATIC_ATTENUATION);
Bibliografia / Referências
Sites diversos:
• http://www.worldofescher.com ( World of Escher )
• http://www.irtc.org
( Internet Raytracing Competition )
• http://www.povaray.org ( Persistence of Vision Raytracer )
Páginas de Professores:
• http://www.inf.pucrs.br/~manssour/OpenGL/index.html
• http://www.inf.pucrs.br/~pinho/CG/Aulas/OpenGL/OpenGL.html
• http://www.cesec.ufpr.br/~mcunha/opengl/
• http://astronomy.swin.edu.au/~pbourke/opengl/
Documentos e Livros:
• The OpenGL Graphic System: A Specification ( Version 1.4 )
• The OpenGL Graphics System Utility Library ( Version 1.3 )
• The OpenGL Utility Toolkit Programming Interface ( API Version 3 )
• OpenGL Reference Manual 2nd. ed. ( Version 1.1 )