OpenGL. Conceitos Básicos. Waldemar Celes. Tecgraf/PUC-Rio

Documentos relacionados
OpenGL. Parte I: Geometria. Waldemar Celes Departamento de Informática Tecgraf/PUC-Rio

Computação Gráfica Módulo IV OpenGL

OpenGL. Alberto B. Raposo

n À primeira vista: basta desenhar n Uma subrotina para desenhar cada tipo de objeto n Mas... n Como fazer interação? n Como estruturar a cena?

CG 2013/2014 Primeiro Teste LEIC Alameda/Taguspark

OpenGL, GLU e GLUT. GLUT (OpenGL Utility Toolkit) OpenGL. Linguagem. OpenGL. Esqueleto de um programa em PyOpenGL

FUNDAMENTOS E APLICAÇÕES. Luis Valente

Introdução a OpenGL. Renato Rodrigues Oliveira da Silva Danilo Medeiros Eler

Computação Gráfica - OpenGl 02

Introdução ao OpenGL

Revisões. Módulos Sistemas Gráficos e Interação. Filipe Pacheco SGRAI 2017/18 DEI-ISEP 228. Instituto Superior de Engenharia do Porto

Introdução Programando com OpenGL Exemplos. O que é OpenGL? [1]

INTRODUÇÃO A OPENGL. Computação Gráfica

Cap. 4: Janelas, Visores & Recorte Gráfico

Computação Gráfica OpenGl 01

Programação Gráfica Cap 2

- INF Remoção de faces ocultas Aula 21

Computação Gráfica OpenGL 05 3D

Introdução a OpenGL. Profª. Alessandra Martins Coelho

Desenho de uma matriz de retângulos Serve de base para o exercício das cores

Computação Gráfica. Engenharia de Computação. CEFET/RJ campus Petrópolis. Prof. Luis Retondaro. Aula 2. Introdução a OpenGL

CG 2015/2016 Prova de Repescagem LEIC Alameda/Taguspark. 12 de Janeiro de 2016

LAB. 1. Introdução à OpenGL

PROGRAMAÇÃO OPENGL LIVRO: TEORIA DA COMPUTAÇÃO GRÁFICA

OpenGL. Soraia Musse

Transformações geométricas

Conceitos importantes da Computação Gráfica [3]

Computação Gráfica OpenGL 05 3D

Computação Gráfica - 13

Introdução ao OpenGL e à Programação Baseada em Eventos

Introdução à Programação em OpenGL. Prof. Márcio Bueno

OpenGL. Introdução ao OpenGL. Sistemas de Coordenadas. OpenGL 29/04/2010. Profa. M. Cristina Profa. Rosane. Application Programming Interface (API)

OpenGL. Sumário COMPUTAÇÃO GRÁFICA E INTERFACES. Introdução. Introdução. Carlos Carreto

OpenGL. Computação Gráfica ISEL/DEETC/SP Computação Gráfica

2º Exame. Computação Gráfica

Computação Gráfica - 13

Computação Gráfica. 5385: Licenciatura em Engenharia Informática. Cap. 3 Janelas e Visores. Janelas e Visores

INF1339 Computação Gráfica Tridimensional. Waldemar Celes. 10 de Agosto de 2010

Sist. Coordenadas Câmera (SCC)

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Taguspark / Alameda. Primeiro Teste 17 de Março de 2012

Visibilidade. Licenciatura em Engenharia Informática e de Computadores Computação Gráfica. Edward Angel, Cap. 7 Apontamentos CG

CRAb Grupo de Computação Gráfica Departamento de Computação UFC

Rendering de Polígonos. Determinação de Superfícies Visíveis. Back Face Culling. Back Face Culling. Back Face Culling. Back Face Culling.

Introdução à Computação Gráfica. Claudio Esperança Paulo Roma Cavalcanti

Introdução à OpenGL. SCC0250/ Computação Gráfica

Computação Gráfica II

