Está en la página 1de 34

1

Professores:

Aula 7

Contedo:
- OpenGL

Anselmo Montenegro
Esteban Clua

OpenGL e APIs Grficas?


- Conceitos Bsicos
- OpenGL x DirectX
- GLUT
- Renderizao baseada em estados acumulativos

OpenGL - Conceitos Bsicos


- Rendering Context
- Loop de renderizao
- Back Buffer x Front Buffer
- Funo de Renderizao

OpenGL - Limitaes
- No gerencia janelas nem trata eventos produzidos
por dispositivos de interao.
- No possui comandos de alto nvel para especificao
de objetos 3D complexos.
- Objetos complexos devem ser construdos a partir de
primitivas geomtricas simples.

OpenGL - Conceitos Bsicos


1. Inicializao
Criao da Janela e do rendering context, estados
iniciais, inicializao de outros componentes
2. Lao Principal
Entrada de dados, Fsica, IA, Renderizao
3. Finalizao
Liberao de recursos

OpenGL - Algumas regras de sintaxe


Todos os comandos comeam com o sufixo gl
(Ex.: glClearColor).
As palavras nos nome dos comandos comeam com
letras maisculas (Ex.: glColor()).
O sufixo indica o nmero e o tipo dos argumentos
(Ex.: glVertex2i(1,3)).
As constantes comeam com GL_
(Ex.:GL_COLOR_BUFFER_BIT).

Iniciando uma aplicao

Sufixos e Tipos dos Argumentos

OpenGL como mquina de Estados


A OpenGL funciona como uma mquina de estados.
Os estados correntes permanecem ativos at que
sejam modificados.
Exemplo: a cor de desenho corrente aplicada a
qualquer primitiva geomtrica at que seja modificada.

10

OpenGL como mquina de Estados


Existem vrios estados:
- Cor de desenho corrente.
- Transformaes de visualizao e projeo.
- Padres de linhas e polgonos.
- Modo de desenho dos polgonos.
- Posio e caracterstica das fontes de luz.
- Propriedades dos materiais associados aos objetos.
- etc.

11

OpenGL como mquina de Estados


Alguns comandos para ler um estado:
glGetBooleanv(), glGetDoublev(), glGetFloatv(),
glGetIntegerv(), glPointerv() ou glIsEnabled().
Comandos para salvar um estado:
glPushAttrib() e glPushClientAttrib().
Comandos para restaurar um estado:
glPopAttrib() e glPopClientAttrib().

12

APIs relacionadas
GLU (OpenGL Utility Library)
- Parte do padro OpenGL.
- NURBS, trianguladores, qudricas, etc.

AGL, GLX, WGL


- Camadas entre o OpenGL os diversos
sistemas de janelas.

GLUT (OpenGL Utility Toolkit)


- API porttil de acesso aos sistemas de janelas.
- Encapsula e esconde as camadas proprietrias.
No parte official do OpenGL.

13

GLUT
Biblioteca para criao de interfaces grficas
simples para programas grficos baseados em
OpenGL.
Fornece um conjunto de primitivas para desenho
de objetos mais complexos como qudricas e etc.

14

Headers OpenGL / GLUT


#include <GL/glut.h>

- J inclui automaticamente os headers do OpenGL:


#include <GL/gl.h>
#include <GL/glu.h>

Se GLUT no for usado, os headers OpenGL tm que


ser includos explicitamente, junto com os de outra
camada de interface.
H APIs para construo de interfaces grficas (GUI)
construdas sobre o GLUT cujos headers incluem os do
GLUT.
- Por exemplo, o pacote GLUI requer:
#include <GL/glui.h>

(J inclui glut.h)

15

Callbacks
Callbacks so rotinas que sero chamadas para
tratar eventos.
Para uma rotina callback ser efetivamente chamada
ela precisa ser registrada atravs da funo.
glutXxxFunc (callback)

Onde Xxx designa uma classe de eventos e callback


o nome da rotina.
Por exemplo, para registrar uma callback de desenho
chamada Desenho, usa-se
glutDisplayFunc (Desenho);

