SlideShare uma empresa Scribd logo
1 de 35
Baixar para ler offline
Introdução ao OpenGL
Prof. Rodrigo Luis de Souza da Silva
DCC065
2
Sumário
● OpenGL
● GLUT
● Estado Inicial do GLUT
● Manipulação e atualização de janelas
● Registro de Callbacks
● Referências
● Exercícios
3
OpenGL
● O OpenGL (Open Graphics Library) é
uma API livre utilizada na computação
gráfica, para desenvolvimento de aplicativos
gráficos, ambientes 3D, jogos, entre outros.
● O OpenGL é um conjunto de algumas
centenas de funções, que fornecem acesso a
praticamente todos os recursos
do hardware de vídeo.
4
OpenGL
● O OpenGL funciona como uma máquina de estados.
● Usando as funções da API, você pode ligar ou
desligar vários aspectos dessa máquina, tais como
a cor atual, incidência ou não de transparência, se
cálculos de iluminação devem ser feitos e assim por
diante.
● É importante conhecer cada um desses estados,
pois não é incomum a obtenção de resultados
indesejados simplesmente por deixar um ou outro
estado definido de maneira incorreta.
5
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.
● Como exemplo, podemos citar a função glClear,
responsável por “limpar” a área de visualização da
janela de renderização. Internamente utilizamos, por
exemplo, a função glDrawPixels, responsável por
escrever um bloco de pixels (a imagem) no
framebuffer.
6
● 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
OpenGL - API relacionadas
7
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.
● Em OpenGL, utilizamos primitivas geométricas.
As primitivas são: pontos, linhas e polígonos,
que se descrevem a partir de seus vértices.
8
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).
9
OpenGL – Primitivas
Primitivas removidas das versões mais modernas do OpenGL
10
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();
● No exemplo acima, foi definida uma cor para cada
vértice da linha. A cor da linha será obtida através da
interpolação entre essas duas cores.
11
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);
Modelos de cores serão estudados de forma mais
aprofundada mais à frente no curso.
12
OpenGL – Métodos de desenho
● A forma de representação vista no slide anterior é
chamada de "modo imediato". Este modo, apesar de
simples e de fácil entendimento, possui baixa
performance.
● Existem outras formas mais modernas e mais
rápidas de armazenar e representar objetos em
OpenGL usando:
○ Vertex Arrays
○ Display Lists
○ Vertex Buffer Objects (VBO)
● Veja no site exemplos de cada um desses métodos
em "Códigos (outros)".
13
GLUT
● GLUT é um toolkit para gerenciamento de janelas e
eventos para o OpenGL. A API é portável, fazendo
com que os códigos escritos possam ser
compilados em diversas plataformas como
Windows, Linux, Mac etc.
● É uma API simples, fácil de usar e leve.
● Implementaremos nossos códigos utilizando o
GLUT em C/C++.
14
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.
15
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.
16
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).
17
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.
void glutKeyboardFunc(void (*func)(unsigned char key, int x, int y));
Define a callback para gerenciar eventos de teclado.
void glutMouseFunc(void (*func)(int button, int state, int x, int y));
Define a callback para gerenciar eventos de mouse.
void glutIdleFunc(void (*func)(void));
Define a callback para gerenciar tarefas em background quando
nenhum outro evento está sendo executado ( comumente utilizado
em animações).
18
Loop principal
● Todos os eventos do glut são executados em
um loop. É através da função glutMainLoop()
que esse loop tem início.
19
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
20
OpenGL – Window-Viewport
● gluOrtho2D(left, right, bottom, top)
● Define uma região de visualização ortogonal 2D ou
tela de domínio de cena. É definida por dois
planos verticais de recorte left e right e dois planos
horizontais de recorte bottom e top.
● A configuração default desta função é (-1,1,-1,1).
● Define uma matriz de projeção ortogonal 2D.
21
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.
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
25
Interface Gráfica
● Os exemplos com interface gráfica fazem uso da
biblioteca GLUI (OpenGL Utility Interface).
● Maiores informações a respeito desta biblioteca
podem ser encontrados no link abaixo:
http://www.cs.unc.edu/~rademach/glui/
26
Saiba mais!
● Todas as funções do glut podem ser
encontradas no link abaixo:
http://www.opengl.org/documentation/specs/glut/spec3/spec3.html
● Material interessante sobre gerenciamento
de janelas em OpenGL
http://www.di.ubi.pt/~agomes/cg/teoricas/03-janelas.pdf
Está aula com shaders
27
Learn OpenGL
Vries, Joey. 2017
● 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
○ Capítulo 4 - Hello Window
○ Capítulo 5 - Hello Triangle
28
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.
● A parte mais interessante deste tutorial é sua interface
interativa, que possibilita simular a alteração do parâmetro
de uma determinada função e ver o resultado desta
alteração na área de renderização (exemplo no próximo
slide).
● Baixe em nosso site o arquivo “Tutors.rar”. Este arquivo já
vem com todas as bibliotecas e demais arquivos
necessários para sua execução e deve ser descompactado
fora do nosso projeto padrão.
29
Prática
● Execute o workspace correspondente ao seu sistema
operacional. Ao abrir o workspace, selecione o projeto
“Primitives”.
● Para alterar o argumento de uma função, basta clicar
com o mouse sobre o parâmetro e movê-lo para cima
ou para baixo (exemplo no próximo slide).
P.S.: Existem várias opções disponíveis em cada tutorial
clicando com o botão direito do mouse, mas boa parte
delas não funcionará em Windows (problema de
incompatibilidade entre os menus do glut e mais nova
versão da freeglut). Para contornar este problema, todas
as opções mais importantes estão disponíveis também
via teclado, com instruções detalhadas no terminal.
30
Prática
31
Exercícios
Para os exercícios a seguir, considere a análise
dos seguintes códigos
● triangle.cpp
● triangleReshape.cpp
● mouseKeyboard.cpp
32
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.
(a) (b) (c) (d)
33
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. Utilize a tecla 'a'
para alternar entre as curvas.
Para este exemplo considere a utilização do seguinte comando:
glOrtho(-10.0, 390, -2, 2, -1.0, 1.0);
(a) (b) (c)
P.S.: a função sin recebe o ângulo em radianos e não em graus.
Exercício 3
Para este exercício utilize como base o projeto
Viewport. Verifique o código e entenda o seu
funcionamento antes de prosseguir.
------------------------------------------------------------------------------------------
Desenvolva um programa que crie a ilustração do slide a
seguir. Neste programa, serão desenhadas 4 viewports, e
para cada viewport será projetada uma Window com
parâmetros diferentes. Desenvolva uma função para criar a
ilustração do canto superior esquerdo desta janela e
visualize esta ilustração por esses quatro pontos de vista
diferentes. Lembre-se de criar uma window e uma
viewport para cada um dos quadrantes da imagem ao
lado. Utilize as constantes GL_PROJECTION (para utilizar
o comando glOrtho) e GL_MODELVIEW (para viewport e
desenhos) corretamente.
34
Exercício 3
35

