OpenGL – Uma abordagem prática e objetiva

Preview:

DESCRIPTION

OpenGL – Uma abordagem prática e objetiva. Última atualização: 16-nov-2008. 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. Introdução. - PowerPoint PPT Presentation

Citation preview

OpenGL – Uma abordagem prática e objetiva

Última atualização: 16-nov-2008

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

Introdução

aplicações gráficas processamento gráfico

Pipeline

A palavra pipeline é usada para descrever um processo composto de duas ou mais etapas para geração de uma imagem

Framebuffer

framebuffer – memória do dispositivo gráfico

2 - Instalação

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

3 – Primeiros passos em OpenGL

Função Desenha Função Teclado Função Inicializa Função Principal

Primeiros passos em OpenGL

Veja exemplo em: http://www.novatec.com.br/livros/opengl/

4 – Padronização dos Nomes das Funções e Tipos de Dados

Funções - Exemplos

void glColor(GLint red, GLint green, GLint blue);

void glColor3d(GLdouble red, GLdouble green, GLdouble blue)

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

5 – GLUT – GL Utility Toolkit

Responsável pelo gerenciamento de janelas e tratamento de eventos

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

Criação da Janela

// Cria a janela passando como argumento o título da mesma

glutCreateWindow(char *string);

Funções para tratamento de eventos glutDisplayFunc glutReshapeFunc glutKeyboardFunc glutSpecialFunc glutMouseFunc glutMotionFunc glutPassiveMotionFunc glutIdleFunc

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

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

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

Variáveis de estado

Variáveis de estado relacionadas são agrupadas em um atributo

void glPushAttrib(GLbitfield mask)

void glPopAttrib(void)

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)

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

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.

7.1 Visualização Bidimensional

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

Sistema de Referência da Tela

Sistema de Referência da Tela (SRT) -> no SRT a origem fica no canto superior esquerdo do monitor

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

Mapeamento SRU --> SRT

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)

7.2 Visualização Tridimensional

Câmera Sintética Projeção Funções OpenGL

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)

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

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

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

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

Funções GLUT

void glutWireCube(GLdouble tamanho) --> função da biblioteca GLUT responsável pelo traçado de um cubo

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

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

Primitivas Gráficas

vértices objetos cenas modelos

Desenho de primitivas

glBegin(<argumento>); // lista de vérticesglEnd();

onde <argumento>determina qual objeto será desenhado

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

Exemplos

glBegin(GL_LINES); glVertex2f(12.0f, 12.0f); glVertex2f(100.5f, 100.5f);glEnd();

Desenha uma linha entre os dois vértices

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

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)

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

Caracteres – bitmap

void glutBitmapCharacter(void *font, int character), onde: font: define o tamanho da fonte caracter: define o caracter

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

Posicionamento

void glRasterPos2f(x,y)

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

9 – Transformações Geométricas

Translação Escala Rotação

Translação

void glTranslate(GLfloat tx, GLfloat ty, GLfloat tz)

Escala

void glScale(GLfloat ex, GLfloat ey, GLfloat ez)

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)

Rotação

ângulo positivo --> rotação feita no sentido anti-horário

ângulo negativo --> rotação feita no sentido horário

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

Escopo das Transformações

pilha de matrizes de transformação

void glPushMatrix(void) void glPopMatrix(void)

10 - Animação

Introdução Animação em 2D Animação em 3D

Conceitos básicos

animação tradicional animação por computador taxa de exibição de imagens

(frame rate)

Use de dois buffers glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB)

glutSwapBuffers --> troca os buffers de exibição e desenho

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

11 – Operações de Zoom e Pan

12 – Imagens em OpenGL

13 – Desenhos Tridimensionais

Primitivas Gráficas de 3D Objetos Predefinidos da GLUT Carregando e Desenhando Objetos Desenhando Superfícies

Paramétricas

14 - Realismo

Conceitos fonte de luz idéia de iluminação

Conceitos

wireframe sólidos faces frontais faces traseiras objetos oclusos

GL_CULL_FACE

variável de estado: GL_CULL_FACE

Objetos

objetos convexos: exemplos: cubos, cilindros, esferas,

cones objetos não-convexos (côncavos)

exemplos: torus (toróide)

algoritmo de remoção de faces

Z-Buffer

z-buffer -> algoritmo de remoção de superfícies escondidas

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.

Fontes de Luz

fonte de luz pontual: fonte de luz direcional: fonte de luz tipo spot:

Modelos de Reflexão

luz ambiente reflexão difusa reflexão especula

Modelos de Tonalização (shading)

Modelos flat shading modelo de Gouraud

14.4 Vetores Normais

Um vetor normal a uma face, ou superfície, é um vetor perpendicular a essa face.

vetor unitário produto vetorial

Vetor Normal

void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)

14.5 Descrição de Cores

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

Conceitos

raio de luz:

Sistema Visual Humano

faixa visível do espectro eletromagnético (380 a 750 nm)

luz monocromática luz cromática (colorida)

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

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)

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)

Modelo de cores

color buffer 24 bits por pixel ( 8 bits para R, G

e B ) tabela de cores (look-up table)

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)

Funções OpenGL

void glColor3f( GLfloat red, GLfloat green, GLfloat blue)

14.6 Uso de Múltiplas Fontes de Luz

14.7 Materiais

14.8 Sala 3D

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

15.1 Funções de Mistura

Transparência

Efeitos Atmosféricos

função neblina

Suavização de Linhas e Polígonos

aliasing

16 – Mapeamento de Texturas

Texturas Unidimensionais Texturas Bidimensionais

17 – Técnicas para Otimização do Rendering

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

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

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

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.

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

18.2 Color Buffer

GL_COLOR_BUFFER_BIT

Função glClearColor

void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) --> especifica qual cor será usada para limpar o color buffer

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)

18.4 Stencil Buffer

GL_STENCIL_BUFFER_BIT

18.5 Accumulation Buffer

GL_ACCUM_BUFFER_BIT

19 – Seleção de Objetos

Considerações Iniciais Modo de Seleção Modo de Feedback

Introdução

Seleção de objetos

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

Modo de Seleção

void glInitNames(void) void glPushName(GLuint name)

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

20 – OpenGL e Outras linguagens de Programação

C++ Java C# Python

21 – Programação de Shaders

OpenGL Shading Language

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

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

Apêndice B – Biblioteca de Estruturas e Funções Auxiliares

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

B.6 B.7 B.8 B.9

Recommended