16

Callbacks de Desenho
a rotina chamada automaticamente sempre que a
janela ou parte dela precisa ser redesenhada (ex.:
janela estava obscurecida por outra que foi fechada)
Todo programa GLUT precisa ter uma! Exemplo:

17

Callbacks de Redimensionamento
glutReshapeFunc (Reshape);

Chamada sempre que a janela redimensionada,


isto , teve seu tamanho alterado.
Tem a forma
void reshape (int width, int height){...}

width/height so a nova largura/altura da janela


(em pixels)
Obs: Se uma rotina de redimensionamento no for
especificada, o GLUT usa uma rotina de
redimensionamento "default" que simplesmente ajusta
o viewport para usar toda a rea da janela.

18

Callbacks
Outras callbacks comumente usadas
Eventos de teclado
void keyboard(unsigned char key, int x, int y)

Eventos de mouse
void mouse(int button,int state,int x,int y)
void motion(int x, int y)
void passiveMotion(int x, int y)

Chamada continuamente quando nenhum outro evento


ocorre
void idle(void)

19

Programa OpenGL/GLUT - Inicializao


Inicializao do GLUT
glutInit (int* argc, char** argv)
Estabelece contato com sistema de janelas.
Em X, opes de linha de comando so processadas
e removidas.

20

Programa OpenGL/GLUT - Inicializao


Inicializao da(s) janela(s)
glutInitDisplayMode (int modo)
Estabelece o tipo de recursos necessrios para
as janelas que sero criadas. Modo um "ou"
bit-a-bit de constantes:
GLUT_RGB cores dos pixels sero expressos em RGB.
GLUT_DOUBLE bufferizao dupla (ao invs de simples).
GLUT_DEPTH buffer de profundidade (z-buffer).
GLUT_ACCUM buffer de acumulao.
GLUT_ALPHA buffer de cores ter componente alfa.

21

Programa OpenGL/GLUT - Inicializao


glutInitWindowPosition (int x, int y)
Estabelece a posio inicial do canto superior
esquerdo da janela a ser criada.
glutInitWindowSize (int width, height)
Estabelece o tamanho (em pixels) da janela a ser criada.

22

Programa OpenGL/GLUT - Inicializao


Criao da(s) janela(s)
int glutCreateWindow (char* nome)
Cria uma nova janela primria (top-level)
Nome tipicamente usado para rotular a janela
O nmero inteiro retornado usado pelo GLUT
para identificar a janela

23

Programa OpenGL/GLUT - Inicializao


Outras inicializaes
Aps a criao da janela costme configurar
variveis de estado do OpenGL que no mudaro
no decorrer do programa. Por exemplo:
Cor do fundo
Tipo de sombreamento de desejado

24

Exemplo uma aplicao

25

Exemplo uma aplicao

26

Rendering

27

Primitivas de Desenho
glBegin ( PRIMITIVA );
especificao de vrtices, cores,
coordenadas de textura, propriedades
de material

glEnd ();
Entre glBegin() e glEnd() apenas alguns comandos
podem ser usados. Ex.:
glMaterial
glNormal
glTexCoord

28

Primitivas de Desenho
Uma vez emitido um vrtice (glVertex), este
desenhado com as propriedades (cor, material,
normal, coordenadas de textura etc) registradas
nas variveis de estado correspondentes.
Concluso: Antes de emitir um vrtice, assegurar-se
que cor, material, normal, etc tm o valor certo.

29

Primitivas de Desenho

30

Triangle Strips
Idia fundamental: minimizar volume de vrtices e
consequentemente, minimizar clculos de iluminao,
normais, clipping, etc.

31

Triangle Strips
Strips: possvel descrever um tringulo com
menos de 3 vrtices?
Problema

Para n tringulos, n+2 vrtices


Cada Triangulo: Vi, Vi+1, Vi+2

31

Triangle Strips

31

Triangle Strips

32

Professores:

Aula 7

Contedo:
- OpenGL

Anselmo Montenegro
Esteban Clua

También podría gustarte