A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

OpenGL – Uma abordagem prática e objetiva

Apresentações semelhantes


Apresentação em tema: "OpenGL – Uma abordagem prática e objetiva"— Transcrição da apresentação:

1 OpenGL – Uma abordagem prática e objetiva
Última atualização: 16-nov-2008

2 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

3 Introdução aplicações gráficas processamento gráfico

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

5 Framebuffer framebuffer – memória do dispositivo gráfico

6 2 - Instalação

7 -lglut32 -lopengl32 -lglu32 -lwinmm -lgdi32
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

8 3 – Primeiros passos em OpenGL
Função Desenha Função Teclado Função Inicializa Função Principal

9 Primeiros passos em OpenGL
Veja exemplo em:

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

11 Funções - Exemplos void glColor(GLint red, GLint green, GLint blue);
void glColor3d(GLdouble red, GLdouble green, GLdouble blue) componente alpha: define a opacidade da cor

12 Tipos de dados OpenGL Tipo 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

13 5 – GLUT – GL Utility Toolkit
Responsável pelo gerenciamento de janelas e tratamento de eventos

14 GLUT - Funções // Especifica a posição inicial da janela GLUT
glutInitWindowPosition(int x, int y); // Especifica o tamanho inicial em pixels da janela GLUT glutInitWindowSize(int largura, int altura); glutInit (int* argc, char** argv) estabelece ligação com o sistema de janelas Inicialização da(s) janela(s): glutInitDisplayMode (int modo) • em que modo é um OR bit-a-bit de constantes tais como: ♦ GLUT_RGB - modelo de cor ♦ GLUT_DOUBLE - bufferização dupla ♦ GLUT_DEPTH - buffer de profundidade (z-buffer) ♦ GLUT_ACCUM - buffer de acumulação ♦ GLUT_ALPHA - buffer de cores terá componente alfa glutInitWindowPosition (int x, int y) • estabelece a posição inicial do canto superior esquerdo da janela glutInitWindowSize (int width, height) • estabelece o tamanho (em pixels) da janela

15 Criação da Janela // Cria a janela passando como argumento o título da mesma glutCreateWindow(char *string); Criação da(s) janela(s): int glutCreateWindow (char* nome) • cria uma nova janela primária (top-level) • nome é a etiqueta que aparece na barra superior da janela • o número inteiro que é devolvido pela função é usado pela GLUT para identificar a janela

16 Funções para tratamento de eventos
glutDisplayFunc glutReshapeFunc glutKeyboardFunc glutSpecialFunc glutMouseFunc glutMotionFunc glutPassiveMotionFunc glutIdleFunc Callbacks são rotinas que são chamadas para tratar eventos. Para que uma rotina callback ser efetivamente invocada quando um dado evento ocorre, é preciso fazer previamente o seu registro através da função glutXxxFunc (callback) em que Xxx designa uma classe de eventos e callback é o nome da rotina • Por exemplo, o registro da callback designada por Desenho, é feito do seguinte modo: glutDisplayFunc (Desenho);

17 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 OpenGL is a state machine. You put it into various states (or modes) that then remain in effect until you change them OpenGL é uma máquina de estados. Você colocar em vários estado (ou modos) que permanecem em efeito até que você os altere. state variable (ou variável de estado) Após a criação da janela, é costume configurar as variáveis de estado da OpenGL que não mudarão durante a execução do programa. Por exemplo: • cor do fundo • tipo de sombreamento

18 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

19 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

20 Variáveis de estado Variáveis de estado relacionadas são agrupadas em um atributo void glPushAttrib(GLbitfield mask) void glPopAttrib(void)

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

22 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

23 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.

24 7.1 Visualização Bidimensional

25 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

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

27 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

28 Mapeamento SRU --> SRT

29 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) SRU = Sistema de Referência Universal SRT = Sistema de Referencia da Tela

30 7.2 Visualização Tridimensional
Câmera Sintética Projeção Funções OpenGL

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

32 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

33 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

34 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 void gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble near, GLdouble far ); sets up a perspective viewing volume. fovy denes the eld-of-view angle (in degrees) in the y direction. aspect is the aspect ratio used to determine the eld-of-view in the x direction. It is the ratio of x (width) to y (height). near and far dene the near and far clipping planes (as positive distances from the eye point). gluLookAt creates a commonly-used viewing matrix: void gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz ); void glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far), onde: left, right: especificam os limites mínimo e máximo no eixo x buttom, top: especificam os limites mínimo e Maximo no eixo y near, far: especificam os limites mínimos e máximos no eixo z, com valores negativos para o lado oposto da posição do observador

35 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

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

37 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

38 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

39 Primitivas Gráficas vértices objetos cenas modelos
Vértices são pares de coordenadas absolutas (exemplo (xa,ya) indica uma posição em relação à origem (0,0) do sistema de coordenadas) Objetos e cenas criados usando OpenGL consistem em um conjunto de primitivas gráficas simples que são combinadas para formar modelos

