Escolar Documentos
Profissional Documentos
Cultura Documentos
1
Um tutorial de OpenGL, em língua portuguesa, pode ser
encontrado no endereço
http://www22.brinkster.com/shbb/opengl/tcap01.htm
2
TIPOS DE DADOS
OpenGL possui seus próprios tipos de dados.
Representação
Tipo de dado OpenGL Tipo de Dado C Sufixo
Interna
GLbyte 8-bit integer signed char b
GLshort 16-bit integer short s
GLint, GLsizei 32-bit integer int ou long i
GLfloat, GLclampf 32-bit floating-point float f
GLdouble, GLclampd 64-bit floating-point double d
GLubyte, GLboolean 8-bit unsigned integer unsigned char ub
16-bit unsigned
GLushort unsigned short us
integer
GLuint, GLenum, 32-bit unsigned unsigned long ou
ui
GLbitfield integer unsigned int
3
PRIMITIVOS GRÁFICOS OPENGL
Os primitivos são grafados da forma
<prefixo da biblioteca><Raiz><Número de
argumentos(opcional)><Tipo de
argumentos(opcional)>
Como exemplo considere-se a função
glVertex3f, onde Vertex é sua raiz, gl indica de
qual biblioteca a função faz parte e 3f significa
que a função recebe três valores de ponto
flutuante(f) como parâmetro. Isso vale para todas
as funções OpenGL.
4
CONTEÚDO DE UM PROGRAMA
OPENGL
Um programa OpenGL deve conter
Montagem do contexto
Função de renderização (especificar nome)
glutDisplayFunc
Função de “Reshape”(especificar nome)
glutReshapeFunc
Função principal que chama os demais e pode conter a animação
Função laço de processamento (faz os “callbacks”)
5
MONTAGEM DO CONTEXTO
6
MONTAGEM DO CONTEXTO
Criação de janela, englobando tamanho e posição
Modo de exibição (um ou dois buffers)
Habilitação do teste de profundidade
Habilitação da não exibição de superfícies ocultas
Limpeza de cores
Definição de cor de objetos
Limpeza de buffer
Configuração dos pixels
Habilitação de textura
Limpeza de fila de comandos ou troca de “buffers”
Modelo de sombreamento
Sentido de orientação da numeração de nós
Habilitação de periféricos de entrada
7
COMO SE CONFIGURAM AS OPÇÕES
Funções
glEnable, glDisable,
glCullMode, glPolygonMode, glLightModel, etc.
8
RENDERIZAÇÃO
9
COMO RENDERIZAR UM PRIMITIVO
GEOMÉTRICO
Transferência para o “framebuffer”
Renderizar primitivos OpenGL
Definir um grupo de um ou mais vértices
Um vértice define:
Um ponto
Uma extremidade de uma aresta
10
DESENHO COM OPENGL
Para desenhar um primitivo chamar glBegin()
glEnd() fecha uma lista de vértices e seus atributos
11
CHAMADAS DE FUNÇÃO PARA
DESENHAR UM PRIMITIVO
glBegin(GL_POINTS);
glVertex3f(0.0f, 0.0f, 0.0f);
glEnd();
12
DESENHO DE UM TRIÂNGULO:
glBegin(GL_TRIANGLES);
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 0.0f);
glEnd();
13
DESENHO DE UM TRIÂNGULO COM
CORES DIFERENTES EM CADA VÉRTICE
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f); //vermelho
puro
glVertex3f(0.0f, 1.0f, 0.0f);
15
TIPOS DE RENDERIZAÇÃO
“Wireframe”
Mostra apenas linhas e curvas
Os objetos não são preenchidos
Sombreamento plano
Cálculode uma só cor para cada polígono
Preenche cada polígono com a cor constante
16
TIPOS DE RENDERIZAÇÃO
Suave (sombreamento de Gouraud)
Interpola cor dos vértices ao longo dos polígonos
As cores dos vértices podem ser computadas por
cálculo de iluminação ou especificadas de forma
explícita
Mapeamento de Textura
Modificação da cor de cada Pixel com cores obtidas a
partir de uma imagem
17
TRANSFORMAÇÕES E MATRIZES
As transformações de coordenadas são feitas por
matrizes
São usados como sistemas de coordenadas:
Coordenadas do mundo
Aplicar matriz modelview
Coordenadas do olho
Aplicar matriz projection
Coordenadas do volume de visualização
Aplicar matriz de perspectiva
Coordenadas normalizadas do dispositivo
Aplicar transformação de viewport
Coordenadas da janela
18
TRANSFORMAÇÕES E MATRIZES
20
PILHAS DE MATRIZES
OpenGL possui múltiplas pilhas de matrizes
glPushMatrix empilha uma cópia da matriz corrente
21
TRANSFORMAÇÕES DO MODELO
glTranslatef(0.0f, 0.0f, -10.0f);
glRotatef(45.0f, 0.0f, 1.0f, 0.0f);
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f); //vermelho puro
glVertex3f(0.0f, 1.0f, 0.0f);
23
MODOS
A geração dos objetos deve sempre utilizar o modo
modelview.
Uma vez definida a geometria do objeto deve-se utilizar
o modo projection para a exibição
24
VISUALIZAÇÃO EM OPENGL
A visualização se compõe de duas partes
Posicionamento do objeto pela Matriz de
Transformação modelview
Projeção de visualização pela Matriz de
Transformação projection
OpenGL suporta tanto as transformações de
visualização ortográficas quanto as de perspectiva
A câmera OpenGL está inicialmente na origem
apontando para a direção z
As transformações movem os objetos em relação à
câmera
25
MATRIZ DO MODELO DE
VISUALIZAÇÃO
Posiciona os objetos em coordenadas do mundo
Usualmente formada pela concatenação de
transformações simples
glRotate(theta, x,y,z)
glTranslate(x,y,z)
glScale(x,y,z)
A ordem das transformações é importante
26
VISUALIZAÇÃO EM OPENGL
Projeção Ortográfica
Limites paralelos ao volume de visualização
Os objetos são cortados no paralelepípedo de visualização pois
existe uma região de visualização delimitada pelos planos de
corte
glOrtho(left, right, bottom, top, front, back)
Projeção em Perspectiva
glFrustum, gluPerspective
O volume de corte é um tronco de pirâmide
Os planos de corte (próximo e distante) não devem ser
muito afastados um do outro
O plano de corte próximo não deve ficar muito junto ao
olho (ou câmera) 27
POSICIONAMENTO DA CÂMERA
Usar gluLookAt para especificar
Posição do olho
Ponto “Look-at”
Vetor “up”
gluLookAt(10,10,10,1,2,3,0,0,1);
O olho está em (10,10,10)
O ponto “Look at” está em (1,2,3)
O vetor “Up” é (0,0,1)
28
EXEMPLO COMPLETO DE
VISUALIZAÇÃO
//Primeiramente a Projeção
glMatrixMode( GL_PROJECCTION);
glLoadIdentity();
gluPerspective(60, 1, 1, 100);
gluLookAt(10,10,10,1,2,3,0,0,1)
30
LAÇO DE PROCESSAMENTO DO
GLUT
A função glutMainLoop() dispara o laço de
processamento do GLUT, sendo chamada uma
única vez em um programa. Esta rotina nunca
retorna, só encerrando a aplicação por meio de
interrupção. É ela que dispara todas as demais
rotinas. Ao detectar um evento é feito um
“callback” se o tratamento desse evento tiver
sido especificado na aplicação.
31
FUNÇÕES DE “CALLBACK”
32
FUNÇÕES DE “CALLBACK” GLUT
Finalidade Chamada
Renderização glutDisplayFunc(nome da função)
Redimensionamento de janela ou glutReshapeFunc(nome da função)
rasterização
Teclado (teclas usuais) glutKeyboardFunc(nome da função)
Teclado (teclas especiais) glutSpecialFunc(nome da função)
Mouse glutMouseFunc(nome da função)
Espera glutIdleFunc(nome da função
33
EXEMPLO DE FUNÇÃO DE ESPERA
void idle(void)
{ time += 0.05; glutSetWindow(window);
glutPostRedisplay();
}
34
LISTA DAS FUNÇÕES GL, GLU E GLUT
35
FUNÇÕES GL, GLU E GLUT
Documentação sobre estas funções pode ser encontrada
em:
http://pyopengl.sourceforge.net/documetation/manual/
reference-GL.html
http://pyopengl.sourceforge.net/documetation/manual/
reference-GLU.html
http://pyopengl.sourceforge.net/documetation/manual/
reference-GLUT.html
36
FUNÇÕES GL, GLU E GLUT
GL.htm
GLU.htm
GLUT.htm
37
EXEMPLO EM C++
38
EXEMPLO EM C++ BUILDER
39