20
Introdução ao OpenGL

Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

Embed Size (px)

Citation preview

Page 1: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

Introdução ao OpenGL

Page 2: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

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

Page 3: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

OpenGLUsado na construção de ferramentas CAD,

programas de modelagem, jogos, etc.Funcionalidades

Desenho de primitivas gráficasIluminaçãoColoraçãoMapeamento de texturasTransparênciasAnimações

Page 4: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

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

Page 5: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

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

Page 6: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

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;}

Page 7: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

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); }

Page 8: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

void Inicializa(void){ glMatrixMode(GL_PROJECTION); gluOrtho2D(-1.0,1.0,-1.0,1.0); glMatrixMode(GL_MODELVIEW); }

Page 9: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

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)

Page 10: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

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)

Page 11: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

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

Page 12: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

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 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

Page 13: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

Desenhos BidimencionaisValor 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

Page 14: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

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();

Page 15: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

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 adcionado

void glutAttachMenu(int button)Associa um botão ao menu

void glutDetachMenu(int button)Desassocia o menu

Page 16: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

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

Page 17: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

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)

Page 18: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

void glutBitmapCharacter(void *font, int character)

void glRasterPos2f, void glRasterPos2i, void glRasterPos2dModifica a posição matricial corrente utilizada para

desenhar o texto

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

Page 19: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

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

Page 20: Introdução ao OpenGL. OpenGL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável

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