Computação Gráfica

20
Introdução ao OpenGL

description

Computação Gráfica. 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 - PowerPoint PPT Presentation

Transcript of Computação Gráfica

Page 1: Computação Gráfica

Introdução ao OpenGL

Page 2: Computação Gráfica

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: Computação Gráfica

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: Computação Gráfica

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: Computação Gráfica

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

Page 6: Computação Gráfica

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: Computação Gráfica

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: Computação Gráfica

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

Page 9: Computação Gráfica

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: Computação Gráfica

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: Computação Gráfica

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

Page 12: Computação Gráfica

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

Page 13: Computação Gráfica

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

Page 14: Computação Gráfica

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: Computação Gráfica

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

Page 16: Computação Gráfica

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: Computação Gráfica

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: Computação Gráfica

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

Page 19: Computação Gráfica

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: Computação Gráfica

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