OpenGL – Uma abordagem prática e objetiva
-
Upload
alec-humphrey -
Category
Documents
-
view
117 -
download
16
description
Transcript of OpenGL – Uma abordagem prática e objetiva
![Page 1: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/1.jpg)
OpenGL – Uma abordagem prática e objetiva
Última atualização: 16-nov-2008
![Page 2: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/2.jpg)
1 - Introdução
Computação Gráfica é uma área da Ciência da Computação que se dedica ao estudo e ao desenvolvimento de técnicas e algoritmos para geração, manipulação e análise de imagens pelo computador
![Page 3: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/3.jpg)
Introdução
aplicações gráficas processamento gráfico
![Page 4: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/4.jpg)
Pipeline
A palavra pipeline é usada para descrever um processo composto de duas ou mais etapas para geração de uma imagem
![Page 5: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/5.jpg)
Framebuffer
framebuffer – memória do dispositivo gráfico
![Page 6: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/6.jpg)
2 - Instalação
![Page 7: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/7.jpg)
No DEV-C++
<alt>+<P> --> abre o menu Projeto
Selecionar Opções de Projeto Selecione a aba Parâmetros e em
Linker verifique:-lglut32 -lopengl32 -lglu32 -lwinmm -lgdi32
![Page 8: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/8.jpg)
3 – Primeiros passos em OpenGL
Função Desenha Função Teclado Função Inicializa Função Principal
![Page 9: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/9.jpg)
Primeiros passos em OpenGL
Veja exemplo em: http://www.novatec.com.br/livros/opengl/
![Page 10: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/10.jpg)
4 – Padronização dos Nomes das Funções e Tipos de Dados
![Page 11: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/11.jpg)
Funções - Exemplos
void glColor(GLint red, GLint green, GLint blue);
void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
![Page 12: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/12.jpg)
Tipos de dados OpenGLTipo de dado OpenGL
Representação interna
Tipo de dado C equivalente
Sufixo
GLbyte int 8 bits signed char b
GLshort int 16 bits short s
GLint, GLsizei int 32 bits int ou long i
GLfloat, GLclampf ponto flutuante – 32 bits
float f
GLdouble, GLclampd
ponto flutuante – 64 bits
double d
GLubyte, GLBoolean
int 8 bits sem sinal unsigned char ub
GLushort int 16 bits sem sinal
unsigned short us
GLuint, GLemun, GLbitfield
int 32 bits sem sinal
unsigned long ou unsigned int
ui
![Page 13: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/13.jpg)
5 – GLUT – GL Utility Toolkit
Responsável pelo gerenciamento de janelas e tratamento de eventos
![Page 14: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/14.jpg)
GLUT - Funções
// Especifica a posição inicial da janela GLUTglutInitWindowPosition(int x, int y);
// Especifica o tamanho inicial em pixels da janela GLUTglutInitWindowSize(int largura, int altura);
![Page 15: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/15.jpg)
Criação da Janela
// Cria a janela passando como argumento o título da mesma
glutCreateWindow(char *string);
![Page 16: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/16.jpg)
Funções para tratamento de eventos glutDisplayFunc glutReshapeFunc glutKeyboardFunc glutSpecialFunc glutMouseFunc glutMotionFunc glutPassiveMotionFunc glutIdleFunc
![Page 17: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/17.jpg)
6 – Máquinas de Estado
Uma máquina de estados corresponde a um dispositivo ou sistema que guarda o estado de um ou mais elementos em um momento específico
Comandos de entrada são utilizados para alterar este estado e/ou gerar uma função de saída
![Page 18: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/18.jpg)
Máquina de estados OpenGL é considerado uma máquina
de estados É composto de várias variáveis de
estado que armazenam determinado valor e podem ser alteradas pela chamada a uma função
Cada variável de estado possui um valor padrão (default) que pode ser alterado
![Page 19: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/19.jpg)
Funções para alteração de estado void glEnable(GLenum cap) void glDisable(GLenum cap) GLBoolean glIsEnabled(GLenum cap)
--> verifica o estado que se encontra uma propriedade
![Page 20: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/20.jpg)
Variáveis de estado
Variáveis de estado relacionadas são agrupadas em um atributo
void glPushAttrib(GLbitfield mask)
void glPopAttrib(void)
![Page 21: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/21.jpg)
7 – Definição do Espaço de Trabalho
modelo coordenadas geométricas sistema de referencia Sistema de Referência do Universo
(SRU) Sistema de Referência da Tela
(SRT)
![Page 22: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/22.jpg)
Definições
Modelo-> é uma representação computacional de um objeto, isto é, corresponde a uma estrutura de dados que tem sua descrição geométrica
Imagem -> matriz de pontos Universo -> é a região do plano (ou do
espaço) utilizada em uma aplicação
![Page 23: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/23.jpg)
Definições
coordenadas geométricas sistema de referência -> define
uma origem em relação a qual todos os posicionamentos do universo são descritos.
![Page 24: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/24.jpg)
7.1 Visualização Bidimensional
![Page 25: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/25.jpg)
Sistema de Referencia do Universo
Sistema de Referência do Universo (SRU) -> consiste em um plano cartesiano com dois eixos (x e y) perpendiculares entre si e que se cruzam na origem
![Page 26: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/26.jpg)
Sistema de Referência da Tela
Sistema de Referência da Tela (SRT) -> no SRT a origem fica no canto superior esquerdo do monitor
![Page 27: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/27.jpg)
Definições modelos são criados independentes do
dispositivo windows ou janela de seleção --> é a
área do universo que delimita a região de interesse do usuário em um dado instante
viewport ou janela de exibição --> define a área do monitor onde desejamos exibir o conteúdo da window
![Page 28: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/28.jpg)
Mapeamento SRU --> SRT
![Page 29: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/29.jpg)
Funções de conversão SRU para SRT void glViewport(
GLint x, GLint y, GLsizei largura, GLsizei altura);
void gluOrtho2d(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top)
![Page 30: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/30.jpg)
7.2 Visualização Tridimensional
Câmera Sintética Projeção Funções OpenGL
![Page 31: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/31.jpg)
Visualização Tridimensional
Quando se trabalha em três dimensões, o SRU (Sistema de Referência do Universo) passa a ser composto por três eixos ortogonais entre si (x, y e z) e pela origem (0.0, 0.0, 0.0)
![Page 32: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/32.jpg)
Visualização Tridimensional
Projeção: é a operação de obter representações bidimensionais de objetos tridimensionais
Raios de projeção (segmentos de reta) chamados projetantes
Plano de projeção
![Page 33: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/33.jpg)
Projeções Geométricas Planares Projeção Paralela Ortográfica --> as
projetantes são paralelas entre si, passam pelos pontos qeu definem os objetos e interseccionam o plano com um ângulo de 90º
Projeção Perspectiva --> as projetantes emanam de um único ponto que está a uma distancia finita do plano de projeção e passam pelos pontos que definem um objeto
![Page 34: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/34.jpg)
Funções OpenGL void gluLookAt() --> permite
especificar a posição e a orientação da câmera sintética ou observador virtual
void gluPerspective() --> utilizada para estabelecer a projeção perspectiva
void glOrtho() --> função utilizada para estabelecer projeção ortográfica
![Page 35: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/35.jpg)
Funções OpenGL void glLoadIdentity(void) --> função utilizada
para inicializar o sistema de coordenadas (carrega a matriz identidade)
void glMatrixMode(GLenum mode) --> permite selecionar com qual matriz será trabalhado
GL_MODELVIEW --> seleciona a matriz do modelo (de modelagem e transformação)
GL_PROJECTION --> seleciona a matriz de projeção GL_TEXTURE --> seleciona a matriz de textura
![Page 36: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/36.jpg)
Funções GLUT
void glutWireCube(GLdouble tamanho) --> função da biblioteca GLUT responsável pelo traçado de um cubo
![Page 37: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/37.jpg)
8 – Desenhos bidimensionais
8.1 Primitivas Gráficas 8.2 Cores e Estilos de Traçados de
Primitivas 8.3 Exibição de Texto 8.4 Desenhos de Curvas
Paramétricas
![Page 38: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/38.jpg)
8.1 - Primitivas Gráficas
Primitivas gráficas consistem nos elementos básicos que compõem um desenho, tais como pontos, segmentos de reta e círculos
![Page 39: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/39.jpg)
Primitivas Gráficas
vértices objetos cenas modelos
![Page 40: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/40.jpg)
Desenho de primitivas
glBegin(<argumento>); // lista de vérticesglEnd();
onde <argumento>determina qual objeto será desenhado
![Page 41: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/41.jpg)
Primitivas Gráficas em OpenGL (valores usados em <argumento>) GL_POINTS – desenha pontos GL_LINES – desenha linhas GL_LINE_STRIP – desenha segmentos de linhas
conectados GL_LINE_LOOP – desenha segmentos de linhas
conectados, unindo o primeiro ao último GL_POLYGON – desenha um polígono GL_TRIANGLES – desenha um triângulo GL_TRIANGLES_STRIP – desenha um triângulos
conectados GL_TRIANGLES_FAN – desenha triângulos a partir de um
ponto central GL_QUADS – desenha quadriláteros GL_QUADS_STRIP – desenha quadriláteros conectados
![Page 42: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/42.jpg)
![Page 43: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/43.jpg)
Exemplos
glBegin(GL_LINES); glVertex2f(12.0f, 12.0f); glVertex2f(100.5f, 100.5f);glEnd();
Desenha uma linha entre os dois vértices
![Page 44: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/44.jpg)
8.2 Cores e Estilos de Traçado de Primitivas
Primitivas podem ser desenhadas com diversas aparências como: cores, estilos e padrões diferentes
![Page 45: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/45.jpg)
Exemplo de Funções
Alteração do tamanho dos pontos void glPointSize(GLfloat tamanho)Linhas: alteração de cor, espessura
e estilo void glLineWidth(GLfloat largura)
![Page 46: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/46.jpg)
8.3 Exibição de Texto Não suportado diretamente pela
OpenGL, porém suportado pela GLUT Suporta dois tipos de fontes de
caracteres: strokes (segmentos de reta) -->mais
flexíveis (podem ser escaladas e rotacionadas)
bitmap (formando por imagens que representam caracteres) --> mais rápidas para serem exibidas
![Page 47: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/47.jpg)
Caracteres – bitmap
void glutBitmapCharacter(void *font, int character), onde: font: define o tamanho da fonte caracter: define o caracter
![Page 48: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/48.jpg)
Constantes para tipos de fontes
GLUT_BITMAP_8_BY_13 GLUT_BITMAP_9_BY_15 GLUT_BITMAP_TIMES_ROMAN_10 GLUT_BITMAP_TIMES_ROMAN_24 GLUT_BITMAP_HELVETICA_10 GLUT_BITMAP_HELVETICA_12 GLUT_BITMAP_HELVETICA_18
![Page 49: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/49.jpg)
Posicionamento
void glRasterPos2f(x,y)
![Page 50: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/50.jpg)
Exibição de caracteres usando font stroke
void glutStrokeCharacter(void *font, int caracter), onde font: define o nome da fonte
(GLUT_STROKE_ROMAN e GLUT_STROKE_MONO_ROMAN)
caractere: define o código ASCII do caractere a ser exibido
![Page 51: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/51.jpg)
9 – Transformações Geométricas
Translação Escala Rotação
![Page 52: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/52.jpg)
Translação
void glTranslate(GLfloat tx, GLfloat ty, GLfloat tz)
![Page 53: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/53.jpg)
Escala
void glScale(GLfloat ex, GLfloat ey, GLfloat ez)
![Page 54: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/54.jpg)
Rotação void glRotate(GLfloat ângulo,
GLfloat x, GLfloat y, GLfloat z) onde: ângulo: é o ângulo de rotação
Obs: no caso de rotação em 2D, a rotação é sempre feita em torno do eixo z (usar (0,0,1) para (x,y,z) respectivamente)
![Page 55: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/55.jpg)
Rotação
ângulo positivo --> rotação feita no sentido anti-horário
ângulo negativo --> rotação feita no sentido horário
![Page 56: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/56.jpg)
Matriz de Transformação matrizes com coordenadas homogêneas matriz de transformação corrente glLoadIdentity --> faz com que a
matriz de transformação corrente seja inicializada com a matriz identidade, indicando que nenhuma transformação foi aplicada
glMatrixMode com parâmetro GL_MODELVIEW
![Page 57: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/57.jpg)
Escopo das Transformações
pilha de matrizes de transformação
void glPushMatrix(void) void glPopMatrix(void)
![Page 58: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/58.jpg)
10 - Animação
Introdução Animação em 2D Animação em 3D
![Page 59: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/59.jpg)
Conceitos básicos
animação tradicional animação por computador taxa de exibição de imagens
(frame rate)
![Page 60: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/60.jpg)
Use de dois buffers glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB)
glutSwapBuffers --> troca os buffers de exibição e desenho
![Page 61: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/61.jpg)
Animação em 2D void glutTimerFunc(unsigned int msecs, void
(*func)(int value), int value)
// Registra a função callback que será chamada a cada intervalo de tempo
glutTimerFunc(150, Anima, 1)
void Anima(int value) { ... glutPostRedisplay(); glutTimerFunc(150, Anima, 1);}
![Page 62: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/62.jpg)
11 – Operações de Zoom e Pan
![Page 63: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/63.jpg)
12 – Imagens em OpenGL
![Page 64: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/64.jpg)
13 – Desenhos Tridimensionais
Primitivas Gráficas de 3D Objetos Predefinidos da GLUT Carregando e Desenhando Objetos Desenhando Superfícies
Paramétricas
![Page 65: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/65.jpg)
14 - Realismo
Conceitos fonte de luz idéia de iluminação
![Page 66: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/66.jpg)
Conceitos
wireframe sólidos faces frontais faces traseiras objetos oclusos
![Page 67: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/67.jpg)
GL_CULL_FACE
variável de estado: GL_CULL_FACE
![Page 68: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/68.jpg)
Objetos
objetos convexos: exemplos: cubos, cilindros, esferas,
cones objetos não-convexos (côncavos)
exemplos: torus (toróide)
algoritmo de remoção de faces
![Page 69: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/69.jpg)
Z-Buffer
z-buffer -> algoritmo de remoção de superfícies escondidas
![Page 70: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/70.jpg)
Fontes de Luz Um modelo de iluminação em
Computação Gráfica define a natureza da luz que emana de uma fonte e sua interação com todos os objetos de uma cena. A natureza da luz diz respeito à fontes de luz utilizada. Geralmente, três tipos de fontes de luz podem ser incluídas em uma cena 3D: pontual, direcional e spot.
![Page 71: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/71.jpg)
Fontes de Luz
fonte de luz pontual: fonte de luz direcional: fonte de luz tipo spot:
![Page 72: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/72.jpg)
Modelos de Reflexão
luz ambiente reflexão difusa reflexão especula
![Page 73: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/73.jpg)
Modelos de Tonalização (shading)
Modelos flat shading modelo de Gouraud
![Page 74: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/74.jpg)
14.4 Vetores Normais
Um vetor normal a uma face, ou superfície, é um vetor perpendicular a essa face.
vetor unitário produto vetorial
![Page 75: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/75.jpg)
Vetor Normal
void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
![Page 76: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/76.jpg)
14.5 Descrição de Cores
![Page 77: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/77.jpg)
14.5.1 Conceitos Descrição das cores A cor é um fenômeno "psicofísico", que
depende da presença de luz no ambiente: se não há luz, não é possível enxergar cores
percepção de cor depende da física da luz – considerada
energia eletromagnética – e sua interação com os materiais físicos
interpretação do fenômeno resultante pelo sistema visual humano
![Page 78: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/78.jpg)
Conceitos
raio de luz:
![Page 79: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/79.jpg)
Sistema Visual Humano
faixa visível do espectro eletromagnético (380 a 750 nm)
luz monocromática luz cromática (colorida)
![Page 80: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/80.jpg)
Sistema Visual Humano
Na retina existem os: cones – são sensíveis a energia em
todo espectro visívelazuisverdesvermelhos
bastonetes – são sensíveis a intensidade luminosa
![Page 81: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/81.jpg)
Sistema Visual sensação de cor espaço de representação de cores
tridimensional modelos de cor
YIQ (padrão NTSC) YUV CMY (Cyan, Magenta e Yellow) RGB (Red, Green, Blue)
![Page 82: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/82.jpg)
14.5.2 Funções OpenGL
O modelo de cor adotado em OpenGL é o RGB ou RGBA (alpha – utilizado quando se está trabalhando com blending – o alpha especifica a opacidade)
![Page 83: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/83.jpg)
Modelo de cores
color buffer 24 bits por pixel ( 8 bits para R, G
e B ) tabela de cores (look-up table)
![Page 84: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/84.jpg)
Funções OpenGL void glClear(GL_COLOR_BUFFER_BIT)Limpa o conteúdo do framebuffer void glClearColor(
GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
Especifica a cor usada por glClear (a cor default é (0.0, 0.0, 0.0) – preta)
![Page 85: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/85.jpg)
Funções OpenGL
void glColor3f( GLfloat red, GLfloat green, GLfloat blue)
![Page 86: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/86.jpg)
14.6 Uso de Múltiplas Fontes de Luz
![Page 87: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/87.jpg)
14.7 Materiais
![Page 88: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/88.jpg)
14.8 Sala 3D
![Page 89: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/89.jpg)
15 – Blending (mistura)
alpha – utilizado quando se está trabalhando com blending – o alpha especifica a opacidade
1.0 – cor totalmente opaca 0.0 – cor é totalmente
transparente
![Page 90: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/90.jpg)
15.1 Funções de Mistura
![Page 91: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/91.jpg)
Transparência
![Page 92: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/92.jpg)
Efeitos Atmosféricos
função neblina
![Page 93: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/93.jpg)
Suavização de Linhas e Polígonos
aliasing
![Page 94: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/94.jpg)
16 – Mapeamento de Texturas
Texturas Unidimensionais Texturas Bidimensionais
![Page 95: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/95.jpg)
17 – Técnicas para Otimização do Rendering
![Page 96: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/96.jpg)
18 - Buffers
Um buffer em OpenGL nada mais pe do que uma área de memória onde é armazenada uma matriz de valores, que, por sua vez correspondem aos pixels de uma imagem
![Page 97: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/97.jpg)
Buffers - Tipos Color Buffer (ou buffer de cor) --> responsável
por armazenar informações de cor (RGBA) para cada pixel
Depth Buffer (ou buffer de profundidade ou z-buffer) --> armazena a distância de cada pixel ao observador
Stencil Buffer (ou buffer de estêncil) --> fornecem opções para restringir ou bloquear o desenho na tela, de acordo com certas condições.
Accumulation Buffer (ou buffer de acumulação) --> pode ser visto como um buffer de cor com maior precisão, em que é possível combinar várias imagens em uma só, de várias formas diferentes
![Page 98: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/98.jpg)
Função glutInitDisplayMode void glutInitDisplayMode(unsigned int
mode)onde mode: GLUT_RGB, GLUT_RGBA ou GLUT_INDEX para
o modelo de cor; GLUT_SINGLE ou GLUT_DOUBLE para utilização de um ou dois buffers; GLUT_ACUM, GLUT_ALPHA, GLUT_DEPTH, GLUT_STENCIL, GLUT_MULTISAMPLE, GLUT_STEREO, GLUT_LUMINANCE
![Page 99: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/99.jpg)
Função glutInitDisplayMode
Especifica o modelo de cor, a utilização de single ou double-buffer e quais buffers OpenGL serão utilizados na janela GLUT que será aberta.
![Page 100: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/100.jpg)
Funções para inicialização de buffers void glClear(GLbitfield mask) -->
função para limpar os buffers cujos identificadores são passados como parâmetros mask
GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BITGL_STENCIL_BUFFER_BITGL_ACCUM_BUFFER_BIT
![Page 101: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/101.jpg)
18.2 Color Buffer
GL_COLOR_BUFFER_BIT
![Page 102: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/102.jpg)
Função glClearColor
void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) --> especifica qual cor será usada para limpar o color buffer
![Page 103: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/103.jpg)
18.3 Depth Buffer
GL_DEPTH_BUFFER_BIT void glClearDepth(GLclampf
depth), onde depth (profundidade) varia de 0.0 (mín) a 1.0 (máx)
![Page 104: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/104.jpg)
18.4 Stencil Buffer
GL_STENCIL_BUFFER_BIT
![Page 105: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/105.jpg)
18.5 Accumulation Buffer
GL_ACCUM_BUFFER_BIT
![Page 106: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/106.jpg)
19 – Seleção de Objetos
Considerações Iniciais Modo de Seleção Modo de Feedback
![Page 107: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/107.jpg)
Introdução
Seleção de objetos
![Page 108: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/108.jpg)
Modo de Seleção
void glSelectBuffer(GLsizei size, GLuint *buffer)
pilha de nomes GLint glRenderMode(GLenum
mode)onde mode: GL_RENDER, GL_SELECT
ou GL_FEEDBACK
![Page 109: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/109.jpg)
Modo de Seleção
void glInitNames(void) void glPushName(GLuint name)
![Page 110: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/110.jpg)
Modo de feedback void glFeedbackBuffer(GLSizei size, GLenum
type, GLfloat *buffer),
onde:size: indica o tamanho do vetortype: informa o tipo da informação
desejadabuffer: aponta ao inicio do vetor
![Page 111: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/111.jpg)
20 – OpenGL e Outras linguagens de Programação
C++ Java C# Python
![Page 112: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/112.jpg)
21 – Programação de Shaders
OpenGL Shading Language
![Page 113: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/113.jpg)
Apêndice A – Guia Rápido de Referência A.1 A.2 A.3 A.4 A.5 A.6 A.7 A.8 A.9
![Page 114: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/114.jpg)
Apêndice A – Guia Rápido de Referência A.10 A.11 A.12 A.13 A.14 A.15 A.16 A.17 A.18
![Page 115: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/115.jpg)
Apêndice B – Biblioteca de Estruturas e Funções Auxiliares
B.1 B.2 B.3 B.4 B.5
![Page 116: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/116.jpg)
A.1 Funções GLUT de Inicialização
![Page 117: OpenGL – Uma abordagem prática e objetiva](https://reader030.fdocument.pub/reader030/viewer/2022033012/56812a45550346895d8d7a37/html5/thumbnails/117.jpg)
Apêndice B – Biblioteca de Estruturas e Funções Auxiliares
B.6 B.7 B.8 B.9