introdução à opengl

16
Introdução à Computação Gráfica Aula Introdução à OpenGL Herbet Ferreira [email protected] 08/04/2010 1

Upload: herbet-ferreira-rodrigues

Post on 27-Jun-2015

1.460 views

Category:

Education


1 download

DESCRIPTION

Aula sobre OpenGL para a disciplina de Introdução à Computação Gráfica do curso de Ciência da Computação da UFPB no período 2010.1

TRANSCRIPT

Page 1: Introdução à OpenGL

Introdução à Computação Gráfica

Aula – Introdução à OpenGL

Herbet [email protected]

08/04/2010 1

Page 2: Introdução à OpenGL

Introdução à OpenGL

• Open Graphic Library (http://www.opengl.org)

• Biblioteca de rotinas gráficas de modelagens 2D e 3D, extremamente portável e rápida;

• Introduzida em 1992 pela Silicon Graphics;

– Conceber API gráfica independente do dispositivo de exibição

• Gerenciado por um consórcio formado pelas principais empresas da área:

– 3Dlabs, Apple, Nvidia, SGI e SUN;

– Frequentes revisões proporcionam a incorporação das mais recentes técnicase da evoluação do hardware;

• Todas as rotinas são implementadas em C/C++08/04/2010 2

Page 3: Introdução à OpenGL

Características

• Recursos gráficos:– Desenhos de primitivas:

• Pontos, Linhas e Polígonos;

– Iluminação;– Sombreamento;– Mapeamento de Texturas;– Transparência;

• Implementações de OpenGL:– opengl32.dll (Microsoft)– opengl.dll (SGI)– mesa3d (GNU)

08/04/2010 3

Page 4: Introdução à OpenGL

Restrições

• As funcionalidades fornecidas pela OpenGL são de baixo nível;

• Não fornecem funcionalidades e gerenciamento de janelas e tratamento de eventos.

• Solução:– Extensão da OpenGL através de novas bibliotecas– GLU (OpenGL Utility Library)

• Manipulação de matrizes;• Orientação da visualização;• Geração de superfícies quadráticas;

– GLUT (OpenGL Utility Toolkit)• Criação de janelas e menus• Gerenciamento de janelas e interações do usuário

08/04/2010 4

Page 5: Introdução à OpenGL

Programa Básico em OpenGL#include <GL/glut.h> // headers

void Desenha (void) { // rotinas

...

}

int main(int argc, char **argv)

{

glutInit(&argc,argv); // inicia a GLUT

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // define o modo de exibição

glutInitWindowSize(400,350); // tamanho da janela gráfica

glutInitWindowPosition(10,10); // define posição da janela

glutCreateWindow (“Quadrado"); // cria a janela gráfica

glutDisplayFunc(Desenha); // apresentação da cena

Inicializa(); // definir estado inicial da opengl

glutMainLoop(); // inicia o laço gráfico

}

08/04/2010 5

Page 6: Introdução à OpenGL

Cabeçalhos

#include <GL/glut.h>

• Já inclui automaticamente os headers da OpenGL:– #include <GL/gl.h>

– #include <GL/glu.h>

• Se a GLUT não for usada, os cabeçalhos da OpenGL tem que ser incluídos explicitamente.

08/04/2010 6

Page 7: Introdução à OpenGL

Estrutura do Main

• Inicialização da glut:glutInit(&argc, argv);

• Informar o modo do display a ser utilizado:glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);

– GLUT_SINGLE• janela com buffer simples (todos os desenhos serão feitos

nessa janela)

– GLUT_RGB• sistema de cor utilizado será o RGB

08/04/2010 7

Page 8: Introdução à OpenGL

Estrutura do Main

• Definir tamanho, posição inicial e nome da janela criada:glutInitWindowSize (400, 350);

glutInitWindowPosition (10, 10);

glutCreateWindow (“Nome da Janela");

• Definir estado inicial do OpenGL:Inicializa();

void Inicializa(void)

{

glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // cor de fundo da tela

glMatrixMode(GL_PROJECTION); // seleciona matriz de projeção

glLoadIdentity(); // lê a matriz de identidade

gluOrtho2D(0.0, 250.0, 0.0, 250.0); // projeção paralela

}

08/04/2010 8

Page 9: Introdução à OpenGL

Registrando Callbacks

• Callbacks são rotinas que serão chamadas para tratar eventos;

• Para uma rotina callback ser efetivamente chamada, ela precisar ser registrada através da função:glutXXFunc (callback);

– Onde XX designa uma classe de eventos;

– callback é o nome da rotina;

08/04/2010 9

Page 10: Introdução à OpenGL

Callback de desenho

• É a rotina chamada sempre que a janela precisa ser redesenhada;

glutDisplayFunc(Desenha);

void Desenha (void)

{

glClear(GL_COLOR_BUFFER_BIT); // limpa buffers

glColor3f(1.0f, 0.0f, 0.0f); // cor vermelha

glBegin(GL_QUADS); // inicio do desenho

glVertex2i(100,150);

glVertex2i(100,100);

glVertex2i(150,100);

glVertex2i(150,150);

glEnd(); // fim do desenho

glFlush(); // exibe o desenho na tela

}

08/04/2010 10

Page 11: Introdução à OpenGL

Resultado do Exemplo

08/04/2010 11

Page 12: Introdução à OpenGL

Primitivas de Desenho

• Parâmetros de glBegin():– GL_POINTS: cada vértice como simples ponto– GL_LINES: cada par de vértices forma uma reta– GL_LINE_STRIP: traça um grupo de segmentos do

primeiro ao último vértice– GL_LINE_LOOP: traça um grupo de segmentos do primeiro

ao último vértice, e retorna ao primeiro– GL_TRIANGLES: cada trio de vértices como sendo os

vértices de um triângulo– GL_QUADS: cada grupo de 04 vértices como sendo os

vértices de um quadrilátero– GL_POLYGON: grupo de vértices como sendo os vértices de

um polígono

08/04/2010 12

Page 13: Introdução à OpenGL

Primitivas de desenho

08/04/2010 13

Page 14: Introdução à OpenGL

Outros Callbacks

glutKeyboardFunc(keyborad);

– Eventos do teclado

glutSpecialFunc(special);

– Teclas especiais Home, End, PageDown, PageUp

glutMouseFunc(mouse);

– Interação com o muse

glutMotionFunc(motion);

– Movimentos do mouse

08/04/2010 14

Page 15: Introdução à OpenGL

Convenções de Nomes

glVertex3f(x, y);

Número de componentes

2 – (x, y)

3 – (x, y, z)

4 – (x, y, z, w)

Tipo de dado

b – byte

ub – unsigned byte

s – short

us – unsigned short

i – int

ui – unsigned int

f – float

d - double

08/04/2010 15

Page 16: Introdução à OpenGL

Exercícios

1. A partir do programa básico, implemente outras primitivas de desenho da OpenGL.

2. Implemente os algoritmos de traçado de linhas DDA e Bresenham, fazendo a comparação do tempo de execução de cada um para uma mesma reta.

08/04/2010 16