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
Download

01-OpenGLT