Mais conteúdo relacionado

Mais procurados

Aula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas CondicionaisAula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas CondicionaisDaniel Brandão
 
Árvore B estruturas de dados e técnicas de programação
Árvore B estruturas de dados e técnicas de programaçãoÁrvore B estruturas de dados e técnicas de programação
Árvore B estruturas de dados e técnicas de programaçãoEverson Wolf
 
Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01   Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01 Léo Dias
 
Aula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebAula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebDaniel Brandão
 
Algoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosAlgoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosMauro Pereira
 
Redes de Computadores - Aula 02
Redes de Computadores - Aula 02Redes de Computadores - Aula 02
Redes de Computadores - Aula 02thomasdacosta
 
Aula 1 Excel básico
Aula 1   Excel básicoAula 1   Excel básico
Aula 1 Excel básicoSaulo Said
 
Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01thomasdacosta
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação12anogolega
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
Lógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicionalLógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicionalWesley R. Bezerra
 
Aula 01 - Introdução ao C++
Aula 01 - Introdução ao C++Aula 01 - Introdução ao C++
Aula 01 - Introdução ao C++PeslPinguim
 
Apostila de Banco de Dados
Apostila de Banco de Dados Apostila de Banco de Dados
Apostila de Banco de Dados info_cimol
 
Algoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de AlgoritmosAlgoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de AlgoritmosElaine Cecília Gatto
 
Linguagem C 05 Vetores E Matrizes
Linguagem C 05 Vetores E MatrizesLinguagem C 05 Vetores E Matrizes
Linguagem C 05 Vetores E MatrizesRegis Magalhães
 

Mais procurados (20)

Aula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas CondicionaisAula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas Condicionais
 
