Computao Grfica Introduo ao Open GL Open GL

  • Slides: 20
Download presentation
Computação Gráfica Introdução ao Open. GL

Computação Gráfica Introdução ao Open. GL

Open. GL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2 d)

Open. GL Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2 d) e tridimensional (3 d) 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 3 Dlabs, 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

Open. GL Usado na construção de ferramentas CAD, programas de modelagem, jogos, etc. Funcionalidades

Open. GL 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

Open. GL Restrições As funcionalidades fornecidas pelo Open. GL são de baixo nível Não

Open. GL Restrições As funcionalidades fornecidas pelo Open. GL são de baixo nível Não fornecem funcionalidades de gerenciamento de janelas Solução Extensão da Open. GL através de novas bibliotecas GLU (Open. GL Utility Library) Matrizes de projeção Orientação da visualização Desenho de superfícies quádricas GLUT (Open. GL Utility Toolkit) Criação de janelas e menus Gerenciamento de janelas e eventos

Open. GL – Padronização de nomes <Prefixo. Biblioteca> <Comando. Raiz> <Contador. Argumentos. Opc> <Tipo.

Open. GL – Padronização de nomes <Prefixo. Biblioteca> <Comando. Raiz> <Contador. Argumentos. Opc> <Tipo. Argumentos. Op> void gl. Color 3 f(Glfloat red, Glfloat green, Glfloat blue) Argumento gl Prefixo que representa a biblioteca Open. Gl 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

Open. GL – Primeiros Passos #include <stdlib. h> #include <GL/openglut. h> int main(void) {

Open. GL – Primeiros Passos #include <stdlib. h> #include <GL/openglut. h> int main(void) { glut. Init. Display. Mode(GLUT_SINGLE | GLUT_RGB); glut. Init. Window. Size(400, 400); glut. Create. Window("Primeiro programa Open. GL"); //Inicializa(); //glut. Display. Func(Desenha); //glut. Keyboard. Func(Teclado); glut. Main. Loop(); return 0; }

void Desenha(void) { gl. Clear. Color(1, 1, 1, 0); gl. Clear(GL_COLOR_BUFFER_BIT); gl. Color 3

void Desenha(void) { gl. Clear. Color(1, 1, 1, 0); gl. Clear(GL_COLOR_BUFFER_BIT); gl. Color 3 f(1, 0, 0); gl. Begin(GL_TRIANGLES); gl. Vertex 3 f(-0. 5, 0); gl. Vertex 3 f(0. 0, 0. 5, 0); gl. Vertex 3 f(0. 5, -0. 5, 0); gl. End(); gl. Flush(); } void Teclado(unsigned char key, int x, int y) { if (key == 27) exit(0); }

void Inicializa(void) { gl. Matrix. Mode(GL_PROJECTION); glu. Ortho 2 D(-1. 0, 1. 0); gl.

void Inicializa(void) { gl. Matrix. Mode(GL_PROJECTION); glu. Ortho 2 D(-1. 0, 1. 0); gl. Matrix. Mode(GL_MODELVIEW); }

Tratamento de eventos void glut. Reshape. Func(Altera. Tamanho. Tela) void <nome. Função>(int largura, int

Tratamento de eventos void glut. Reshape. Func(Altera. Tamanho. Tela) void <nome. Função>(int largura, int altura); void glut. Special. Func(Teclas. Especiais) void <nome. Função>(int tecla, int x, int y); void glut. Mouse. Func(Gerencia. Mouse) void <nome. Função>(int botao, int estado, int x, int y)

 void glut. Motion. Func (Move. Mouse. Botão. Pressionado) void <nome. Função>(int x, int

void glut. Motion. Func (Move. Mouse. Botão. Pressionado) void <nome. Função>(int x, int y); void glut. Passive. Motion. Func(Move. Mouse) void <nome. Função>(int x, int y); void glut. Idle. Func(Idle) void <nome. Função>(void)

Constantes GLUT para eventos do mouse Valor Descrição GLUT_LEFT_BUTTON Informa que foi pressionado o

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_F 1 Tecla F

Constantes GLUT para eventos de teclas especiais Valor Tecla pressionada GLUT_KEY_F 1 Tecla F 1 GLUT_KEY_Fn Tecla Fn GLUT_KEY_F 12 Tecla F 12 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 Page. Up GLUT_KEY_PAGE_DOWN Tecla Page. Down 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

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; gl. Begin(GL_POINTS); for(ang=0; ang<2*M_PI; ang+=M_PI/7. 0) gl.

Desenhos Bidmencionais #include <math. h> float ang; gl. Begin(GL_POINTS); for(ang=0; ang<2*M_PI; ang+=M_PI/7. 0) gl. Vertex 2 f(20*cos(ang), 20*sin(ang)); gl. End();

Criação de menus int glut. Create. Menu(void (*func) (int value)) func – função responsável

Criação de menus int glut. Create. Menu(void (*func) (int value)) func – função responsável pelo tratamento do menu retorna um inteiro que identifica o menu criado void glut. Add. Menu. Entry(char *name, int value) void glut. Add. Sub. Menu(char *name, int menu) name – nome do sub-menu – valor inteiro correspondente ao menu ao qual o sub-menu deve ser adcionado void glut. Attach. Menu(int button) Associa um botão ao menu void glut. Detach. Menu(int button) Desassocia o menu

Alterando Propriedades dos Desenhos void gl. Point. Size(GLfloat size) void gl. Line. Width(Glfloat width)

Alterando Propriedades dos Desenhos void gl. Point. Size(GLfloat size) void gl. Line. Width(Glfloat width) Altera a espessura da linha gl. Enable(GL_LINE_STIPPLE) Habilita a variável de estado que armazena o estilo de linha void gl. Line. Stipple(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

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 glut. Bitmap. Character(void *font, int character) Valor Descrição GLUT_BITMAP_8_BY_13 Fonte padrão 8

void glut. Bitmap. Character(void *font, int character) Valor Descrição GLUT_BITMAP_8_BY_13 Fonte padrão 8 x 13 GLUT_BITMAP_9_BY_15 Fonte padrão 9 x 15 GLUT_BITMAP_TIMES_ROMAN_10 Fonte times roman tamanho 10 GLUT_BITMAP_TIMES_ROMAN_24 Fonte times roman tamanho 24 GLUT_BITMAP_HELVITICA 10 Fonte helvítica, tamanho 10 GLUT_BITMAP_HELVITICA 12 Fonte helvítica, tamanho 12 GLUT_BITMAP_HELVITICA 18 Fonte helvítica, tamanho 18 void gl. Raster. Pos 2 f, void gl. Raster. Pos 2 i, void gl. Raster. Pos 2 d Modifica a posição matricial corrente utilizada para desenhar o texto

 void glut. Stroke. Character(void *font, int character) Exibe caracteres formados por segmentos de

void glut. Stroke. Character(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 Desenha. Texto(void *font, char *string){ while(*string) glut. Bitmap. Character(*font, *string++); } *obs: Utilizar

void Desenha. Texto(void *font, char *string){ while(*string) glut. Bitmap. Character(*font, *string++); } *obs: Utilizar a função gl. Raster. Pos 2 f(int x, int y) para posicionar o texto