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?
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 janelas
lidar 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ícil
Falta de padronização
Esforços duplicados
Era necessário uma plataforma
Abstração de hardware
Portável
Fá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
HP
IBM
Intel
Matrox
NVIDIA
Sun
Silicon Graphics (SGI)
Atualmente, parte do Khronos Group
História
OpenGL 2.0
3DLabs
OpenGL Shading Language
OpenGL 2.1
OpenGL Shading Language revision 1.20
sRGB texture formats
OpenGL 3.0
Criação de objetos assíncrona
Utilizações no mercado
Ferramentas CAD
IBM/Dassault CATIA
Moonlight Creator (GPL)
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ísticas
Tipo OpenGL
Representão
Interna
Tipo em C
equivalente
Sufixo
GLbyte
8-bit integer
signed char
b
GLint, GLsizei
32-bit integer
int ou long
i
GLfloat, GLclampf
32-bit floatingpoint
float
f
GLdouble,
GLclampd
64-bit floatingpoint
double
d
GLubyte,
GLboolean
8-bit unsigned
integer
unsigned char
ub
GLushort
16-bit unsigned
integer
unsigned short
us
GLuint, GLenum,
GLbitfield
32-bit unsigned
integer
unsigned long ou
unsigned int
ui
Primitivas Geométricas de
OpenGL
• Todas primitivas geométricas são especificadas por vértices
GL_POINTS
GL_LINES
GL_LINE_STRIP
GL_LINE_LOOP
GL_POLYGON
GL_TRIANGLES
GL_TRIANGLE_STRIP
GL_QUADS GL_QUAD_STRIP
GL_TRIANGLE_FAN
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 default
O 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);
Nome da Função
Exemplos:
Número de argumentos
glColor3f => gl Color 3 f
Tipo dos argumentos
Nome da função
Tipo dos argumentos(float vector)
glLightfv => gl Light fv
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
Resultado
#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();
UpdateTheWindowAndCheckForEvent
s();
}
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 buffer
Retornam 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 fragmentos
Texture element generation
Fog calculations
Fragment 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
Modelagem
Movem os objetos
Viewport
Modificam 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
Pontual
Raios emanam uniformemente em todas as
direções
Direcional
Raios apenas em uma direção
SpotLight
Raios 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 Shading
Gouraud 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 Windows
GL 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 GLUT
Independente de ambiente
Adição de buttons, checkboxes, radio
buttons, and spinners
Extremamente fácil de se utilizar
Organização do Software
Análise de competidores
Cg: C for Graphics
Desenvolvido 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
Language
Usada 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 competidores
Feature
OpenGL 1.2 Core
Direct3D 7
Direct3D 8
Operating System
Support
Windows (9x, NT,
2000), MacOS,
others
Windows (9x, 2000,
CE)
Windows (9x, 2000)
API Definition
Control
OpenGL ARB
Microsoft
Microsoft
API Specification
OpenGL
Specification
SDK/DDK
Documentation and
DDK Reference
SDK Documentation
API Mechanism
includes and
libraries
COM
COM
Software Emulation
of Unaccelerated
Features
Yes
No
No
Extension
Mechanism
Yes
No
Yes
Source
Implementation
Available
Yes
System Mechanics
Yes
No
Fonte: 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 - AddisonWesley )
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-vsDirectX-A-Comparison/
http://en.wikipedia.org/wiki/Comparison_of_OpenGL_and_Dir
ect3D
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