Árvore B estruturas de dados e técnicas de programação
Árvore B estruturas de dados e técnicas de programaçãoÁrvore B estruturas de dados e técnicas de programação
Árvore B estruturas de dados e técnicas de programação
 
Algoritmo aula 01-f
Algoritmo   aula 01-fAlgoritmo   aula 01-f
Algoritmo aula 01-f
 
Algoritmo recursivo
Algoritmo recursivoAlgoritmo recursivo
Algoritmo recursivo
 
Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01   Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01
 
Aula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebAula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para Web
 
Algoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosAlgoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registros
 
Redes de Computadores - Aula 02
Redes de Computadores - Aula 02Redes de Computadores - Aula 02
Redes de Computadores - Aula 02
 
Aula 1 Excel básico
Aula 1   Excel básicoAula 1   Excel básico
Aula 1 Excel básico
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Lógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicionalLógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicional
 
Aula 01 - Introdução ao C++
Aula 01 - Introdução ao C++Aula 01 - Introdução ao C++
Aula 01 - Introdução ao C++
 
Introdução ao HTML
Introdução ao HTMLIntrodução ao HTML
Introdução ao HTML
 
Apostila de Banco de Dados
Apostila de Banco de Dados Apostila de Banco de Dados
Apostila de Banco de Dados
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
Algoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de AlgoritmosAlgoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de Algoritmos
 
Linguagem C 05 Vetores E Matrizes
Linguagem C 05 Vetores E MatrizesLinguagem C 05 Vetores E Matrizes
Linguagem C 05 Vetores E Matrizes
 

Semelhante a 02 introdução ao open gl

Webinar LVGL: Uma poderosa ferramenta GUI para projetos de Sistemas Embarcados
Webinar LVGL: Uma poderosa ferramenta GUI para projetos de Sistemas EmbarcadosWebinar LVGL: Uma poderosa ferramenta GUI para projetos de Sistemas Embarcados
Webinar LVGL: Uma poderosa ferramenta GUI para projetos de Sistemas EmbarcadosEmbarcados
 
Computação Gráfica - Introdução ao OpenGL
Computação Gráfica - Introdução ao OpenGLComputação Gráfica - Introdução ao OpenGL
Computação Gráfica - Introdução ao OpenGLTony Alexander Hild
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcadotdc-globalcode
 
TDC2016 - Processamento de Imagem em GPU com OpenGL
TDC2016 - Processamento de Imagem em GPU com OpenGLTDC2016 - Processamento de Imagem em GPU com OpenGL
TDC2016 - Processamento de Imagem em GPU com OpenGLAndré Curvello
 
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)Fernando Passold
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em CDiego Santos
 
Visualg primeira interação
Visualg   primeira interaçãoVisualg   primeira interação
Visualg primeira interaçãoHumberto Cepep
 
JS FUNDAMENTOS - AULA 01.pdf
JS FUNDAMENTOS - AULA 01.pdfJS FUNDAMENTOS - AULA 01.pdf
JS FUNDAMENTOS - AULA 01.pdfAntonioSvio1
 
Lógica de programação com visu alg
Lógica de programação com visu algLógica de programação com visu alg
Lógica de programação com visu algLeandro Santos
 
Qt tchelinux-2010
Qt tchelinux-2010Qt tchelinux-2010
Qt tchelinux-2010Wagner Reck
 
Apostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDFApostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDFengelrfs
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
38698469 slides-arduino
38698469 slides-arduino38698469 slides-arduino
38698469 slides-arduinoRui Alves
 
Codando Assíncrono com Coroutines
Codando Assíncrono com CoroutinesCodando Assíncrono com Coroutines
Codando Assíncrono com CoroutinesArildo Borges Jr
 

Semelhante a 02 introdução ao open gl (20)

Introdução à OpenGL
Introdução à OpenGLIntrodução à OpenGL
Introdução à OpenGL
 
Webinar LVGL: Uma poderosa ferramenta GUI para projetos de Sistemas Embarcados
Webinar LVGL: Uma poderosa ferramenta GUI para projetos de Sistemas EmbarcadosWebinar LVGL: Uma poderosa ferramenta GUI para projetos de Sistemas Embarcados
Webinar LVGL: Uma poderosa ferramenta GUI para projetos de Sistemas Embarcados
 
Computação Gráfica - Introdução ao OpenGL
Computação Gráfica - Introdução ao OpenGLComputação Gráfica - Introdução ao OpenGL
Computação Gráfica - Introdução ao OpenGL
 
Palestra
PalestraPalestra
Palestra
 
