Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro Reinaux Nivan Ferreira

57
Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro Reinaux Nivan Ferreira Rodrigo Mateus

description

Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro Reinaux Nivan Ferreira Rodrigo Mateus. Agenda. O que é OpenGL Porque OpenGL foi criado História Utilização no mercado Características de OpenGL Pipeline Bibliotecas Análise de Competidores. O que é OpenGL?. - PowerPoint PPT Presentation

Transcript of Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro Reinaux Nivan Ferreira

Page 1: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Adônis TavaresGustavo Ferraz

Hugo SimõesHumberto Pacheco

Leandro ReinauxNivan Ferreira

Rodrigo Mateus

Page 2: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Agenda

• O que é OpenGL• Porque OpenGL foi criado• História• Utilização no mercado• Características de OpenGL• Pipeline• Bibliotecas• Análise de Competidores

Page 3: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

O que é OpenGL?

Open Graphics Library

É a especificação de uma API para programação em computação gráfica.

Em outras palavras, OpenGL define um conjunto de funções fazer aplicações em computação gráfica.

Page 4: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

O que não é OpenGL?

Não é uma linguagem de programação Não tem comandos para

criação e gerenciamento de janelaslidar com entradas do usuário

Não tem comandos de alto-nível para descrição de objetos 3D

Page 5: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Porque OpenGL foi criado? Desenvolver aplicativos gráficos era

difícilFalta de padronizaçãoEsforços duplicados

Era necessário uma plataformaAbstração de hardwarePortávelFácil de usar

Page 6: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

História PHIGS – anos 80 IRIS GL – final dos anos 80 pela SGI OpenGL é criado em 1992 – mantido pela

OpenGL ARB (Architecture Review Board)Evans&Sutherland HPIBMIntelMatroxNVIDIASunSilicon Graphics (SGI)

• Atualmente, parte do Khronos Group

Page 7: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

História OpenGL 2.0

3DLabsOpenGL Shading Language

OpenGL 2.1OpenGL Shading Language revision 1.20sRGB texture formats

OpenGL 3.0Criação de objetos assíncrona

Page 8: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Utilizações no mercado

IBM/Dassault CATIA Moonlight Creator (GPL)

Ferramentas CAD

Page 9: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Modelagem e Desenho

NewTek LightWave 3D

Page 10: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Visualização e Simulação

Page 11: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Interface com o Usuário

Page 12: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Hardware-Assisted Rendering

glutrad (radiosity, hemicube approximation)

Page 13: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Animação e Efeitos Especiais

Vídeo do trem do filme “The Prototype”

Page 14: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Jogos

Doom 3

Call of Duty

Quake 3

NeverWinter Nights

Page 15: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

CaracterísticasTipo OpenGL Representão

InternaTipo em C

equivalenteSufixo

GLbyte 8-bit integer signed char b

GLint, GLsizei 32-bit integer int ou long i

GLfloat, GLclampf32-bit floating-

pointfloat f

GLdouble, GLclampd

64-bit floating-point

double d

GLubyte, GLboolean

8-bit unsigned integer

unsigned char ub

GLushort16-bit unsigned

integerunsigned short us

GLuint, GLenum, GLbitfield

32-bit unsigned integer

unsigned long ou unsigned int

ui

Page 16: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Primitivas Geométricas de OpenGL

GL_QUAD_STRIPGL_QUAD_STRIP

GL_POLYGONGL_POLYGON

GL_TRIANGLE_STRIPGL_TRIANGLE_STRIP

GL_TRIANGLE_FANGL_TRIANGLE_FAN

GL_POINTSGL_POINTSGL_LINESGL_LINES

GL_LINE_LOOPGL_LINE_LOOPGL_LINE_STRIPGL_LINE_STRIP

GL_TRIANGLESGL_TRIANGLES

GL_QUADSGL_QUADS

• Todas primitivas geométricas são especificadas por vértices

Page 17: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Uma aplicação OpenGL é uma MEF Uma aplicação OpenGL é uma máquina

de estados.A cor corrente é uma variável de estado. Há

muitas outras!Todas as variáveis de estado possuem

valores defaultO efeito de muitas delas pode ser habilitado

e desabilitado

Page 18: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Forma geral das instruções

De forma geral:gl{nome da função}{número de argumentos}{tipo dos argumentos}

(lista de argumentos);

Exemplos:

glColor3f => gl Color 3 f

glLightfv => gl Light fv

Nome da FunçãoNúmero de argumentos

Tipo dos argumentos

Nome da função

Tipo dos argumentos(float vector)

Page 19: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Forma das instruções

Infelizmente, nem todas as funções seguem fielmente esse padrão:glFlush() ,não recebe argumentos.glClearColor(), só recebe um tipo de argumento.

Conclusão: Usar funções em OpenGL é fácil!

Page 20: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Forma geral de um programa OpenGL Funções presentes em todo programa

OpenGL:

main(): - Ponto de início da execução;- Inicializa a janela e aspectos da geração de

imagens(número de buffers de armazenamento e sistema de representação de cores);

- Especifica a função callback de desenho.