Computação Gráfica. Engenharia de Computação. CEFET/RJ campus Petrópolis. Prof. Luis Retondaro. Aula 6. Projeções

Prof. Fernando V. Paulovich 3 de agosto de SCC Computação Gráca

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Alameda / Taguspark. Terceiro Teste 19 de Maio de 2012

Computação Gráfica - 13

FCG2006 Prova sobre OpenGL e Rastreamento de Raios

Transformações Geométricas

Computação Gráfica. Texturas

Primitivas do OpenGL. Tomás Antônio C. Badan

OpenGL. O que é OpenGL. O Pipeline do OpenGL. Listas de Exposição

Programação Gráfica 2D com OpenGL (Aulas 22, 24 e 25)

UNIVERSIDADE FEDERAL FLUMINENSE Pedro Martins Menezes. Um estudo dos estágios dos pipelines gráficos

Projeções e Visualização

Sistemas de Interfaces com o Usuário e OpenGL (com IUP ou GLUT)

Desenvolvimento de jogos tridimensionais com OpenGL. Bruno Pereira Evangelista

Engenharia Informática Computação Gráfica

Capítulo 3 Primeiros Passos em OpenGL Função Desenha Função Teclado Função Inicializa Programa Principal...

3D no OpenGL. Visualização e Transformações Perspectiva. Transformações do Modelview. Processo

OpenGL Um tutorial. Luis Valente. Instituto de Computação - Universidade Federal Fluminense lvalente@ic.uff.br. Dezembro, 2004

Programa de Aprimoramento Discente em Modelagem Geométrica Computacional. Curso Básico de OpenGL

Prof. Fernando V. Paulovich 3 de maio de SCC Computação Gráca

Fundamentos de Computação Gráfica. Texturas

Transcrição:

OpenGL Conceitos Básicos Waldemar Celes Tecgraf/PUC-Rio 1

API OpenGL: o que é? Interface para programador de aplicação Aplicação Aplicação API abstrata OpenGL API Software & Hardware Dispositivo de saída Dispositivo de entrada 2

Por que OpenGL? primitivas geométricas e imagens arquitetura bem definida relativamente simples boa performance (sw & hw) bem documentado independente de sistemas de janelas padrão disponível em diversas plataformas 3

Primitivas geométricas básicas Ponto Linha Triângulo Quadrado Polígono (convexo) 4

Objetos 3D From SIGGRAPH 97 course5

Imagem e Textura 6

OpenGL rendering pipeline Vértices Operações geométricas Rasterização Operações sobre fragmentos Imagens Operações sobre imagens Textura Frame Buffer 7

Aplicação típica Aplicação Sistema de Janelas/Interface (GLUT/IUP) OpenGL GLU Hardware 8

Programa simples (usando GLUT) #ifdef _WIN32 #include <windows.h> #endif #include "GL/gl.h" #include "GL/glu.h #include GL/glut.h int main (int argc, char* argv[]) { /* openg GLUT */ glutinit(&argc, argv); glutinitdisplaymode (GLUT_SINGLE GLUT_RGB); glutinitwindowsize (250, 250); /* create window */ glutcreatewindow ( simple"); glutdisplayfunc(display); /* interact */ glutmainloop(); return 0; } 9

Programa simples (usando GLUT) - cont. void display (void) { /* clear window */ glclearcolor(1,1,1,1); glclear(gl_color_buffer_bit); /* draw red triangle */ glcolor3d(1,0,0); glbegin(gl_triangles); glvertex2d(-1,-1); glvertex2d(1,-1); glvertex2d(0,1); glend(); /* update screen */ glflush(); } 10

Programa simples (usando IUP) #include "iup.h" #include "iupgl.h" #ifdef _WIN32 #include <windows.h> #endif #include "GL/gl.h" #include "GL/glu.h" int main (void) { Ihandle *dg, *cv; /* open GUI */ IupOpen(); IupGLCanvasOpen(); /* create canvas and dialog */ cv = IupGLCanvas( "redraw" ); dg = IupDialog(cv); IupSetAttribute(dg,"SIZE","200x200"); IupSetFunction("redraw",(Icallback)redraw); IupShow(dg); /* interact... */ IupMainLoop(); IupClose(); return 0; }