Apostila Visualg
Apostila VisualgApostila Visualg
Apostila Visualg
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcado
 
TDC2016 - Processamento de Imagem em GPU com OpenGL
TDC2016 - Processamento de Imagem em GPU com OpenGLTDC2016 - Processamento de Imagem em GPU com OpenGL
TDC2016 - Processamento de Imagem em GPU com OpenGL
 
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em C
 
Visualg primeira interação
Visualg   primeira interaçãoVisualg   primeira interação
Visualg primeira interação
 
JS FUNDAMENTOS - AULA 01.pdf
JS FUNDAMENTOS - AULA 01.pdfJS FUNDAMENTOS - AULA 01.pdf
JS FUNDAMENTOS - AULA 01.pdf
 
Visualg2_manual.pdf
Visualg2_manual.pdfVisualg2_manual.pdf
Visualg2_manual.pdf
 
Lógica de programação com visu alg
Lógica de programação com visu algLógica de programação com visu alg
Lógica de programação com visu alg
 
Qt tchelinux-2010
Qt tchelinux-2010Qt tchelinux-2010
Qt tchelinux-2010
 
Secomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao ElixirSecomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao Elixir
 
Apostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDFApostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDF
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
38698469 slides-arduino
38698469 slides-arduino38698469 slides-arduino
38698469 slides-arduino
 
Mini-Curso: gnuplot
Mini-Curso: gnuplotMini-Curso: gnuplot
Mini-Curso: gnuplot
 
Codando Assíncrono com Coroutines
Codando Assíncrono com CoroutinesCodando Assíncrono com Coroutines
Codando Assíncrono com Coroutines
 

