OpenGL. Licenciatura em Computação Computação Gráfica - Aula 2 (atualizada em 03 ago. 2017)

Documentos relacionados
OpenGL. Licenciatura em Computação Computação Gráfica - Aula 2 (atualizada em 15/08/2018)

Engenharia Elétrica Computação Gráfica - Aula 2 (atualizada em 22/04/2018)

Computação Gráfica OpenGl 01

CG com OpenGL. Paulo Gandra de Sousa Sistemas Gráficos e Interactivos Instituto Superior de Engenharia do Porto

Introdução a OpenGL. Renato Rodrigues Oliveira da Silva Danilo Medeiros Eler

Introdução a OpenGL. Profª. Alessandra Martins Coelho

Introdução à Programação em OpenGL. Prof. Márcio Bueno

INTRODUÇÃO A OPENGL. Computação Gráfica

OpenGL, GLU e GLUT. GLUT (OpenGL Utility Toolkit) OpenGL. Linguagem. OpenGL. Esqueleto de um programa em PyOpenGL

Desenho de uma matriz de retângulos Serve de base para o exercício das cores

OpenGL. Introdução ao OpenGL. Sistemas de Coordenadas. OpenGL 29/04/2010. Profa. M. Cristina Profa. Rosane. Application Programming Interface (API)

Estrutura de um programa gráfico

Fundamentos de Computação Gráfica

Prof. Fernando V. Paulovich 3 de maio de SCC Computação Gráca

Introdução à OpenGL. SCC0250/ Computação Gráfica

Aula Teórico-Prática nº 2

CG 2013/2014 Primeiro Teste LEIC Alameda/Taguspark

Cap. 4: Janelas, Visores & Recorte Gráfico

Computação Gráfica. 5385: Licenciatura em Engenharia Informática. Cap. 3 Janelas e Visores. Janelas e Visores

OPENGL. Matheus Fuhrmann Stigger [1] e Bruna Cavallero Martins

INF1339 Computação Gráfica Tridimensional. Waldemar Celes. 2 de Agosto de 2010

Introdução Prática à Programação em OpenGL

Capítulo 3 Primeiros Passos em OpenGL Função Desenha Função Teclado Função Inicializa Programa Principal...

Computação Gráfica. Engenharia de Computação. CEFET/RJ campus Petrópolis. Prof. Luis Retondaro. Aula 2. Introdução a OpenGL

Introdução à Computação Gráfica OpenGL Básico. Claudio Esperança Paulo Roma Cavalcanti

Conceitos importantes da Computação Gráfica [3]

Computação Gráfica. Introdução. Tomás A. C. Badan

n À primeira vista: basta desenhar n Uma subrotina para desenhar cada tipo de objeto n Mas... n Como fazer interação? n Como estruturar a cena?

Computação Gráfica - OpenGl 02

António Costa. Paulo Roma Cavalcanti

CG 2015/2016 Primeiro Teste LEIC Alameda/Taguspark. Primeiro Teste

Programação Gráfica 2D com OpenGL (Aulas 22, 24 e 25)

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Taguspark / Alameda. Primeiro Teste 17 de Março de 2012

Introdução ao OpenCV

OpenGL. Professora: Mercedes Gonzales Márquez

Programação Gráfica Cap 2

OpenGL. O que é OpenGL. O Pipeline do OpenGL. Listas de Exposição

LAB. 1. Introdução à OpenGL

OpenGL. Soraia Musse

UNIVERSIDADE FEDERAL FLUMINENSE Pedro Martins Menezes. Um estudo dos estágios dos pipelines gráficos

Professor: Rodrigo Caetano Filgueira

Implementação de uma biblioteca gráfica multiplataforma utilizando OpenGL e GLFW.

Introdução ao OpenGL e à Programação Baseada em Eventos

OpenGL. Introdução ao OpenGL. OpenGL. OpenGL. OpenGL. OpenGL. Profa. M. Cristina Profa. Rosane

Uma API para geração de gráficos

Computação Gráfica. Agostinho Brito. Departamento de Engenharia da Computação e Automação Universidade Federal do Rio Grande do Norte

Computação Gráfica. Prof. André Yoshimi Kusumoto

FCG2006 Prova sobre OpenGL e Rastreamento de Raios

André Tavares da Silva

Visualização. - Aula 4 -

Introdução ao OpenGL. Professora: Maria Cristina Ferreira de Oliveira. Erick Gómez Nieto Agosto, 2011 Introdução ao OpenGL

Transformações Geométricas

OpenGL. Alberto B. Raposo