Programa simples (cont.) int redraw (Ihandle *cv, double x, double y) { IupGLMakeCurrent(cv); /* clear window */ glclearcolor(1,1,1,1); glclear(gl_color_buffer_bit); /* draw red triangle */ glcolor3d(1,0,0); glbegin(gl_triangles); glvertex2d(-1,-1); glvertex2d(1,-1); glvertex2d(0,1); glend(); /* update screen */ glflush(); return IUP_DEFAULT; }

OpenGL & IUP #include iup.h #include iupgl.h Inicialização IupOpen(); IupGLCanvasOpen(); Bibliotecas: IUP iup.lib & iupgl.lib OpenGL opengl.lib & glu.lib (SGI) opengl32.lib & glu32.lib (MS) Criação em C cv = IupGLCanvas( "redraw" ); Criação em LED cv = GLCanvas(redraw) Atributos BUFFER = SINGLE ou DOUBLE COLOR = RGBA ou INDEX...

OpenGL: máquina de estado Trabalha com o conceito de valor corrente Iluminação Shading Textura etc. glenable/gldisable 14

Inicialização da área de desenho glclearcolor(red,green,blue,alpha); glclear(gl_color_buffer_bit); Atualização da área de desenho glflush( ); glfinish( ); // modal 15

Primitivas geométricas glbegin(tipo_de_prim); define attributo de vértice define vértice glend(); 16

Tipos de primitivas 1 0 2 GL_POINTS 4 1 3 3 2 1 3 5 0 4 0 2 2 0 1 GL_LINES GL_LINE_STRIP GL_LINE_LOOP 2 1 5 6 1 5 1 2 3 3 0 4 GL_POLYGON 0 4 7 0 3 GL_QUADS 2 4 GL_QUAD_STRIP 2 3 1 3 4 1 3 5 1 0 4 2 5 0 4 2 0 GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN 17

Especificação de vértice glvertex{tam}{tipo}{vetor} ( ); exemplo: GLdouble pos[ ] = {0.4,9.0,2.0}; glvertex3dv(pos); ou glvertex3d(0.4,9.0,2.0); OpenGL trabalha com coordenadas homegêneas 18

Especificação de atributos: Cor Modelo de cor RGB glcolor3d(red,green,blue); Color index Paleta previamente definida IupGLPalette (handle, index, red, green, blue);... glindexi(index); 19

Flat Modelo de Shading glshademodel(gl_flat); glbegin(gl_triangles); glcolor3f(1.0,0.0,0.0); // red glvertex2f(-1.0,-1.0); glcolor3f(0.0,1.0,0.0); // green glvertex2f(1.0,-1.0); glcolor3f(0.0,0.0,1.0); // blue glvertex2f(0.0,1.0); glend( ); 20

Modelo de Shading Smooth (Gouraud) glshademodel(gl_smooth); // default glbegin(gl_triangles); glcolor3f(1.0,0.0,0.0); // red glvertex2f(-1.0,-1.0); glcolor3f(0.0,1.0,0.0); // green glvertex2f(1.0,-1.0); glcolor3f(0.0,0.0,1.0); // blue glvertex2f(0.0,1.0); glend( ); 21

Transformações 3D e Sistemas de Coordenadas 22 From SIGGRAPH 97 course

Visualização 3D Camera Posição fixa: (0.0,0.0,0.0) Direção: -z Composição da cena move camera ou move objetos z y x 23

Transformação de Modelagem x Visualização Transformação de modelagem Sistema global fixo Ordem inversa para especificação... glmatrixmode(gl_modelview); glloadidentity(); Y glrotatef(30,0,0,1); gltranslatef(10,0,0);... X Y Y X X 24

