Introdução ao OpenGL
OpenGL
 Open Graphic Library
 Biblioteca de rotinas gráficas e modelagens
bidimensional (2d) e tridimensional (3d)
extremamente portável e rápida
 Incorpora diversos algoritmos otimizados para
desenho de primitivas gráficas, mapeamento de
texturas e efeitos especiais
 Gerenciado por um consórcio formado pelas principais
empresas da área
 3Dlabs, Apple Computer, NVIDIA, SGI e SUN
 Freqüentes revisões proporciona a incorporação das
mais recentes técnicas e da evolução do hardware
OpenGL
 Usado na construção de ferramentas CAD, programas
de modelagem, jogos, etc.
 Funcionalidades
 Desenho de primitivas gráficas
 Iluminação
 Coloração
 Mapeamento de texturas
 Transparências
 Animações
OpenGL
 Restrições
 As funcionalidades fornecidas pelo OpenGL são de baixo
nível
 Não fornecem funcionalidades de gerenciamento de janelas
 Solução
 Extensão da OpenGL através de novas bibliotecas


GLU (OpenGL Utility Library)
 Matrizes de projeção
 Orientação da visualização
 Desenho de superfícies quádricas
GLUT (OpenGL Utility Toolkit)
 Criação de janelas e menus
 Gerenciamento de janelas e eventos
OpenGL – Padronização de nomes
<PrefixoBiblioteca> <ComandoRaiz> <ContadorArgumentosOpc> <TipoArgumentosOp>
void glColor3f(Glfloat red, Glfloat green, Glfloat blue)
Argumento
gl
Prefixo que representa a biblioteca OpenGl
color
Comando raiz que representa a funcionalidade da função
3
Número de argumentos que a função possui
f
Indica que os argumentos são valores de ponto flutuante
•Os duas ultimas partes do padrão são opcionais
•Funções das bibliotecas Glu e GLUT não as utilizam
OpenGL – Primeiros Passos
#include <stdlib.h>
#include <GL/openglut.h>
int main(void)
{
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400,400);
glutCreateWindow("Primeiro programa OpenGL");
//Inicializa();
//glutDisplayFunc(Desenha);
//glutKeyboardFunc(Teclado);
glutMainLoop();
return 0;
}
void Desenha(void)
{
glClearColor(1,1,1,0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,0,0);
glBegin(GL_TRIANGLES);
glVertex3f(-0.5, -0.5, 0);
glVertex3f(0.0, 0.5, 0);
glVertex3f(0.5, -0.5, 0);
glEnd();
glFlush();
}
void Teclado(unsigned char key, int x, int y)
{
if (key == 27)
exit(0);
}
void Inicializa(void)
{
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-1.0,1.0,-1.0,1.0);
glMatrixMode(GL_MODELVIEW);
}
Tratamento de eventos
 void glutReshapeFunc(AlteraTamanhoTela)
 void <nomeFunção>(int largura, int altura);
 void glutSpecialFunc(TeclasEspeciais)
 void <nomeFunção>(int tecla, int x, int y);
 void glutMouseFunc(GerenciaMouse)
 void <nomeFunção>(int botao, int estado,
int x, int y)
 void glutMotionFunc
(MoveMouseBotãoPressionado)
 void <nomeFunção>(int x, int y);
 void
glutPassiveMotionFunc(MoveMouse)
 void <nomeFunção>(int x, int y);
 void glutIdleFunc(Idle)
 void <nomeFunção>(void)