Introdução a Prática em OpenGL

Prof. Fernando V. Paulovich 3 de maio de SCC Computação Gráca

Computação Gráfica 09

Introdução Geral a Computação Gráfica. Universidade Católica de Pelotas Curso de Engenharia da Computação Disciplina de Computação Gráfica

Computação Gráfica II

Introdução à Computação Gráfica. Claudio Esperança Paulo Roma Cavalcanti

Sistemas de Interfaces com o Usuário e OpenGL (com IUP ou GLUT)

Computação Gráfica - 04

- INF Remoção de faces ocultas Aula 21

INF01046 Fundamentos de Processamento de Imagens Semestre Turma A. Prof. Manuel M. Oliveira

Visualização por Computador: Teoria, Prática e Aplicações

CRAb Grupo de Computação Gráfica Departamento de Computação UFC

CG 2015/2016 Prova de Repescagem LEIC Alameda/Taguspark. 12 de Janeiro de 2016

CIV2802 Sistemas Gráficos para Engenharia Luiz Fernando Martha André Pereira

Sumário. Introdução Câmera sintética Window-to-Viewport Exercício. 29-May-13 Leandro Tonietto!2

Programação 2012/2013 1º Semestre MEEC Laboratório 2 Semana de 22 de Outubro de 2012

Comparação entre as bibliotecas gráficas. OpenGL e Direct3D. Aluno:Alexandre Otto Strube Orientador: Paulo César Rodacki Gomes

INF01046 Fundamentos de Processamento de Imagens. Prof. Manuel M. Oliveira

LISTA DE ATIVIDADES Semestre Letivo 2018/1

OpenGL. Sumário COMPUTAÇÃO GRÁFICA E INTERFACES. Introdução. Introdução. Carlos Carreto

Paulo Sérgio Rodrigues. Exercícios de Laboratório

OpenGL. Computação Gráfica ISEL/DEETC/SP Computação Gráfica

LISTA DE ATIVIDADES Semestre Letivo 2018/1

OpenGL 3.* INF Rendering em Tempo Real. Waldemar Celes Departamento de Informática, PUC-Rio

Transformações Geométricas

Introdução a Programação de Jogos

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Alameda / Taguspark. Terceiro Teste 19 de Maio de 2012

CAPÍTULO II VISUALIZAÇÃO E APLICAÇÕES GRÁFICAS 2D 3 1- PONTOS E RETAS NO OPENGL 3. 2 TECLADO E MOUSE (Callbacks) 15 3 CURVAS PARAMÉTRICAS 20

Curso de C. Introdução by Arnaldo V. Moura e Daniel F. Ferber 3/10/ :43 AM

OpenGL. Conceitos Básicos. Waldemar Celes. Tecgraf/PUC-Rio

OpenGL. Conceitos Básicos. Waldemar Celes. Tecgraf/PUC-Rio. OpenGL: o que é? Interface para programador de aplicação. Aplicação API abstrata

OpenGL. 35T56 Sala 3E3 Bruno Motta de Carvalho DIMAp Sala 15 Ramal 227 DIM102

Administração de Sistemas GNU/Linux

Computação Gráfica OpenGl 03

Plano de Ensino de Disciplina Ciência da Computação 2º / 2016

Prof. Fernando V. Paulovich 3 de maio de SCC Computação Gráca

Seleção & feedback. Módulo 12. Sistemas Gráficos e Interação. Filipe Pacheco SGRAI 2017/18 DEI-ISEP 333. Instituto Superior de Engenharia do Porto

Exercício IV (2012/I)

Java 3D. Java: Independência de plataforma. Adailton J. A. da Cruz Alberto B. Raposo. Bytecode Java. Código x86. Java VM. Java VM.

Introdução Programando com OpenGL Exemplos. O que é OpenGL? [1]

Introdução ao OpenGL

Prof. Dr. Leandro Alves Neves. Conceitos Fundamentais. Algoritmos de Conversão Matricial.

Teclado Virtual. MAC0420/MAC5744 Introdução Computação Gráfica. IME Instituto de Matemática e Estatística USP Universidade de São Paulo

Material sobre Funções AEDS 1

6 Arquitetura do Sistema

Revisão C++ - Parte 1

Transcrição:

Computação Gráfica - Aula 2 (atualizada em 03 ago. 2017) glaucius@pelotas.ifsul.edu.br OpenGL O que é OpenGL? OpenGL é uma biblioteca de rotinas gráficas de modelagem, manipulação de objetos e exibição tridimensional que permite a criação de aplicações que usam Computação Gráfica. Seus recursos permitem ao usuário criar objetos gráficos com qualidade, de modo rápido, além de incluir recursos avançados de animação, tratamento de imagens e texturas é possível ter visualização em vários ângulos. A biblioteca OpenGL foi introduzida em 1992 pela Silicon Graphics, no intuito de conceber uma API (Interface de Programação de Aplicação) gráfica independente de dispositivos de exibição. Com isto, seria estabelecida uma ponte entre o processo de modelagem geométrica de objetos, situadas em um nível de abstração mais elevado, e as rotinas de exibição e de processamento de imagens implementadas em dispositivos (hardware) e sistemas operacionais específicos. A função utilizada pelo OpenGL para desenhar um ponto na tela, por exemplo, possui os mesmos nomes e parâmetros em todos os sistemas operacionais nos quais OpenGL foi implementada, e produz o mesmo efeito de exibição em cada um destes sistemas. Diante das funcionalidades providas pelo OpenGL, tal biblioteca tem se tornado um padrão amplamente utilizado na indústria de desenvolvimento de aplicações. Este fato tem sido adotado também pela facilidade de aprendizado, pela estabilidade das rotinas e pelos resultados visuais consistentes para qualquer sistema de exibição concordante com este padrão. Diversos jogos, aplicações científicas e comerciais tem utilizado OpenGL como ferramenta de apresentação de recursos visuais, principalmente com a adoção deste padrão por parte dos fabricantes de placas de vídeo destinadas aos consumidores domésticos. Computação Gráfica - Aula 2 Prof. Glaucius Décio Duarte Página 1

Todas as rotinas do OpenGL são implementadas na linguagem C, tornando fácil sua utilização em qualquer programa escrito em C ou C++. As implementações do OpenGL geralmente proveem bibliotecas auxiliares, tais como a GLU (OpenGL Utility Library), utilizada para realizar tarefas comuns, tais como manipulação de matrizes, geração de superfícies e construção de objetos por composição. As especificações do OpenGL não descrevem as interações entre OpenGL e o sistema de janelas utilizado (Windows, X Window etc.). Assim, tarefas comuns em uma aplicação, tais como criar janelas gráficas, gerenciar eventos provenientes de mouse e teclados, e apresentação de menus ficam a cargo de bibliotecas próprias de cada sistema operacional. Recursos Gráficos da OpenGL Modos de desenho de pontos Ajuste de largura de linhas Aplicação de transparência Ativação/desativação de serrilhamento (aliasing) Mapeamento de superfícies com textura Seleção de janela de desenho Manipulação de fontes/tipos de iluminação e sombreamento Transformação de sistemas de coordenadas Transformações em perspectiva Combinação de imagens (blending) Instalação/Compilação da OpenGL em Linux Como instalar a OpenGL em Linux? Instale as bibliotecas: freeglut3 freeglut3-dev Computação Gráfica - Aula 2 Prof. Glaucius Décio Duarte Página 2

Como administrador, em um terminal, tecle: apt-get update apt-get install freeglut3 freeglut3-dev Como compilar arquivos com inclusão da OpenGL? Inclua ao início do código fonte: #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> Compile assim: g++ codigo_fonte.cpp -o arq_executavel -lglut -lgl -lglu ou, se estiver utilizando a biblioteca matemática (cmath): g++ codigo_fonte.cpp -o arq_executavel -lglut -lgl -lgl lm Como executar o programa compilado?./arq_executavel Exemplo 1 - Desenho de pontos Em um aplicativo para edição de textos gere o seguinte código fonte de programa, em Linguagem C++: #include <GL/gl.h> //biblioteca gl.h #include <GL/glu.h> //biblioteca glu.h #include <GL/glut.h> //biblioteca glut - ferramentas adicionais void Inicializa(void) { //seleciona cor do fundo azul glclearcolor(0, 0, 1, 0); } void Desenha(void) { // Limpa a janela de visualização com a cor de fundo especifcada glclear(gl_color_buffer_bit); Computação Gráfica - Aula 2 Prof. Glaucius Décio Duarte Página 3

} // Especifca que a cor corrente é o branco glcolor3f(1, 1, 1); // Desenha quatro pontos brancos glbegin(gl_points); glvertex2i(290,10); glvertex2i(290,290); glvertex2i(10,290); // Executa os comandos OpenGL glflush(); // Função callback chamada quando o tamanho da janela é alterado void AlteraTamanhoJanela(GLsizei w, GLsizei h) { // Evita a divisao por zero if(h == 0) h = 1; // Especifca as dimensões da Viewport glviewport(0, 0, w, h); // Inicializa o sistema de coordenadas glmatrixmode(gl_projection); glloadidentity(); // Estabelece a janela de seleção (left, right, bottom, top) if (w <= h) gluortho2d(0, 300, 0, 300*h/w); else gluortho2d(0, 300*w/h, 0, 300); } //Declara o tamanho da janela, posicao e modo de //visualizacao(single bufer e RGBA). //Abre uma janela com o título "4 Pontos" na barra de título. //Chama as rotinas de inicializacao. Entra no loop principal e //processa os eventos int main(int argc, char **argv) { //inicializa a lib glut com parametros default glutinit(&argc, argv); //defne o modo de exibição, usando tipo simples e sistema de cor RGB glutinitdisplaymode(glut_single GLUT_RGB); //defne o tamanho da janela glutinitwindowsize(300, 300); //defne a posição da janela glutinitwindowposition(10,10); //defne o título da janela glutcreatewindow("4 Pontos"); //chama funcao callback de exibicao glutdisplayfunc(desenha); Computação Gráfica - Aula 2 Prof. Glaucius Décio Duarte Página 4