Transformação de Modelagem x Visualização (cont.) Transformação de visualização Sistema local móvel Ordem natural para especificação glmatrixmode(gl_projection); glloadidentity(); glrotatef(30,0,0,1); gltranslatef(10,0,0);... Y X Y X Y X 25

Manipulação da pilha de matrizes glmatrixmode(gl_modelview); glloadidentity( ); I I glpushmatrix( ); glrotate(30,0,0,1); gltranslate(10,0,0); draw_object_1( ); glpopmatrix( );... I R I RT I I

Posicionamento da camera Função auxiliar glmatrixmode(gl_modelview); glloadidentity(); glulookat(eye_x, eye_y, eye_z, center_x, center_y, center_z, up_x, up_y, up_z );... 27

Projeção: tipo de camera Perspectiva teta w near far h glmatrixmode(gl_projection); glloadidentity( ); gluperspective (teta_y,aspect,znear,zfar);... aspect = w / h 28

Projeção: tipo de camera (cont.) Ortográfica near far glmatrixmode(gl_projection); glloadidentity( ); glortho (xleft,xright,ybottom,ytop,znear,zfar);... 2D: gluortho2d (xleft,xright,ybottom,ytop); 29

Transformação de viewport glviewport (x, y, width, height);... IUP & GLUT: A função default de resize define a viewport como sendo a área total do canvas. 30

Exemplo: sistema solar Sol e um planeta Raio Rotação diária Rotação anual Sol: desenhado na origem Planeta: Pensando em sistema local Rotação anual Translação em x Rotação diária 31

Remoção de superfícies ocultas Z-BUFFER Inicializa window (default) Habilita teste em Z glenable (GL_DEPTH_TEST); Define teste gldepthfunc (GL_LESS); Limpa buffer glclear (GL_DEPTH_BUFFER_BIT); 32

Animação Double color buffer: BACK & FRONT Inicialização GLUT glutinitdisplaymode (GLUT_DOUBLE GLUT_RGB); IUP/C cv = IupGLCanvas ( redraw ); IupSetAttribute (cv, IUP_BUFFER, IUP_DOUBLE); IUP/LED cv = GLCanvas [BUFFER=DOUBLE] (redraw) Atualização da tela IupGLSwapBuffers (cv); glutswapbuffers( ); 33

Rendering Cor do objeto depende de: fonte de luz orientação da superfície posição do observador reflexividade do material ambiente difusa especular Modelo de iluminação: Phong 34

Especificação da orientação Vetor normal em cada vértice glnormal3d(nx,ny,nz); Se não for normalizado glenable (GL_NORMALIZE); Obs: cálculo de normal é caro! 35

Fontes de luz Tipos Direcional Pontual Spot Glfloat pos[ ] = {x,y,z,w}; gllightf (GL_LIGHT0, GL_POSITION, pos); Cor e intensidade: ambiente, difusa, especular Glfloat dif[ ] = {red,green,blue,alpha}; gllightf (GL_LIGHT0, GL_DIFFUSE, dif); Habilitação glenable (GL_LIGHTING); glenable (GL_LIGHT0); 36

Parâmetros adicionais de iluminação Luz ambiente global GLfloat amb[ ] = {0.2,0.2,0.2,1.0}; gllightmodelfv(gl_light_model_ambient, amb); Posição do observador: local ou infinito gllightmodeli (GL_LIGHT_MODEL_VIEWER, GL_TRUE); Iluminação de faces: back e front gllightmodeli(gl_light_model_two_side, GL_TRUE); 37

Material Cor (reflexividade) Ambiente não depende de orientação Difusa depende da orientação da superfície e da posição da fonte de luz Especular depende da orientação da superfície, da posição da fonte de luz e posição do observador Brilho (shininess) fator de brilho da reflexão especular Emissão para representação de fontes de luz na cena Glfloat color [ ] = { red, green, blue, alpha }; glmaterialf (GL_BACK_AND_FRONT, GL_AMBIENT_AND_DIFFUSE, color); 38

