Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
DCC065
2
OpenGL
3
OpenGL
● O OpenGL funciona como uma máquina de
estados.
4
OpenGL
● As funções do OpenGL são identificadas pelo
prefixo “gl” e a primeira letra de cada palavra após
esse prefixo é maiúscula.
5
OpenGL - API relacionadas
● GL, GLX, WGL
○ ponte entre o OpenGL e os diversos sistemas
de janelas
● GLU (OpenGL Utility Library)
○ Parte do OpenGL
○ NURBS, tessellators, quadric shapes, etc.
● GLUT (OpenGL Utility Toolkit) e GLFW
○ API portável de sistema de janelas
○ Não é parte oficial do OpenGL
6
OpenGL – Primitivas
● Alguns trabalhos práticos a serem
desenvolvidos em nosso curso exigirão
conhecimento sobre criação de desenhos
usando as primitivas do OpenGL.
7
OpenGL – Primitivas
● Pontos: são conjuntos de números reais chamados
vértices. Pode-se trabalhar com vértices com 2 ou 3
coordenadas.
● Linhas: as linhas em OpenGL são na realidade
segmentos de reta. Os vértices definem os pontos
extremos de cada segmento.
● Polígonos: área envolta por um conjunto finito e
fechado de segmentos de retas. Em OpenGL, os
polígonos devem ser simples (suas bordas não se
sobrepõem) e convexos (dado quaisquer dois pontos
dentro do polígono, o segmento que os une também
esta em seu interior).
8
OpenGL – Primitivas
9
OpenGL – Primitivas
● A criação de figuras no OpenGL deve ser feita
somente dentro do par de instruções glBegin() e
glEnd() como no exemplo abaixo:
glBegin(GL_LINES);
glColor3f(1.0, 0.0, 0.0);
glVertex2f(0.0, 0.0);
glColor3f(0.0, 1.0, 0.0);
glVertex2f(3.0, 2.0);
glEnd();
10
Cores
● Em OpenGL utilizaremos o modelo de cor RGB
(vermelho, verde e azul). Veja abaixo alguns
exemplos de cores e seus respectivos códigos:
glColor3f(1.0, 0.0, 0.0);
glColor3f(0.0, 1.0, 0.0);
glColor3f(0.0, 0.0, 1.0);
glColor3f(1.0, 1.0, 0.0);
glColor3f(0.0, 1.0, 1.0);
glColor3f(1.0, 0.0, 1.0);
glColor3f(0.0, 0.0, 0.0);
glColor3f(1.0, 1.0, 1.0);
glColor3f(0.5, 0.5, 0.5);
○ Display Lists
13
Estado Inicial do GLUT
Nos arquivos de teste a serem disponibilizados, várias
funções de inicialização do GLUT são chamadas. Algumas
desses funções são as seguintes:
glutInit(&argc, argv);
É usada para inicializar a biblioteca GLUT. Nos exemplos a
serem utilizados, basta chamá-la com os argumentos default.
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
Estabelece os parâmetros iniciais do display. A configuração
acima serve tanto para exibir imagens estáticas quanto
animações (Double Buffer) e de uma forma geral não será
modificada.
14
Manipulação de janelas
glutInitWindowSize(int width, int height );
Define o tamanho inicial da janela de renderização em
pixels. Esse tamanho pode ser modificado utilizando-se a
função glutReshapeWindow.
glutInitWindowPosition(int x, int y );
Define a posição inicial da janela de renderização em pixels
(considere a origem no canto superior esquerdo do
monitor). Esta função é opcional.
glutCreateWindow("Nome da janela");
Cria a janela principal onde será exibida a imagem.
15
Atualização das janelas
Existem funções específicas para definir se
uma janela precisa ou não ser redesenhada e
para atualizar essa janela:
void glutPostRedisplay(void);
Quando chamado, define que a janela corrente precisa ser
redesenhada.
void glutSwapBuffers(void);
Atualiza a janela corrente fazendo um swap entre o buffer
que foi desenhado e o buffer corrente (é necessário usar
double buffer para chamar essa função).
16
Registro de Callbacks
É necessário que registremos no glut funções específicas
para display, teclado, mouse etc. Abaixo temos alguns
exemplos dessas funções com seus respectivos
argumentos:
void glutDisplayFunc(void (*func)(void));
Define a callback responsável pelas funções de desenho.
18
OpenGL – Window-Viewport
● Existem algumas funções que governam a
relação entre o domínio da cena (onde os
objetos são definidos) e o domínio da imagem
(espaço no qual a janela é renderizada). As
principais funções são as seguintes:
● glOrtho ou gluOrtho2D
● glViewport
● glutReshapeWindow
● glutInitWindowPosition
19
OpenGL – Window-Viewport
20
OpenGL – Window-Viewport
● glViewport(x, y, width, height)
● Define uma área de visualização na janela da
aplicação, onde x, y especificam o canto inferior
esquerdo e width, height as suas dimensões.
● Se o comando glViewport não for definido, a área
de visualização default ocupa a área gráfica total
da janela de visualização (esta área é definida
através de funções do glut).
● Podem existir várias áreas de visualização dentro
da janela de aplicação.
21
Entidades de Visualização (resumo)
● Window (Janela de Recorte)
● É área do mundo a ser visualizada e é definida em
coordenadas do mundo
● Exemplo de comando: glOrtho
● Viewport
● Área a ser visualizada na janela do dispositivo
● É a área onde a window definida é mapeada.
● Exemplo de comando: glViewport
● Janela
● Janela do dispositivo de saída (janela física)
● Exemplo de comando e criação: glutCreateWindow
22
23
Entidades de Visualização
24
Interface Gráfica
25
Saiba mais!
26
Está aula com shaders
● A forma de programar os
elementos vistos nesta aula com
shaders está descrita no livro
Learn OpenGL nos seguintes
capítulos:
○ Capítulo 3 - Creating window
Learn OpenGL
Vries, Joey. 2017
27
Prática
● Nate Robins, atualmente desenvolvedor dos estúdios
Disney, desenvolveu uma série de tutoriais que servem de
apoio a temas específicos em cursos de Computação
Gráfica em geral. Utilizaremos este tutorial em várias de
nossas aulas.
30
Exercícios
Para os exercícios a seguir, considere a análise
dos seguintes códigos
● quadColor.cpp
● quadColorReshape.cpp
● mouseKeyboard.cpp
31
Exercício 1
Desenhe com o OpenGL as ilustrações abaixo. Deve-se
desenhar os objetos e os eixos presentes em cada
ilustração. Utilize funções de teclado para alternar entre as
quatro ilustrações.
32
Exercício 2
Baseado na técnica de discretização por amostragem linear por partes calcule e
exiba, com o auxílio do OpenGL, as ilustrações abaixo. Em (a) utilizou-se a
função seno (sin de math.h) variando o ângulo de 0º a 360º em 6 partes. Em (b)
utilizou-se a mesma função com uma amostragem de 12 partes e em (c)
utilizou-se uma amostragem mais precisa com 180 partes. Para este exemplo
considere a utilização do seguinte comando:
glOrtho(-10.0, 390, -2, 2, -1.0, 1.0);
35