Constantes GLUT para eventos
do mouse
Valor
Descrição
GLUT_LEFT_BUTTON
Informa que foi pressionado o botão esquerdo
GLUT_MIDDLE_BUTTON
Informa que foi pressionado o botão do meio
GLUT_RIGHT_BUTTON
Informa que foi pressionado o botão direito
Valor
Descrição
GLUT_DOWN
Informa que o botão foi pressionado
GLUT_UP
Informa que o botão foi precionado
Constantes GLUT para eventos
de teclas especiais
Valor
Tecla pressionada
GLUT_KEY_F1
Tecla F1
GLUT_KEY_Fn
Tecla Fn
GLUT_KEY_F12
Tecla F12
GLUT_KEY_LEFT
Tecla direção esquerda
GLUT_KEY_RIGHT
Tecla direção direita
GLUT_KEY_UP
Tecla direção cima
GLUT_KEY_DOWN
Tecla direção baixo
GLUT_KEY_PAGE_UP
Tecla PageUp
GLUT_KEY_PAGE_DOWN
Tecla PageDown
GLUT_KEY_END
Tecla End
GLUT_KEY_INSERT
Tecla Insert
Desenhos Bidimencionais
Valor
Tecla pressionada
GL_POINTS
Desenha pontos
GL_LINES
Desenha segmentos de linha
GL_LINE_STRIP
Desenha segmentos de linha conectados
GL_LINE_LOOP
Desenha segmentos de linha conectados, unindo o
primeiro ao ultimo
GL_POLYGON
Desenha um polígono convexo
GL_TRIANGLES
Desenha triângulos
GL_TRIANGLE_STRIP
Desenha triângulos conectados
GL_TRIANGLE_FAN
Desenha triângulos a partir de um ponto central
GL_QUADS
Desenha quadriláteros
GL_QUAD_STRIP
Desenha quadriláteros conectados
Desenhos Bidmencionais
#include <math.h>
float ang;
glBegin(GL_POINTS);
for(ang=0;ang<2*M_PI;ang+=M_PI/7.0)
glVertex2f(20*cos(ang), 20*sin(ang));
glEnd();
Criação de menus
 int glutCreateMenu(void (*func) (int value))
 func – função responsável pelo tratamento do menu
 retorna um inteiro que identifica o menu criado
 void glutAddMenuEntry(char *name, int value)
 void glutAddSubMenu(char *name, int menu)
 name – nome do sub-menu
 menu – valor inteiro correspondente ao menu ao qual o sub-menu
deve ser adcionado
 void glutAttachMenu(int button)
 Associa um botão ao menu
 void glutDetachMenu(int button)
 Desassocia o menu
Alterando Propriedades dos
Desenhos
 void glPointSize(GLfloat size)
 void glLineWidth(Glfloat width)
 Altera a espessura da linha
 glEnable(GL_LINE_STIPPLE)
 Habilita a variável de estado que armazena o estilo de
linha
 void glLineStipple(GLint factor, Glushort pattern)
 Factor – valor entre 1 e 256 que altera o número de pixels
do tracejado
 Pattern – valor de 16 bits utilizado p/ especificar o tipo
de tracejado
Exibição de Textos
 Utiliza a GLUT para exibição de textos na tela gráfica
 Dois tipos de fontes de caracteres
 Segmentos de reta (STROKE)

Mais flexíveis (escalável e rotacionável)
 Imagens (BITMAP)

Mais rápidas
 As funções de texto presentes na GLUT são básicas,
para textos com melhor qualidades devem ser
utilizadas bibliotecas específicas, como a FTGL
(http://homepages.paradise.net/henryj/code)
 void glutBitmapCharacter(void *font, int character)
Valor
Descrição
GLUT_BITMAP_8_BY_13
Fonte padrão 8x13
GLUT_BITMAP_9_BY_15
Fonte padrão 9x15
GLUT_BITMAP_TIMES_ROMAN_10
Fonte times roman tamanho 10
GLUT_BITMAP_TIMES_ROMAN_24
Fonte times roman tamanho 24
GLUT_BITMAP_HELVITICA10
Fonte helvítica, tamanho 10
GLUT_BITMAP_HELVITICA12
Fonte helvítica, tamanho 12
GLUT_BITMAP_HELVITICA18
Fonte helvítica, tamanho 18
 void glRasterPos2f, void glRasterPos2i, void glRasterPos2d
 Modifica a posição matricial corrente utilizada para desenhar
o texto
 void glutStrokeCharacter(void *font, int character)
 Exibe caracteres formados por segmentos de reta
 GLUT_STROKE_ROMAN e
GLUT_STROKE_MONO_ROMAN
 Funções que afetam as linhas também afetam as letras
escritas com este método
void DesenhaTexto(void *font, char *string){
while(*string)
glutBitmapCharacter(*font, *string++);
}
*obs: Utilizar a função glRasterPos2f(int x,int y) para
posicionar o texto
Download

OpenGL