adônis tavares gustavo ferraz hugo simões humberto pacheco leandro reinaux nivan ferreira
Post on 18-Jan-2016
42 Views
Preview:
DESCRIPTION
TRANSCRIPT
Adônis TavaresGustavo Ferraz
Hugo SimõesHumberto Pacheco
Leandro ReinauxNivan 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?
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.
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
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
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
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
Utilizações no mercado
IBM/Dassault CATIA Moonlight Creator (GPL)
Ferramentas CAD
Modelagem e Desenho
NewTek LightWave 3D
Visualização e Simulação
Interface com o Usuário
Hardware-Assisted Rendering
glutrad (radiosity, hemicube approximation)
Animação e Efeitos Especiais
Vídeo do trem do filme “The Prototype”
Jogos
Doom 3
Call of Duty
Quake 3
NeverWinter Nights
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
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
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
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)
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!
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.
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.
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
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:
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.
Pipeline
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
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
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
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
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
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
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)
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
Resumo Visual
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
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
Fontes de Luz
Considerada pontual Intensidade constante Representada por um valor RGB Componentes
Ambiente (GL_AMBIENT)Difusa (GL_DIFFUSE)Especular (GL_SPECULAR)
glLight()
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
Material
Cor depende da porcentagem de luz vermelha, verde e azul incidente que ele reflete
Componentes Ambiente, Difusa, Especular, Emissiva
glMaterial()
Iluminação Local
Dois modelos:Flat ShadingGouraud Shading
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);
Gouraud Shading
Apresenta variações de cor no polígono. Calcular a intensidade nos vértices,
Interpolação destas intensidades glShadeModel (GL_SMOOTH);
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, ...
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();
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)
Bibliotecas OpenGL User Interface Library (GLUI)
Baseada em GLUTIndependente de ambienteAdição de buttons, checkboxes, radio
buttons, and spinnersExtremamente fácil de se utilizar
Organização do Software
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).
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.
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
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
Documentação
• OpenGL Programming Guide (Woo, Neider, Davis - Addison-Wesley )
• Interactive Computer Graphics: A Top-Down Approach with OpenGL (E. Angel - Addison-Wesley)
Documentação
• OpenGL Extensions Guide (Eric Lengyel)
• Opengl Shading Language (Randi J. Rost)
Documentação
• OpenGL Programming for the X Window System
• OpenGL Game Programming (Astle, Hawkins, LaMothe)
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.
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
top related