Escolar Documentos
Profissional Documentos
Cultura Documentos
OpenGL
Ambiente p/ escrever e executar programas grficos
Monitor (tela) + biblioteca de software + placa grfica
para desenhar primitivas grficas na tela Entradas
OpenGL
API pode ser vista como uma caixa preta, eescrita em termos das funes que disponibiliza
chamadas a funes da biblioteca feitas pelo programa do usurio Informaes obtidas dos dispositivos de entrada (mouse, teclado...) ...
Sadas: grficos exibidos no monitor Objetivo: encapsular a complexidade de interfaces de diferentes hardwares; encapsular as diferentes capacidades dos hardwares
Sistema grfico suporta o mesmo conjunto de funcionalidades, mesmo que seja necessrio emular algumas em software
4
OpenGL
OpenGL
Independente de plataforma Fcil de usar Permite aplicao extrair o melhor potencial do hardware
Terminologia
Rendering: processo de criar imagens a partir de modelos geomtricos Modelos (objetos): objetos definidos em termos de primitivas geomtricas simples, como pontos, retas ou polgonos
Especificados pelos seus vrtices
Terminologia
Framebuffer: memria que retm as necessrias para o display controlar a cor, intensidade e opacidade de todos os pixels na tela Bitplane: rea da memria que retm um bit de informao para cada pixel na tela
Pixel: menor elemento visvel no hardware de exibio Imagem renderizada: os pixels apresentados na tela. A informao em cada pixel mantida em memria, organizada em bitplanes.
Implementa modelo de iluminao para smooth shading Implementa diversos recursos para aumentar o realismo das cenas
Mapeamento de texturas, fog, motion-blur
9 10
http://www.inf.pucrs.br/~pinho/CG/Aulas/OpenGL/Texturas/Ma pTextures.html
11 12
http://gpwiki.org/index.php/OpenGL:Tutorials:Tutorial_Framework: Light_and_Fog
13
http://www.codeproject.com/KB/openGL/MotionBlur.aspx
14
18
Bibliotecas relacionadas
GLU: Definio de curvas e superfcies NURBs (NonUniform Rational BSpline); Funes utilitrias para definir parmetros de visualizao GLUT: Definio de janelas e tratamento de entrada de dados; criao de interfaces grficas GLUI: criao de interfaces grficas mais elaboradas
19 20
API Open GL
Programa
Em geral, trabalha com um sistema de janelas (window system) (Fig. 2.1) Inicializaes: modo de exibio (display mode), janela de desenho e sistema de coordenadas de referncia (associado janela)
X Window Input
X Window System: modelo cliente-servidor para rede de workstations Cliente: programa OpenGL Servidor Grfico: bitmap display c/ dispositivo apontador e teclado
Modos de Input
Dispositivos de entrada incluem um trigger que sinaliza para o sistema operacional a ocorrncia de um evento relevante
Boto no mouse pressionado/solto Tecla pressionada/solta
Modo Request
Input fornecido ao programa somente quando o usurio ativa o dispositivo Tpico para entrada via teclado
Pode apagar (backspace), editar, corrigir, etc. at que a tecla enter (return) pressionada (o trigger)
24
Modo Event
Sistemas em geral tem mais de um dispositivo de entrada cada qual pode ser ativado arbitrariamente pelo programador Cada trigger dispara um evento, cuja medida vai para uma fila de eventos, a qual acessada pelo programa
Tipos de Eventos
Window: resize, expose, iconify Mouse: click one or more buttons Motion: move mouse Keyboard: press/release a key Idle: ausncia de eventos
Define o que deve ser feito se no h eventos na fila
25 26
Callbacks
Interface de programao para entrada eventdriven Define uma callback function para cada tipo de evento que o sistema grfico reconhece Essa funo, fornecida pelo programador, executada quando o evento ocorre Exemplo GLUT: glutMouseFunc(mymouse)
mouse callback function
27
GLUT callbacks
GLUT reconhece um subconjunto de eventos os que so reconhecidos por sistemas de janelas (Windows, X, Macintosh)
glutDisplayFunc glutMouseFunc glutReshapeFunc glutKeyboardFunc glutIdleFunc glutMotionFunc, glutPassiveMotionFunc
28
Fila de eventos
mensagem informa a ocorrncia de um evento, poltica FIFO de tratamento Programa organizado como coleo de callback functions
Cada tipo de evento associado a uma callback que ativada quando ele ocorre
Outras inicializaes
glutMainLoop(); /* entra loop infinito */ }
32
Cdigo para abrir um janela para desenho e desenhar um ponto (desenho do ponto)
void redesenha() { glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glColor3f(1.0,0.0,0.0); glBegin(GL_POINTS); glVertex2f(200.0,200.0); glEnd(); glFlush(); }
34
Quantas vezes uma callback chamada? Ex. redesenha int cont; /*inicializada no prog. Principal */
void redesenha() { glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glColor3f(1.0,0.0,0.0); itoa(cont++,buf,10); glutSetWindowTitle((const char*)buf ); glBegin(GL_POINTS); glVertex2f(200.0,200.0); glEnd(); glFlush(); } Quando cont incrementado?
35
V. instrues de compilao/execuo
36
Primitivas
Traado requer um sistema de referncia para posicionamento espacial
Em CG trabalha-se com diversos sistemas de coordenadas... Inicialmente, adotamos um muito simples
Associado ao sistema de coordenadas da janela de desenho Distncias medidas em pixels Zero no canto superior esquerdo da janela
Para desenho de primitivas 2D: GLOrtho2D define transformao necessria para a exibio
(janela 640 x 480)
37 38
Exemplo
Mltiplas primitivas em mltiplas janelas
40
Primitivas
Desenho de primitivas
Diversos objetos: GL_POINTS, GL_POINTS, GL_LINES, GL_POLYGON, etc. Para descrever objeto, usurio informa a lista de vrtices
glBegin(GL_POINTS); glVertex2i(100, 50); // draw three points glVertex2i(100, 130); glVertex2i(150, 130); glEnd();
Tipos de Dados
OpenGL suporta um conjunto fixo de tipos de dados.
sufixo
b s i f ...
41
tipo
inteiro 8 bits
tipo C
nome
Glshort GLint GLfloat ...
42
inteiro 16 bits short inteiro 32 bits int/long float 32 bits ... float ...
Informao sobre cada vrtice encaminhada para um pipeline grfico, no qual passa por vrias etapas de processamento
Tipos de Dados
void drawDot(int x, int y) { glBegin(GL_POINTS); glVertex2i(x, y); glEnd(); } //Perigo!!: sistema passa int... // funo c/ sufixo i espera inteiro 32 bits
Estados do OpenGL
OpenGL rastreia diversas variveis de estado
Tamanho atual de um ponto, cor de fundo da janela, cor do desenho O valor corrente permanece ativo at que seja alterado
Tamanho de ponto: glPointSize(3.0) Cor de desenho: glColor3f(red, green, blue) Cor de fundo: glClearColor(red, green, blue, alpha) Limpar janela: glClear(GL_COLOR_BUFFER_BIT)
44
void drawDot(GLint x, GLint y) // cdigo seguro... compilao associa os { // tipos adequadamente (GL.h) glBegin(GL_POINTS); glVertex2i(x, y); glEnd(); } Funo genrica para traar um ponto: cuidado com portabilidade!! 43
Espao de trabalho
Exemplos at agora: primitivas desenhadas diretamente no espao da tela Situao usual: aplicativo usa um sistema de coordenadas (do mundo), desenho apresentado no sistema de referncia da tela
Sistemas de Coordenadas
necessrio aplicar uma transformao descrio da cena para passar de um sistema para outro mundo infinito, o sistema de referncia da tela finito e discreto: depende da resoluo. Mapeamento window-viewport
47
48
Mapeamento window-viewport
Mapeamento window-viewport
Define rea de exibio: glViewport(Glint x, Glint y, Glsizei width, Glsizei height);
(x,y): coords canto inferior esquerdo width,height: altura e largura em pixels
Define window de interesse no mundo: gluOrtho2D(Gldouble left, Gdouble right, Gldouble bottom, Gldouble top);
left, bottom: coords canto inferior esquerdo right, top: coords canto superior direito Fonte: E. Angel, Interactive Computer Graphics
49 50
Mapeamento window-viewport
Note que a janela de exibio (glutCreateWindow) pode ter sua rea compartilhada por mltiplas viewports exemplo
Movimento do Mouse
void myMovedMouse(int x, int y) void myMovedMouse(int MouseX, int MouseY) { gLint x = mouseX; gLint y = ScreenHeight - mouseY; gLint brushSize = 20; gLRecti(x,y, x + brushSize, y + brushSize); glFlush(); }
55
56
Bibliografia
Computer Graphics Using OPEN GL, F.S. Hill, Prentice-Hall 2001
E. Angel, Interactive Computer Graphics, 3a. Edio, Adison Wesley, 2003 OpenGL: uma abordagem prtica e objetiva Ed. Novatec, Marcelo Cohen e Isabel Harb Manssour
57