Page 21: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Forma geral de um programa OpenGL

– void setupRC(void):» Inicializa aspectos de rendering(cor de desenho

atual e cor de funto);

– void renderScene(void):» Função executada sempre que for necessário

exibir a imagem.

• Podem existir outras funções callback– Funções que detectam eventos de teclado e

mouse.

Page 22: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Alguns exemplos

#include <whateverYouNeed.h>

main() {InitializeAWindowPlease();glClearColor (0.0, 0.0, 0.0, 0.0);glClear (GL_COLOR_BUFFER_BIT);glColor3f (1.0, 1.0, 1.0);glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);glBegin(GL_POLYGON);

glVertex3f (0.25, 0.25, 0.0);glVertex3f (0.75, 0.25, 0.0);glVertex3f (0.75, 0.75, 0.0);glVertex3f (0.25, 0.75, 0.0);

glEnd();glFlush();

UpdateTheWindowAndCheckForEvents();

}

Resultado

Page 23: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Entendendo as funções básicas glClearColor(r,g,b,a): Especifica cor utilizada para

limpar a tela(o valor a é utilizado em efeitos como transparência);

glClear(buffer): Limpa um ou mais buffer’s, no exemplo GL_COLOR_BUFFER_BIT(onde a imagem está armazenada internamente);

glColor3f(r,g,b): Determina a cor que será utilizada para o desenho(linhas e preenchimento);

glOrtho:

Page 24: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Entendendo as funções básicas glBegin(Const)...glEnd(): Conjunto

utilizado para desenhar formas

Const=GL_POLYGON. glVertex3f: Especifica os vétices do

objeto que será desenhado glFlush: Força a execução de comandos

ainda não executados acontecer.

Page 25: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Pipeline

Page 26: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Display Lists

Comandos OpenGL armazenados para serem executados depois

Comandos executados na ordem em que foram emitidos

Aumenta a performance Redesenhar geometria ou mudar de

estados várias vezes

Page 27: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Vertex Operation

Vértices e coordenadas normal transformadas por GL_MODELVIEW

Pode ser demorada Coordenadas da textura são geradas e

transformadas O cálculo da iluminação atualiza a cor

do vértice

Page 28: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Primitive Assembly

Primitivas transformadas pela matriz de projeção e recortadas pelo volume de visualização

Divisão perspectiva por w Viewport e depth (coordenada z) Culling test Primitivas geométricas completas

Page 29: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Pixel Transfer Operation

Scaling, bias, mapping e clamping Pixels da memória do sistema

Armazenados na memória de textura ou enviados para a rasterização

Pixels do frame bufferRetornam para um array na memória do

sistema

Page 30: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Texture Memory

Imagens de textura são carregadas na memória de textura e aplicadas aos objetos geométricos

Acelera a performance de texturas Texturas aumentam o realismo dos

objetos

Page 31: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Rasterization

Dados geométricos e pixels em fragmentos Fragmentos: arrays retangulares contendo

cor, depth, line width, point size e cálculos antialiasing (GL_POINT_SMOOTH, GL_LINE_SMOOTH, GL_POLYGON_SMOOTH)

Pixels do interior do polígono são preenchidos (GL_FILL)

Cada fragmento corresponde a um pixel no frame buffer

Page 32: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Fragment Operation Série de operações que podem alterar ou

descartar fragmentosTexture element generationFog calculationsFragment Tests:

○ Scissor test -> glScissor()○ Alpha test -> glAlphaFunc()○ Stencil test -> glStencilFunc(), glStencilOp()○ Depth test -> glDepthFunc()

Blending, Dithering, Logical Operation, Masking (Bitmask)

Page 33: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Feedback

glGet*(), glIsEnabled(): informações e estados atuais

glReadPixels(): dados dos pixels do frame buffer

glRenderMode(GL_FEEDBACK): dados completos dos vértices transformados

glCopyPixels(): copia os dados do pixel para outro frame buffer

Page 34: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Resumo Visual

Page 35: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Transformações Composição de matrizes: glMatrixMode(),

glLoadIdenty, glPushMatrix(), glPopMatrix(), Projeção

Ajusta a lente da câmera virtual Visualização

Definem posição e orientação do volume de visualização (frustum) no universo

ModelagemMovem os objetos

ViewportModificam a janela de visualização

Page 36: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Iluminação e sombreamento Modelos simples com realismo – eficiência Modelo de iluminação de Phong Não modela sombras, reflexão direta e indireta,

refração

Page 37: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Fontes de Luz

Considerada pontual Intensidade constante Representada por um valor RGB Componentes

Ambiente (GL_AMBIENT)Difusa (GL_DIFFUSE)Especular (GL_SPECULAR)

glLight()

Page 38: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Tipos de Luz

PontualRaios emanam uniformemente em todas as

direções

DirecionalRaios apenas em uma direção

SpotLightRaios emitidos na forma de um cone

apontando para uma determinada direção

Page 39: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Material

Cor depende da porcentagem de luz vermelha, verde e azul incidente que ele reflete

Componentes Ambiente, Difusa, Especular, Emissiva