02 introdução ao open gl

  • 1. Introdução ao OpenGL Prof. Rodrigo Luis de Souza da Silva DCC065
  • 2. 2 Sumário ● OpenGL ● GLUT ● Estado Inicial do GLUT ● Manipulação e atualização de janelas ● Registro de Callbacks ● Referências ● Exercícios
  • 3. 3 OpenGL ● O OpenGL (Open Graphics Library) é uma API livre utilizada na computação gráfica, para desenvolvimento de aplicativos gráficos, ambientes 3D, jogos, entre outros. ● O OpenGL é um conjunto de algumas centenas de funções, que fornecem acesso a praticamente todos os recursos do hardware de vídeo.
  • 4. 4 OpenGL ● O OpenGL funciona como uma máquina de estados. ● Usando as funções da API, você pode ligar ou desligar vários aspectos dessa máquina, tais como a cor atual, incidência ou não de transparência, se cálculos de iluminação devem ser feitos e assim por diante. ● É importante conhecer cada um desses estados, pois não é incomum a obtenção de resultados indesejados simplesmente por deixar um ou outro estado definido de maneira incorreta.
  • 5. 5 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. ● Como exemplo, podemos citar a função glClear, responsável por “limpar” a área de visualização da janela de renderização. Internamente utilizamos, por exemplo, a função glDrawPixels, responsável por escrever um bloco de pixels (a imagem) no framebuffer.
  • 6. 6 ● 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 OpenGL - API relacionadas
  • 7. 7 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. ● Em OpenGL, utilizamos primitivas geométricas. As primitivas são: pontos, linhas e polígonos, que se descrevem a partir de seus vértices.
  • 8. 8 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).
  • 9. 9 OpenGL – Primitivas Primitivas removidas das versões mais modernas do OpenGL
  • 10. 10 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(); ● No exemplo acima, foi definida uma cor para cada vértice da linha. A cor da linha será obtida através da interpolação entre essas duas cores.
  • 11. 11 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); Modelos de cores serão estudados de forma mais aprofundada mais à frente no curso.
  • 12. 12 OpenGL – Métodos de desenho ● A forma de representação vista no slide anterior é chamada de "modo imediato". Este modo, apesar de simples e de fácil entendimento, possui baixa performance. ● Existem outras formas mais modernas e mais rápidas de armazenar e representar objetos em OpenGL usando: ○ Vertex Arrays ○ Display Lists ○ Vertex Buffer Objects (VBO) ● Veja no site exemplos de cada um desses métodos em "Códigos (outros)".
  • 13. 13 GLUT ● GLUT é um toolkit para gerenciamento de janelas e eventos para o OpenGL. A API é portável, fazendo com que os códigos escritos possam ser compilados em diversas plataformas como Windows, Linux, Mac etc. ● É uma API simples, fácil de usar e leve. ● Implementaremos nossos códigos utilizando o GLUT em C/C++.
  • 14. 14 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.
  • 15. 15 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.
  • 16. 16 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).
  • 17. 17 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. void glutKeyboardFunc(void (*func)(unsigned char key, int x, int y)); Define a callback para gerenciar eventos de teclado. void glutMouseFunc(void (*func)(int button, int state, int x, int y)); Define a callback para gerenciar eventos de mouse. void glutIdleFunc(void (*func)(void)); Define a callback para gerenciar tarefas em background quando nenhum outro evento está sendo executado ( comumente utilizado em animações).
  • 18. 18 Loop principal ● Todos os eventos do glut são executados em um loop. É através da função glutMainLoop() que esse loop tem início.
  • 19. 19 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
  • 20. 20 OpenGL – Window-Viewport ● gluOrtho2D(left, right, bottom, top) ● Define uma região de visualização ortogonal 2D ou tela de domínio de cena. É definida por dois planos verticais de recorte left e right e dois planos horizontais de recorte bottom e top. ● A configuração default desta função é (-1,1,-1,1). ● Define uma matriz de projeção ortogonal 2D.
  • 21. 21 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.
  • 22. 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. 23
  • 25. 25 Interface Gráfica ● Os exemplos com interface gráfica fazem uso da biblioteca GLUI (OpenGL Utility Interface). ● Maiores informações a respeito desta biblioteca podem ser encontrados no link abaixo: http://www.cs.unc.edu/~rademach/glui/
  • 26. 26 Saiba mais! ● Todas as funções do glut podem ser encontradas no link abaixo: http://www.opengl.org/documentation/specs/glut/spec3/spec3.html ● Material interessante sobre gerenciamento de janelas em OpenGL http://www.di.ubi.pt/~agomes/cg/teoricas/03-janelas.pdf
  • 27. Está aula com shaders 27 Learn OpenGL Vries, Joey. 2017 ● 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 ○ Capítulo 4 - Hello Window ○ Capítulo 5 - Hello Triangle
  • 28. 28 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. ● A parte mais interessante deste tutorial é sua interface interativa, que possibilita simular a alteração do parâmetro de uma determinada função e ver o resultado desta alteração na área de renderização (exemplo no próximo slide). ● Baixe em nosso site o arquivo “Tutors.rar”. Este arquivo já vem com todas as bibliotecas e demais arquivos necessários para sua execução e deve ser descompactado fora do nosso projeto padrão.
  • 29. 29 Prática ● Execute o workspace correspondente ao seu sistema operacional. Ao abrir o workspace, selecione o projeto “Primitives”. ● Para alterar o argumento de uma função, basta clicar com o mouse sobre o parâmetro e movê-lo para cima ou para baixo (exemplo no próximo slide). P.S.: Existem várias opções disponíveis em cada tutorial clicando com o botão direito do mouse, mas boa parte delas não funcionará em Windows (problema de incompatibilidade entre os menus do glut e mais nova versão da freeglut). Para contornar este problema, todas as opções mais importantes estão disponíveis também via teclado, com instruções detalhadas no terminal.
  • 31. 31 Exercícios Para os exercícios a seguir, considere a análise dos seguintes códigos ● triangle.cpp ● triangleReshape.cpp ● mouseKeyboard.cpp
  • 32. 32 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. (a) (b) (c) (d)
  • 33. 33 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. Utilize a tecla 'a' para alternar entre as curvas. Para este exemplo considere a utilização do seguinte comando: glOrtho(-10.0, 390, -2, 2, -1.0, 1.0); (a) (b) (c) P.S.: a função sin recebe o ângulo em radianos e não em graus.
  • 34. Exercício 3 Para este exercício utilize como base o projeto Viewport. Verifique o código e entenda o seu funcionamento antes de prosseguir. ------------------------------------------------------------------------------------------ Desenvolva um programa que crie a ilustração do slide a seguir. Neste programa, serão desenhadas 4 viewports, e para cada viewport será projetada uma Window com parâmetros diferentes. Desenvolva uma função para criar a ilustração do canto superior esquerdo desta janela e visualize esta ilustração por esses quatro pontos de vista diferentes. Lembre-se de criar uma window e uma viewport para cada um dos quadrantes da imagem ao lado. Utilize as constantes GL_PROJECTION (para utilizar o comando glOrtho) e GL_MODELVIEW (para viewport e desenhos) corretamente. 34