1.21k likes | 1.48k Views
OpenGL – Uma abordagem prática e objetiva. Última atualização: 16-nov-2008. 1 - Introdução. Computação Gráfica é uma área da Ciência da Computação que se dedica ao estudo e ao desenvolvimento de técnicas e algoritmos para geração, manipulação e análise de imagens pelo computador. Introdução.
E N D
OpenGL – Uma abordagem prática e objetiva Última atualização: 16-nov-2008
1 - Introdução • Computação Gráfica é uma área da Ciência da Computação que se dedica ao estudo e ao desenvolvimento de técnicas e algoritmos para geração, manipulação e análise de imagens pelo computador
Introdução • aplicações gráficas • processamento gráfico
Pipeline • A palavra pipeline é usada para descrever um processo composto de duas ou mais etapas para geração de uma imagem
Framebuffer • framebuffer – memória do dispositivo gráfico
No DEV-C++ • <alt>+<P> --> abre o menu Projeto • Selecionar Opções de Projeto • Selecione a aba Parâmetros e em Linker verifique: -lglut32 -lopengl32 -lglu32 -lwinmm -lgdi32
3 – Primeiros passos em OpenGL • Função Desenha • Função Teclado • Função Inicializa • Função Principal
Primeiros passos em OpenGL • Veja exemplo em: http://www.novatec.com.br/livros/opengl/
Funções - Exemplos • void glColor(GLint red, GLint green, GLint blue); • void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
5 – GLUT – GL Utility Toolkit • Responsável pelo gerenciamento de janelas e tratamento de eventos
GLUT - Funções // Especifica a posição inicial da janela GLUT glutInitWindowPosition(int x, int y); // Especifica o tamanho inicial em pixels da janela GLUT glutInitWindowSize(int largura, int altura);
Criação da Janela // Cria a janela passando como argumento o título da mesma glutCreateWindow(char *string);
Funções para tratamento de eventos • glutDisplayFunc • glutReshapeFunc • glutKeyboardFunc • glutSpecialFunc • glutMouseFunc • glutMotionFunc • glutPassiveMotionFunc • glutIdleFunc
6 – Máquinas de Estado • Uma máquina de estados corresponde a um dispositivo ou sistema que guarda o estado de um ou mais elementos em um momento específico • Comandos de entrada são utilizados para alterar este estado e/ou gerar uma função de saída
Máquina de estados • OpenGL é considerado uma máquina de estados • É composto de várias variáveis de estado que armazenam determinado valor e podem ser alteradas pela chamada a uma função • Cada variável de estado possui um valor padrão (default) que pode ser alterado
Funções para alteração de estado • void glEnable(GLenum cap) • void glDisable(GLenum cap) • GLBoolean glIsEnabled(GLenum cap) --> verifica o estado que se encontra uma propriedade
Variáveis de estado Variáveis de estado relacionadas são agrupadas em um atributo • void glPushAttrib(GLbitfield mask) • void glPopAttrib(void)
7 – Definição do Espaço de Trabalho • modelo • coordenadas geométricas • sistema de referencia • Sistema de Referência do Universo (SRU) • Sistema de Referência da Tela (SRT)
Definições • Modelo-> é uma representação computacional de um objeto, isto é, corresponde a uma estrutura de dados que tem sua descrição geométrica • Imagem -> matriz de pontos • Universo -> é a região do plano (ou do espaço) utilizada em uma aplicação
Definições • coordenadas geométricas • sistema de referência -> define uma origem em relação a qual todos os posicionamentos do universo são descritos.
Sistema de Referencia do Universo • Sistema de Referência do Universo (SRU) -> consiste em um plano cartesiano com dois eixos (x e y) perpendiculares entre si e que se cruzam na origem
Sistema de Referência da Tela • Sistema de Referência da Tela (SRT) -> no SRT a origem fica no canto superior esquerdo do monitor
Definições • modelos são criados independentes do dispositivo • windows ou janela de seleção --> é a área do universo que delimita a região de interesse do usuário em um dado instante • viewport ou janela de exibição --> define a área do monitor onde desejamos exibir o conteúdo da window
Funções de conversão SRU para SRT • void glViewport(GLint x, GLint y, GLsizei largura, GLsizei altura); • void gluOrtho2d(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top)
7.2 Visualização Tridimensional • Câmera Sintética • Projeção • Funções OpenGL
Visualização Tridimensional • Quando se trabalha em três dimensões, o SRU (Sistema de Referência do Universo) passa a ser composto por três eixos ortogonais entre si (x, y e z) e pela origem (0.0, 0.0, 0.0)
Visualização Tridimensional • Projeção: é a operação de obter representações bidimensionais de objetos tridimensionais • Raios de projeção (segmentos de reta) chamados projetantes • Plano de projeção
Projeções Geométricas Planares • Projeção Paralela Ortográfica --> as projetantes são paralelas entre si, passam pelos pontos qeu definem os objetos e interseccionam o plano com um ângulo de 90º • Projeção Perspectiva --> as projetantes emanam de um único ponto que está a uma distancia finita do plano de projeção e passam pelos pontos que definem um objeto
Funções OpenGL • void gluLookAt() --> permite especificar a posição e a orientação da câmera sintética ou observador virtual • void gluPerspective() --> utilizada para estabelecer a projeção perspectiva • void glOrtho() --> função utilizada para estabelecer projeção ortográfica
Funções OpenGL • void glLoadIdentity(void) --> função utilizada para inicializar o sistema de coordenadas (carrega a matriz identidade) • void glMatrixMode(GLenum mode) --> permite selecionar com qual matriz será trabalhado • GL_MODELVIEW --> seleciona a matriz do modelo (de modelagem e transformação) • GL_PROJECTION --> seleciona a matriz de projeção • GL_TEXTURE --> seleciona a matriz de textura
Funções GLUT • void glutWireCube(GLdouble tamanho) --> função da biblioteca GLUT responsável pelo traçado de um cubo
8 – Desenhos bidimensionais • 8.1 Primitivas Gráficas • 8.2 Cores e Estilos de Traçados de Primitivas • 8.3 Exibição de Texto • 8.4 Desenhos de Curvas Paramétricas
8.1 - Primitivas Gráficas • Primitivas gráficas consistem nos elementos básicos que compõem um desenho, tais como pontos, segmentos de reta e círculos
Primitivas Gráficas • vértices • objetos • cenas • modelos
Desenho de primitivas glBegin(<argumento>); // lista de vértices glEnd(); onde <argumento>determina qual objeto será desenhado
Primitivas Gráficas em OpenGL (valores usados em <argumento>) • GL_POINTS – desenha pontos • GL_LINES – desenha linhas • GL_LINE_STRIP – desenha segmentos de linhas conectados • GL_LINE_LOOP – desenha segmentos de linhas conectados, unindo o primeiro ao último • GL_POLYGON – desenha um polígono • GL_TRIANGLES – desenha um triângulo • GL_TRIANGLES_STRIP – desenha um triângulos conectados • GL_TRIANGLES_FAN – desenha triângulos a partir de um ponto central • GL_QUADS – desenha quadriláteros • GL_QUADS_STRIP – desenha quadriláteros conectados
Exemplos glBegin(GL_LINES); glVertex2f(12.0f, 12.0f); glVertex2f(100.5f, 100.5f); glEnd(); Desenha uma linha entre os dois vértices
8.2 Cores e Estilos de Traçado de Primitivas • Primitivas podem ser desenhadas com diversas aparências como: cores, estilos e padrões diferentes
Exemplo de Funções Alteração do tamanho dos pontos • void glPointSize(GLfloat tamanho) Linhas: alteração de cor, espessura e estilo • void glLineWidth(GLfloat largura)
8.3 Exibição de Texto • Não suportado diretamente pela OpenGL, porém suportado pela GLUT • Suporta dois tipos de fontes de caracteres: • strokes (segmentos de reta) -->mais flexíveis (podem ser escaladas e rotacionadas) • bitmap (formando por imagens que representam caracteres) --> mais rápidas para serem exibidas
Caracteres – bitmap • void glutBitmapCharacter(void *font, int character), onde: • font: define o tamanho da fonte • caracter: define o caracter
Constantes para tipos de fontes • GLUT_BITMAP_8_BY_13 • GLUT_BITMAP_9_BY_15 • GLUT_BITMAP_TIMES_ROMAN_10 • GLUT_BITMAP_TIMES_ROMAN_24 • GLUT_BITMAP_HELVETICA_10 • GLUT_BITMAP_HELVETICA_12 • GLUT_BITMAP_HELVETICA_18
Posicionamento • void glRasterPos2f(x,y)
Exibição de caracteres usando font stroke • void glutStrokeCharacter(void *font, int caracter), onde • font: define o nome da fonte (GLUT_STROKE_ROMAN e GLUT_STROKE_MONO_ROMAN) • caractere: define o código ASCII do caractere a ser exibido