//chama funcao para alterar o tamanho da janela corrente glutreshapefunc(alteratamanhojanela); //chama funcao de inicializacao Inicializa(); //realiza um loopback na janela ativa glutmainloop(); //requer que funcao main retorne um inteiro (0) return 0; } Salve o arquivo como pontos.cpp. Gere o código executável, teclando: g++ pontos.cpp -o pontos -lglut -lgl -lglu Execute o programa, teclado:./pontos Exemplo 2 - Desenho de linhas por coordenadas a cada dois pontos glbegin(gl_lines); glvertex2i(290,10); glvertex2i(290,290); glvertex2i(10,290); Exemplo 3 Desenho de linhas por pontos conectados glbegin(gl_line_strip); glvertex2i(290,10); glvertex2i(290,290); glvertex2i(10,290); Computação Gráfica - Aula 2 Prof. Glaucius Décio Duarte Página 5

Exemplo 4 - Desenho de poligonais glbegin(gl_line_loop); glvertex2i(290,10); glvertex2i(290,290); glvertex2i(10,290); Exemplo 5 Desenho de polígonos preenchidos (válido somente para polígonos convexos) Figura 1 Polígonos convexos e côncavos. Fonte: http://www.aplicaciones.info/decimales/geopla11.jpg Tipos de polígonos: Convexos: todos os ângulos internos são menores que 180 graus. Côncavos: existe pelo menos um ângulo interno maior que 180 graus. glbegin(gl_polygon); glvertex2i(10,100); glvertex2i(105,190); glvertex2i(200,100); glvertex2i(200,10); Computação Gráfica - Aula 2 Prof. Glaucius Décio Duarte Página 6

Exemplo 6 Desenho de quadriláteros preenchidos glbegin(gl_quads); glvertex2i(10,110); glvertex2i(110,110); glvertex2i(110,10); glvertex2i(110,110); glvertex2i(110,220); glvertex2i(220,220); glvertex2i(220,110); Exemplo 7 Desenho de triângulos preenchidos glbegin(gl_triangles); glvertex2i(200,10); glvertex2i(105,190); Estilo de linhas //Estilo das linhas glenable(gl_line_smooth); // abilita o desenho de linha interrompida glenable(gl_line_stipple); // defne máscara gllinestipple(2, 58360); //Desabilita estilo das linhas gldisable(gl_line_smooth); gldisable(gl_line_stipple); A função gllinestipple(factor, pattern) é utilizada para definir qual padrão exatamente você quer aplicado à linha. O parâmetro do padrão representa 16 bits que definem onde a linha será pintada. Por exemplo, o padrão 0x0F0F representa em binário: Computação Gráfica - Aula 2 Prof. Glaucius Décio Duarte Página 7

00000000111111110000000011111111. Agora, simplesmente imagine uma linha onde tem 1s e nenhuma onde tem zeros. Na verdade, o padrão é desenhado ao contrário, do último 1 até o primeiro. Cada bit será considerado um número de vezes igual ao fator. Então um padrão que comece com: 01110111 será encarado como 000111111111000111111111 para um fator igual a 3. Vejamos graficamente alguns exemplos, retirados do próprio manual da OpenGL: Espessura das linhas gllinewidth(3); Tamanho dos pontos glpointsize(5); Computação Gráfica - Aula 2 Prof. Glaucius Décio Duarte Página 8