40 Desenho de primitivas glBegin(<argumento>); // lista de vértices
glEnd(); onde <argumento>determina qual objeto será desenhado glBegin ( PRIMITIVA ); especificação de vértices, cores, coordenadas de textura, propriedades de material glEnd (); • Entre glBegin() e glEnd() apenas alguns comandos podem ser usados: – glMaterial – glNormal – glTexCoord • Uma vez definido um vértice (glVertex), este é desenhado com as propriedades (cor, material, normal, coordenadas de textura, etc) registradas nas variáveis de estado. • Conclusão: Antes de definir um vértice, há que assegurar que a cor, o material, a normal, etc, têm o valor adequado.

41 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

42

43 Exemplos glBegin(GL_LINES); glVertex2f(12.0f, 12.0f);
glEnd(); Desenha uma linha entre os dois vértices glVertex[234][sifd]

44 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

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

46 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

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

48 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

49 Posicionamento void glRasterPos2f(x,y)

50 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

51 9 – Transformações Geométricas
Translação Escala Rotação As operações que permitem alterar uniformemente o aspecto de um desenho já armazenado no computador são chamados transformações geométricas Três tipos fundamentais de transformações geométricas: translação rotação escala

52 Translação void glTranslate(GLfloat tx, GLfloat ty, GLfloat tz)

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

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

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

56 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 Objetos e as cenas em OpenGL consistem de uma combinação de um conjunto de primitivas gráficas

57 Escopo das Transformações
pilha de matrizes de transformação void glPushMatrix(void) void glPopMatrix(void)

58 10 - Animação Introdução Animação em 2D Animação em 3D

59 Conceitos básicos animação tradicional animação por computador
taxa de exibição de imagens (frame rate)

60 Use de dois buffers glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB) glutSwapBuffers --> troca os buffers de exibição e desenho

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

62 11 – Operações de Zoom e Pan

63 12 – Imagens em OpenGL

64 13 – Desenhos Tridimensionais
Primitivas Gráficas de 3D Objetos Predefinidos da GLUT Carregando e Desenhando Objetos Desenhando Superfícies Paramétricas

65 14 - Realismo Conceitos fonte de luz idéia de iluminação

66 Conceitos wireframe sólidos faces frontais faces traseiras
objetos oclusos

67 GL_CULL_FACE variável de estado: GL_CULL_FACE

68 Objetos objetos convexos: objetos não-convexos (côncavos)
exemplos: cubos, cilindros, esferas, cones objetos não-convexos (côncavos) exemplos: torus (toróide) algoritmo de remoção de faces

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

70 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.

71 Fontes de Luz fonte de luz pontual: fonte de luz direcional:
fonte de luz tipo spot:

72 Modelos de Reflexão luz ambiente reflexão difusa reflexão especula

73 Modelos de Tonalização (shading)
flat shading modelo de Gouraud

74 14.4 Vetores Normais Um vetor normal a uma face, ou superfície, é um vetor perpendicular a essa face. vetor unitário produto vetorial

75 Vetor Normal void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)

76 14.5 Descrição de Cores

77 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

78 Conceitos raio de luz:

79 Sistema Visual Humano faixa visível do espectro eletromagnético (380 a 750 nm) luz monocromática luz cromática (colorida)

80 Sistema Visual Humano Na retina existem os:
cones – são sensíveis a energia em todo espectro visível azuis verdes vermelhos bastonetes – são sensíveis a intensidade luminosa

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

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

83 Modelo de cores color buffer
24 bits por pixel ( 8 bits para R, G e B ) tabela de cores (look-up table)

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

85 Funções OpenGL void glColor3f( GLfloat red, GLfloat green, GLfloat blue)

86 14.6 Uso de Múltiplas Fontes de Luz

87 14.7 Materiais

88 14.8 Sala 3D

89 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

90 15.1 Funções de Mistura

91 Transparência

92 Efeitos Atmosféricos função neblina

93 Suavização de Linhas e Polígonos
aliasing

94 16 – Mapeamento de Texturas
Texturas Unidimensionais Texturas Bidimensionais

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

96 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

97 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

98 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

99 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.

100 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_BIT GL_STENCIL_BUFFER_BIT GL_ACCUM_BUFFER_BIT

101 18.2 Color Buffer GL_COLOR_BUFFER_BIT

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

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

104 18.4 Stencil Buffer GL_STENCIL_BUFFER_BIT

105 18.5 Accumulation Buffer GL_ACCUM_BUFFER_BIT

106 19 – Seleção de Objetos Considerações Iniciais Modo de Seleção
Modo de Feedback

107 Introdução Seleção de objetos

108 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

109 Modo de Seleção void glInitNames(void) void glPushName(GLuint name)

110 Modo de feedback onde: size: indica o tamanho do vetor
void glFeedbackBuffer(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

111 20 – OpenGL e Outras linguagens de Programação
C++ Java C# Python

112 21 – Programação de Shaders
OpenGL Shading Language

113 Apêndice A – Guia Rápido de Referência

114 Apêndice A – Guia Rápido de Referência

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

116 A.1 Funções GLUT de Inicialização

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


Carregar ppt "OpenGL – Uma abordagem prática e objetiva"

Apresentações semelhantes


Anúncios Google