Você está na página 1de 34

1

Professores:

Aula 7

Anselmo Montenegro Esteban Clua

Contedo:
- OpenGL

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

Anselmo Montenegro Esteban Clua

Contedo:
- OpenGL

Você também pode gostar