Post on 19-Mar-2016
description
Introdução ao OpenGL
OpenGLOpen Graphic LibraryBiblioteca 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 área3Dlabs, Apple Computer, NVIDIA, SGI e SUNFreqüentes revisões proporciona a incorporação
das mais recentes técnicas e da evolução do hardware
OpenGLUsado na construção de ferramentas CAD,
programas de modelagem, jogos, etc.Funcionalidades
Desenho de primitivas gráficasIluminaçãoColoraçãoMapeamento de texturasTransparênciasAnimações
OpenGLRestrições
As funcionalidades fornecidas pelo OpenGL são de baixo nível
Não fornecem funcionalidades de gerenciamento de janelas
SoluçãoExtensã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)
Argumentogl Prefixo que representa a biblioteca OpenGlcolor Comando raiz que representa a funcionalidade
da função3 Número de argumentos que a função possuif 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 eventosvoid
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çãoGLUT_LEFT_BUTTON Informa que foi pressionado o botão
esquerdoGLUT_MIDDLE_BUTTON Informa que foi pressionado o botão do
meioGLUT_RIGHT_BUTTON Informa que foi pressionado o botão
direito
Valor DescriçãoGLUT_DOWN Informa que o botão foi
pressionadoGLUT_UP Informa que o botão foi
precionado
Constantes GLUT para eventos de teclas especiais
Valor Tecla pressionada
GLUT_KEY_F1 Tecla F1GLUT_KEY_Fn Tecla Fn
GLUT_KEY_F12 Tecla F12GLUT_KEY_LEFT Tecla direção esquerdaGLUT_KEY_RIGHT Tecla direção direitaGLUT_KEY_UP Tecla direção cimaGLUT_KEY_DOWN Tecla direção baixoGLUT_KEY_PAGE_UP Tecla PageUpGLUT_KEY_PAGE_DOWN Tecla PageDownGLUT_KEY_END Tecla EndGLUT_KEY_INSERT Tecla Insert
Desenhos BidimencionaisValor Tecla pressionadaGL_POINTS Desenha pontosGL_LINES Desenha segmentos de linhaGL_LINE_STRIP Desenha segmentos de linha conectadosGL_LINE_LOOP Desenha segmentos de linha conectados,
unindo o primeiro ao ultimoGL_POLYGON Desenha um polígono convexoGL_TRIANGLES Desenha triângulosGL_TRIANGLE_STRIP Desenha triângulos conectadosGL_TRIANGLE_FAN Desenha triângulos a partir de um ponto
centralGL_QUADS Desenha quadriláterosGL_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 menusint glutCreateMenu(void (*func) (int value))
func – função responsável pelo tratamento do menuretorna um inteiro que identifica o menu criado
void glutAddMenuEntry(char *name, int value)void glutAddSubMenu(char *name, int menu)
name – nome do sub-menumenu – valor inteiro correspondente ao menu ao qual o
sub-menu deve ser adcionadovoid glutAttachMenu(int button)
Associa um botão ao menuvoid glutDetachMenu(int button)
Desassocia o menu
Alterando Propriedades dos Desenhosvoid glPointSize(GLfloat size)void glLineWidth(Glfloat width)
Altera a espessura da linhaglEnable(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 tracejadoPattern – valor de 16 bits utilizado p/ especificar o
tipo de tracejado
Exibição de TextosUtiliza a GLUT para exibição de textos na tela
gráficaDois 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)
void glRasterPos2f, void glRasterPos2i, void glRasterPos2dModifica a posição matricial corrente utilizada para
desenhar o texto
Valor DescriçãoGLUT_BITMAP_8_BY_13 Fonte padrão 8x13GLUT_BITMAP_9_BY_15 Fonte padrão 9x15GLUT_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 10GLUT_BITMAP_HELVITICA12 Fonte helvítica, tamanho 12GLUT_BITMAP_HELVITICA18 Fonte helvítica, tamanho 18
void glutStrokeCharacter(void *font, int character)Exibe caracteres formados por segmentos de
retaGLUT_STROKE_ROMAN e
GLUT_STROKE_MONO_ROMANFunçõ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