Você está na página 1de 39

INTRODUÇÃO A OPENGL

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

 Uma quina de polígono aonde duas arestas se encontram

10
DESENHO COM OPENGL
 Para desenhar um primitivo chamar glBegin()
 glEnd() fecha uma lista de vértices e seus atributos

 As coordenadas de um primitivo são fornecidas em


ordem anti-horária

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);

glColor3f(0.0f, 1.0f, 0.0f); //verde puro


glVertex3f(-1.0f, -1.0f, 0.0f);

glColor3f(0.0f, 0.0f, 1.0f); //azul puro


glVertex3f(1.0f, -1.0f, 0.0f);
glEnd();
14
RENDERIZAÇÃO OPENGL
 Os dados consistem de
 Coordenadas posicionais
 Cores
 Normais
 Coordenadas de Textura
 Os vértices são processados
 Demaneira independente
 Em ordem determinada

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

 As transformações de coordenadas mudam o


sistema de coordenadas.
 As coordenadas dos objetos, pontos de iluminação
ou de observação serão definidas em coordenadas
locais depois da mudança do sistema de
coordenadas.
A transformação de coordenadas é feita
multiplicando as coordenadas correntes pela(s)
matriz(es) de transformação.
19
TRANSFORMAÇÕES E MATRIZES
 Quando as transformações são para posicionar os objetos
(desenhar) ou pontos de iluminação usa-se o modo
chamado modelview (modo de renderização).
 Quando as transformações são para posicionar o
observador usa-se o modo chamado projection (modo de
rasterização).

20
PILHAS DE MATRIZES
 OpenGL possui múltiplas pilhas de matrizes
 glPushMatrix empilha uma cópia da matriz corrente

 glPopMatrix desempilha para a matriz corrente

 Muito útil para figuras definidas de maneira hierárquica

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);

glColor3f(0.0f, 1.0f, 0.0f); //verde puro


glVertex3f(-1.0f, -1.0f, 0.0f);

glColor3f(0.0f, 0.0f, 1.0f); //azul puro


glVertex3f(1.0f, -1.0f, 0.0f);
glEnd();
22
RASTERIZAÇÃO (“RESHAPE”)

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)

 Usualmente isto se faz na matriz GL_PROJECTION e


se combina com a matriz de perspectiva

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)

//Depois as transformações do objeto


glMatrixMode(GL_MODELVIEW)
glLoad Identity();
glTranslate(1,1,1);
glRotatef(90, 1,0,0);
DrawObject();
29
LAÇO DE PROCESSAMENTO

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

Você também pode gostar