glMaterial()

Page 40: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Iluminação Local

Dois modelos:Flat ShadingGouraud Shading

Page 41: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Flat Shading

Não apresenta variações ao longo do polígono.

Com a normal de cada vértice é obtida a normal do polígono.

glShadeModel (GL_FLAT);

Page 42: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Gouraud Shading

Apresenta variações de cor no polígono. Calcular a intensidade nos vértices,

Interpolação destas intensidades glShadeModel (GL_SMOOTH);

Page 43: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Bibliotecas Biblioteca Padrão

OpenGL32 em WindowsGL em unix/linux (libGL.a)

Opengl Utility library (GLU) Ligação com Sistema de Janelas

GLX para X Windows System, WGL para Windows, CGL para Macintosh

Multi-plataforma: GLUT, GLUI, SDL, FLTK, QT, ...

Page 44: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Bibliotecas Opengl Utility library (GLU)

Funções de desenho de alto nível desenvolvidas com base nas funções primitivas de OpenGL.

Normalmente é obtida junto com o OpenGL no mesmo pacote.

Mipmaps, desenho de superfícies quádricas, NURBS

Ex: gluOrtho2D();

Page 45: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Bibliotecas Opengl Utility Toolkit (GLUT)

Interface com o sistema de janelas de qualquer ambiente

Provê meios para construir interfaces gráficas como menus pop-up e suporte para dispositivos de entrada (teclado, mouse, joystick, trackball)

Eventos (Event Callback Function)

Page 46: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Bibliotecas OpenGL User Interface Library (GLUI)

Baseada em GLUTIndependente de ambienteAdição de buttons, checkboxes, radio

buttons, and spinnersExtremamente fácil de se utilizar

Page 47: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Organização do Software

Page 48: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Análise de competidores

Cg: C for GraphicsDesenvolvido pela NVIDIA em 2002.Baseada na linguagem C.Usada para gerar gráfico em tempo real em

GPU programáveis.Não dá suporte a superfícies e a iluminação

(Como o OpenGL).

Page 49: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Análise de competidores

VRML: Virtual Reality Modeling LanguageUsada para descrever mundos interativos

3D na Internet.Desenvolvida pela SGI (Silicon Graphics

Inc) em 1995.Unificar e padronizar a tecnologia Web para

gerar mundos 3D.

Page 50: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Análise de competidores

Direct3D (componente do DirectX)É utilizada na plataforma Windows.Consoles Xbox e o Dreamcast possui

versão embarcada do Direct3D.Linguagem de alto nível de modelagem 3D.Possui os mesmos objetivos do OpenGL

Page 51: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Análise de competidoresFeature OpenGL 1.2 Core Direct3D 7 Direct3D 8

System Mechanics

Operating System Support

Windows (9x, NT, 2000), MacOS, others

Windows (9x, 2000, CE)

Windows (9x, 2000)

API Definition Control

OpenGL ARB Microsoft Microsoft

API SpecificationOpenGL Specification

SDK/DDK Documentation and DDK Reference

SDK Documentation

API Mechanismincludes and libraries

COM COM

Software Emulation of Unaccelerated Features

Yes No No

Extension Mechanism

Yes No Yes

Source Implementation Available

Yes Yes NoFonte: http://www.xmission.com/~legalize/d3d-vs-opengl.html

Page 52: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Documentação

• OpenGL Programming Guide (Woo, Neider, Davis - Addison-Wesley )

• Interactive Computer Graphics: A Top-Down Approach with OpenGL (E. Angel - Addison-Wesley)

Page 53: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Documentação

• OpenGL Extensions Guide (Eric Lengyel)

• Opengl Shading Language (Randi J. Rost)

Page 54: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Documentação

• OpenGL Programming for the X Window System

• OpenGL Game Programming (Astle, Hawkins, LaMothe)

Page 55: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Agradecimentos

Professor Marcelo Walter que nos forneceu material e esclareceu dúvidas.

Felipe Maia (ex-monitor de PG) que indicou várias fontes onde poderíamos conseguir exemplos interessantes.

Page 56: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira

Referências OpenGL Programming Guide (Woo, Neider, Davis - Addison-

Wesley ) http://www.humus.ca/index.php?page=News http://www.soe.ucsc.edu/classes/cmps203/Fall04/

finalreports/ProjectPaper_JerryYee.pdf http://tools.devshed.com/c/a/Web-Development/OpenGL-vs-

DirectX-A-Comparison/ http://en.wikipedia.org/wiki/

Comparison_of_OpenGL_and_Direct3D http://www.xmission.com/~legalize/d3d-vs-opengl.html http://www.inf.pucrs.br/~manssour/OpenGL/ http://www.songho.ca/opengl/gl_pipeline.html http://www.cgl.uwaterloo.ca/~vtluu/Talks/OpenGL/ http://www.inf.ufrgs.br/~nedel/inf01047/05-openGL.pdf

Page 57: Adônis Tavares Gustavo Ferraz Hugo Simões Humberto Pacheco Leandro  Reinaux Nivan  Ferreira