Cor como material Usando cor para definição de material glcolormaterial (GL_BACK_AND_FRONT, GL_AMBIENT_AND_DIFFUSE); glenable (GL_COLOR_MATERIAL); glcolor3f (red, green, blue);... 39

OpenGL rendering pipeline Vértices Operações geométricas Rasterização Operações sobre fragmentos Imagens Operações sobre imagens Textura Frame Buffer 40

Blending Combinação da cor do fragmento sendo processado com a cor do pixel depois da rasterização e antes do fragmento ser desenhado no framebuffer. Aplicações transparência composição digital pintura obs: blending não funciona com color index. 41

Blending: exemplos de uso Desenho temporário sobre imagem glenable (GL_BLEND); glblendfunc (GL_ONE_MINUS_DST_COLOR, GL_ZERO); glcolor3d (1.0, 1.0, 1.0); Objetos transparentes Cor dada por: (red, green, blue, opacity) glenable (GL_BLEND); glblendfunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_APHA ); 42

Transparência em cena 3D habilita-se z-buffer desenha-se objetos opacos define-se z-buffer como read-only gldepthmask (GL_FALSE); desenha-se objetos com transparência em ordem 43

Imagens Representa uma área retangular de valores associados aos pixels Fatores complicantes existem diferentes dados associados aos pixels existem diferentes formas de armazenar uma imagem existem diferentes conversões de dados quando operamos sobre pixels 44

Operações sobre imagens Read Draw Frame buffer Memória Copy Memória Frame buffer Frame buffer Frame buffer 45

Formato de cada pixel De 1 a 4 elementos representam um pixel GL_RGB GL_RGBA GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_DEPTH_COMPONENT GL_STENCIL_INDEX GL_COLOR_INDEX 46

Tipo de cada elemento UNSIGNED_BYTE 8 bits BYTE... 7 bits UNSIGNED_SHORT. 16 bits SHORT. 15 bits UNSIGNED_INT. 32 bits INT. 31 bits FLOAT.. [0.0,1.0] BITMAP. 1 bit 47

Posição da imagem Desenhando imagens glrasterpos* (x, y, z, w); Especificação da imagem gldrawpixels (width, height, format, type, pixels) Especificação de bitmap Projetado para suportar desenho de fontes raster glbitmap (width, height, x 0, y 0, x inc, y inc, bitmap); 48

Textura Mapeamento de imagens sobre primitivas Imagem composta por texels Largura e altura: 2 n gluscaleimage (format, width_in, height_in, type_in, data_in, width_out, height_out, type_out, data_out); Especificação: 1D e 2D glenable (GL_TEXTURE_2D or GL_TEXTURE_1D); glteximage2d (GL_TEXTURE_2D, level, components, width, height, border, format, type, pixels); glteximage1d (GL_TEXTURE_1D, level, components, width, border, format, type, pixels); 49

Coordenada de textura Para cada vértice coordenada: identifica qual o pixel no buffer coordenada de textura: identifica qual o texel Coordenadas de textura: s, t, r, q Coordenadas de textura são linearmente interpoladas entre vértices gltexcoord* (s, t, r, q); Intervalo [0,1], senão wrap? Transformados pela matriz de textura 50

Mapeamento de textura (0,1) (1,1) (0,0) (1,0) Textura (0,4) (8,4) (0,0) (8,0) 51

Combinação de pixel com texel Decal Cor definida pelo texel Modulate Cor do pixel é modulada pela cor do texel Blend Cor combinada com uma cor adicional de ambiente Exemplo Modular com a cor branca para dar iluminação gltexenvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 52

Exemplo de modulação DECAL MODULATE 53

Referências The Red Book OpenGL: Programming Guide Release 1.2 M. Woo, J. Neider, T. Davis Web sites The official OpenGL web page http://www.opengl.org SGI s OpenGL WWW Center http://www.sgi.com/technology/opengl Gateway to OpenGL http://reality.sgi.com/mjk_asd/opengl-links.html 54