Open GL Uma abordagem prtica e objetiva ltima
Open. GL – Uma abordagem prática e objetiva Última atualização: 16 -nov-2008
1 - Introdução n 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
Introdução n n aplicações gráficas processamento gráfico
Pipeline n A palavra pipeline é usada para descrever um processo composto de duas ou mais etapas para geração de uma imagem
Framebuffer n framebuffer – memória do dispositivo gráfico
2 - Instalação
No DEV-C++ n n n <alt>+<P> --> abre o menu Projeto Selecionar Opções de Projeto Selecione a aba Parâmetros e em Linker verifique: -lglut 32 -lopengl 32 -lglu 32 -lwinmm -lgdi 32
3 – Primeiros passos em Open. GL n n Função Desenha Teclado Inicializa Principal
Primeiros passos em Open. GL n Veja exemplo em: http: //www. novatec. com. br/livros/open gl/
4 – Padronização dos Nomes das Funções e Tipos de Dados
Funções - Exemplos n n void gl. Color(GLint red, GLint green, GLint blue); void gl. Color 3 d(GLdouble red, GLdouble green, GLdouble blue)
Tipos de dados Open. GL Tipo de dado Open. GL 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
5 – GLUT – GL Utility Toolkit n Responsável pelo gerenciamento de janelas e tratamento de eventos
GLUT - Funções // Especifica a posição inicial da janela GLUT glut. Init. Window. Position(int x, int y); // Especifica o tamanho inicial em pixels da janela GLUT glut. Init. Window. Size(int largura, int altura);
Criação da Janela // Cria a janela passando como argumento o título da mesma glut. Create. Window(char *string);
Funções para tratamento de eventos n n n n glut. Display. Func glut. Reshape. Func glut. Keyboard. Func glut. Special. Func glut. Mouse. Func glut. Motion. Func glut. Passive. Motion. Func glut. Idle. Func
6 – Máquinas de Estado n n 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
Máquina de estados n n n Open. GL é 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
Funções para alteração de estado n void gl. Enable(GLenum cap) void gl. Disable(GLenum cap) n GLBoolean gl. Is. Enabled(GLenum cap) n --> verifica o estado que se encontra uma propriedade
Variáveis de estado relacionadas são agrupadas em um atributo n n void gl. Push. Attrib(GLbitfield mask) void gl. Pop. Attrib(void)
7 – Definição do Espaço de Trabalho n n n modelo coordenadas geométricas sistema de referencia Sistema de Referência do Universo (SRU) Sistema de Referência da Tela (SRT)
Definições n n n 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
Definições n n coordenadas geométricas sistema de referência -> define uma origem em relação a qual todos os posicionamentos do universo são descritos.
7. 1 Visualização Bidimensional
Sistema de Referencia do Universo n 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
Sistema de Referência da Tela n Sistema de Referência da Tela (SRT) -> no SRT a origem fica no canto superior esquerdo do monitor
Definições n n n 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
Mapeamento SRU --> SRT
Funções de conversão SRU para SRT n n void gl. Viewport( GLint x, GLint y, GLsizei largura, GLsizei altura); void glu. Ortho 2 d( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top)
7. 2 Visualização Tridimensional n n n Câmera Sintética Projeção Funções Open. GL
Visualização Tridimensional n 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)
Visualização Tridimensional n n n 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
Projeções Geométricas Planares n n 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
Funções Open. GL n n n void glu. Look. At() --> permite especificar a posição e a orientação da câmera sintética ou observador virtual void glu. Perspective() --> utilizada para estabelecer a projeção perspectiva void gl. Ortho() --> função utilizada para estabelecer projeção ortográfica
Funções Open. GL n n void gl. Load. Identity(void) --> função utilizada para inicializar o sistema de coordenadas (carrega a matriz identidade) void gl. Matrix. Mode(GLenum mode) --> permite selecionar com qual matriz será trabalhado n n n 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
Funções GLUT n void glut. Wire. Cube(GLdouble tamanho) -> função da biblioteca GLUT responsável pelo traçado de um cubo
8 – Desenhos bidimensionais n n 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
8. 1 - Primitivas Gráficas n Primitivas gráficas consistem nos elementos básicos que compõem um desenho, tais como pontos, segmentos de reta e círculos
Primitivas Gráficas n n vértices objetos cenas modelos
Desenho de primitivas gl. Begin(<argumento>); // lista de vértices gl. End(); onde <argumento>determina qual objeto será desenhado
Primitivas Gráficas em Open. GL (valores usados em <argumento>) n n n n n 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
Exemplos gl. Begin(GL_LINES); gl. Vertex 2 f(12. 0 f, 12. 0 f); gl. Vertex 2 f(100. 5 f, 100. 5 f); gl. End(); Desenha uma linha entre os dois vértices
8. 2 Cores e Estilos de Traçado de Primitivas n Primitivas podem ser desenhadas com diversas aparências como: cores, estilos e padrões diferentes
Exemplo de Funções Alteração do tamanho dos pontos n void gl. Point. Size(GLfloat tamanho) Linhas: alteração de cor, espessura e estilo n void gl. Line. Width(GLfloat largura)
8. 3 Exibição de Texto n n Não suportado diretamente pela Open. GL, porém suportado pela GLUT Suporta dois tipos de fontes de caracteres: n n 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
Caracteres – bitmap n void glut. Bitmap. Character(void *font, int character), onde: n n font: define o tamanho da fonte caracter: define o caracter
Constantes para tipos de fontes n n n n 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
Posicionamento n void gl. Raster. Pos 2 f(x, y)
Exibição de caracteres usando font stroke n void glut. Stroke. Character(void *font, int caracter), onde n n 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
9 – Transformações Geométricas n n n Translação Escala Rotação
Translação n void gl. Translate(GLfloat tx, GLfloat ty, GLfloat tz)
Escala n void gl. Scale(GLfloat ex, GLfloat ey, GLfloat ez)
Rotação n n void gl. Rotate(GLfloat ângulo, GLfloat x, GLfloat y, GLfloat z) onde: ângulo: é o ângulo de rotação Obs: no caso de rotação em 2 D, a rotação é sempre feita em torno do eixo z (usar (0, 0, 1) para (x, y, z) respectivamente)
Rotação n n ângulo positivo --> rotação feita no sentido anti-horário ângulo negativo --> rotação feita no sentido horário
Matriz de Transformação n n matrizes com coordenadas homogêneas matriz de transformação corrente gl. Load. Identity --> faz com que a matriz de transformação corrente seja inicializada com a matriz identidade, indicando que nenhuma transformação foi aplicada gl. Matrix. Mode com parâmetro GL_MODELVIEW
Escopo das Transformações n n n pilha de matrizes de transformação void gl. Push. Matrix(void) void gl. Pop. Matrix(void)
10 - Animação n n n Introdução Animação em 2 D Animação em 3 D
Conceitos básicos n n n animação tradicional animação por computador taxa de exibição de imagens (frame rate)
Use de dois buffers n n glut. Init. Display. Mode(GLUT_DOUBLE | GLUT_RGB) glut. Swap. Buffers --> troca os buffers de exibição e desenho
Animação em 2 D n void glut. Timer. Func(unsigned int msecs, void (*func)(int value), int value) // Registra a função callback que será chamada a cada intervalo de tempo glut. Timer. Func(150, Anima, 1) void Anima(int value) {. . . glut. Post. Redisplay(); glut. Timer. Func(150, Anima, 1); }
11 – Operações de Zoom e Pan
12 – Imagens em Open. GL
13 – Desenhos Tridimensionais n n Primitivas Gráficas de 3 D Objetos Predefinidos da GLUT Carregando e Desenhando Objetos Desenhando Superfícies Paramétricas
14 - Realismo n n n Conceitos fonte de luz idéia de iluminação
Conceitos n n n wireframe sólidos faces frontais faces traseiras objetos oclusos
GL_CULL_FACE n variável de estado: GL_CULL_FACE
Objetos n objetos convexos: n n objetos não-convexos (côncavos) n n exemplos: cubos, cilindros, esferas, cones exemplos: torus (toróide) algoritmo de remoção de faces
Z-Buffer n z-buffer -> algoritmo de remoção de superfícies escondidas
Fontes de Luz n 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 3 D: pontual, direcional e spot.
Fontes de Luz n n n fonte de luz pontual: fonte de luz direcional: fonte de luz tipo spot:
Modelos de Reflexão n n n luz ambiente reflexão difusa reflexão especula
Modelos de Tonalização (shading) n n n Modelos flat shading modelo de Gouraud
14. 4 Vetores Normais n n n Um vetor normal a uma face, ou superfície, é um vetor perpendicular a essa face. vetor unitário produto vetorial
Vetor Normal n void gl. Normal 3 f(GLfloat nx, GLfloat ny, GLfloat nz)
14. 5 Descrição de Cores
14. 5. 1 Conceitos n n n 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 n n 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
Conceitos n raio de luz:
Sistema Visual Humano n n n faixa visível do espectro eletromagnético (380 a 750 nm) luz monocromática luz cromática (colorida)
Sistema Visual Humano n Na retina existem os: n n cones – são sensíveis a energia em todo espectro visível azuis verdes vermelhos bastonetes – são sensíveis a intensidade luminosa
Sistema Visual n n n sensação de cor espaço de representação de cores tridimensional modelos de cor n n YIQ (padrão NTSC) YUV CMY (Cyan, Magenta e Yellow) RGB (Red, Green, Blue)
14. 5. 2 Funções Open. GL n O modelo de cor adotado em Open. GL é o RGB ou RGBA (alpha – utilizado quando se está trabalhando com blending – o alpha especifica a opacidade)
Modelo de cores n n n color buffer 24 bits por pixel ( 8 bits para R, G e B ) tabela de cores (look-up table)
Funções Open. GL void gl. Clear(GL_COLOR_BUFFER_BIT) Limpa o conteúdo do framebuffer n void gl. Clear. Color( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) Especifica a cor usada por gl. Clear (a cor default é (0. 0, 0. 0) – preta) n
Funções Open. GL n void gl. Color 3 f( GLfloat red, GLfloat green, GLfloat blue)
14. 6 Uso de Múltiplas Fontes de Luz
14. 7 Materiais
14. 8 Sala 3 D
15 – Blending (mistura) n n n alpha – utilizado quando se está trabalhando com blending – o alpha especifica a opacidade 1. 0 – cor totalmente opaca 0. 0 – cor é totalmente transparente
15. 1 Funções de Mistura
Transparência
Efeitos Atmosféricos n função neblina
Suavização de Linhas e Polígonos n aliasing
16 – Mapeamento de Texturas n n Texturas Unidimensionais Texturas Bidimensionais
17 – Técnicas para Otimização do Rendering
18 - Buffers Um buffer em Open. GL 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
Buffers - Tipos n n 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 zbuffer) --> 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
Função glut. Init. Display. Mode void glut. Init. Display. Mode(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 n
Função glut. Init. Display. Mode Especifica o modelo de cor, a utilização de single ou double-buffer e quais buffers Open. GL serão utilizados na janela GLUT que será aberta.
Funções para inicialização de buffers void gl. Clear(GLbitfield mask) --> função para limpar os buffers cujos identificadores são passados como parâmetros mask GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT GL_STENCIL_BUFFER_BIT GL_ACCUM_BUFFER_BIT n
18. 2 Color Buffer n GL_COLOR_BUFFER_BIT
Função gl. Clear. Color n void gl. Clear. Color(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) --> especifica qual cor será usada para limpar o color buffer
18. 3 Depth Buffer n n GL_DEPTH_BUFFER_BIT void gl. Clear. Depth(GLclampf depth), onde depth (profundidade) varia de 0. 0 (mín) a 1. 0 (máx)
18. 4 Stencil Buffer n GL_STENCIL_BUFFER_BIT
18. 5 Accumulation Buffer n GL_ACCUM_BUFFER_BIT
19 – Seleção de Objetos n n n Considerações Iniciais Modo de Seleção Modo de Feedback
Introdução n Seleção de objetos
Modo de Seleção void gl. Select. Buffer(GLsizei size, GLuint *buffer) n pilha de nomes n GLint gl. Render. Mode(GLenum mode) onde mode: GL_RENDER, GL_SELECT ou GL_FEEDBACK n
Modo de Seleção n n void gl. Init. Names(void) void gl. Push. Name(GLuint name)
Modo de feedback n void gl. Feedback. Buffer(GLSizei size, GLenum type, GLfloat *buffer), onde: size: indica o tamanho do vetor type: informa o tipo da informação desejada buffer: aponta ao inicio do vetor
20 – Open. GL e Outras linguagens de Programação n n C++ Java C# Python
21 – Programação de Shaders n Open. GL Shading Language
Apêndice A – Guia Rápido de Referência n n n n n A. 1 A. 2 A. 3 A. 4 A. 5 A. 6 A. 7 A. 8 A. 9
Apêndice A – Guia Rápido de Referência n n n n n A. 10 A. 11 A. 12 A. 13 A. 14 A. 15 A. 16 A. 17 A. 18
Apêndice B – Biblioteca de Estruturas e Funções Auxiliares n n n B. 1 B. 2 B. 3 B. 4 B. 5
A. 1 Funções GLUT de Inicialização
Apêndice B – Biblioteca de Estruturas e Funções Auxiliares n n B. 6 B. 7 B. 8 B. 9
- Slides: 117