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

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

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

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

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

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

Computação Gráfica OpenGl 01

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

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

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

Transformações Geométricas e Animação

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

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

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

Estrutura de um programa gráfico

António Costa. Paulo Roma Cavalcanti

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

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

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?

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

Fundamentos de Computação Gráfica

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

Introdução a Prática em OpenGL

LAB. 1. Introdução à OpenGL

Aula Teórico-Prática nº 2

Computação Gráfica - OpenGl 02

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

Uma API para geração de gráficos

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

Programação Gráfica Cap 2

André Tavares da Silva

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

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

CG 2013/2014 Primeiro Teste LEIC Alameda/Taguspark

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

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

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

OpenGL. Professora: Mercedes Gonzales Márquez

Computação Gráfica - 06

Computação Gráfica - 04

Interactividade Básica com GLUT e Primitivas Geométricas

Computaçã. Processamento Gráfico Computação Visual. Histórico. Histórico (dispositivos vetoriais) Visão Computacional. Gráfica. Síntese.

OpenGL. Soraia Musse

Primitivas do OpenGL. Tomás Antônio C. Badan

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

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

OpenGL. Alberto B. Raposo

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

Introdução ao OpenGL

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

Professor: Rodrigo Caetano Filgueira

Computação Gráfica. Computação Gráfica. Visão Geral. Sistema Gráfico. Introdução à Computação Gráfica e areas relacionadas

Computaçã. Visão Geral. Sistema Gráfico. Computação Gráfica. Pixels. Sistema Gráfico e o Frame Buffer. Introdução à Computação Gráfica

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

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

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

Rendering 2D com OpenGL e interface gráfica em Qt

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

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

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

feedback Aula 8 Sistemas Gráficos e Interactivos Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa

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

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

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

Computação Gráfica Introdução

Projeções e Transformações em 3D

Transformações Geométricas

Textura e Iluminação

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA DEPARTAMENTO DE INFORMÁTICA APLICADA

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

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

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

Computação Gráfica II

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

PROGRAMAÇÃO OPENGL LIVRO: TEORIA DA COMPUTAÇÃO GRÁFICA

Processamento Gráfico

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

Transformações Geométricas

Visualização. - Aula 4 -

COMPUTAÇÃO GRÁFICA - PROF. MSC. LEANDRO TONIETTO SELEÇÃO DE OBJETOS EM OPENGL - SELECT BUFFER

- INF Remoção de faces ocultas Aula 21

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

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

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

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

Determinação da Visibilidade

Revisões. Módulos Sistemas Gráficos e Interação. Filipe Pacheco SGRAI 2017/18 DEI-ISEP 228. 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.

Desenvolvimento de jogos tridimensionais com OpenGL. Bruno Pereira Evangelista

Computação Gráfica e Áreas Correlatas

Processing Aula 2. Prof. Wallace Lages

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

Computação Gráfica OpenGL 05 3D

IntMu.Lab5. Importe os ficheiros disponibilizados em

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

FCG2006 Prova sobre OpenGL e Rastreamento de Raios

Matriz de transformação

Transcrição:

Introdução à OpenGL SCC0250/0650 - Computação Gráfica Prof. Rosane Minghim https://edisciplinas.usp.br/course/view.php?id=61213 https://edisciplinas.usp.br/course/view.php?id=61210 P.A.E. Diego Cintra e Fábio Felix diegocintra@usp.br, f_diasfabio@usp.br Instituto de Ciências Matemáticas e de Computação (ICMC) Universidade de São Paulo (USP) 19 de março de 2018 1 / 29

Introdução Histórico Open Graphics Library (OpenGL) é uma especificação de uma Application Programming Interface (API) para a criação de aplicações gráficas. Foi introduzido em 1992 pela Silicon Graphics e atualmente é mantida pelo Khronos Group. Está na versão 4.6. 2 / 29

Introdução Histórico O que é Open Graphics Library (OpenGL) é uma especificação de uma Application Programming Interface (API) para a criação de aplicações gráficas. Foi introduzido em 1992 pela Silicon Graphics e atualmente é mantida pelo Khronos Group. Está na versão 4.6. Coleção de rotinas que o programador pode utilizar para gerar elementos gráficos. Oferece suporte para gerar e exibir cenas 3D interativas. Contém mais de 200 comandos distintos para objetos e operações necessárias para produzir aplicações gráficas. 3 / 29

Introdução O que não é Não possui funções para processar entrada de usuários ou manipulações de janela. Foi construída para ser uma interface independente de hardware. Podem ser utilizadas as funções específicas de cada plataforma, ou usar uma biblioteca independente (GLUT ou SDL, por exemplo). Não provê instruções alto nível que descrevem modelos geométricos tridimensionais. Motores gráficos realizam esse tipo de modelagem, como Blender, Maya e 3DS Max. Apesar de poder definir modelos complexos, isso somente é construído com um conjunto de primitivas geométricas: pontos, linhas e polígonos. 4 / 29

Introdução Operações da OpenGL Construção de modelos ou formas com primitivas geométricas, descrevendo modelos matemáticos de objetos. Definir pontos no espaço tridimensional e selecionar um ponto para visualização da cena. Cálculo de cor das formas e modelos, seja de maneira automática ou com condições específicas de iluminação. Conversão dos modelos matemáticas e as cores dos objetos para pixels na tela, através da rasterização. 5 / 29

Nomenclatura de Funções Nomenclatura de Funções Visa padronizar e facilitar a utilização. Possibilita identificar a qual biblioteca a função pertence, quantidade de argumentos e quais os tipos dos argumentos. 6 / 29

Tipos de Dados Tipos de Dados A OpenGL possui tipos de dados próprios. Tornam o programa-fonte portável. Tabela: Sufixos e tipos de dados equivalentes Sufixo Tipo Tipo C Nome b inteiro 8 bits signed char GLbyte s inteiro 16 bits short GLshort i inteiro 32 bits int/long GLint f float 32 bits float GLfloat............ 7 / 29

Tipos de Dados Tomar cuidado 1 void drawdot(int x, int y) 2 { 3 glbegin(gl_points); 4 glvertex2i(x, y); 5 glend(); 6 } Correto 1 void drawdot(glint x, GLint y) 2 { 3 glbegin(gl_points); 4 glvertex2i(x, y); 5 glend(); 6 } 8 / 29

Variáveis de Estado Variáveis de Estado A OpenGL rastreia inúmeras variáveis de estado. Tamanho de um ponto, cor de fundo da janela, cor do desenho, entre outras. Valores correntes dessas variáveis podem ser consultados com o uso de funções com sufixo glget*(). Também existe a função glutget() que retorna estados armazenados da biblioteca GLUT. Exemplos de Inicialização O valor corrente permanece ativo até ser alterado. Exemplos: Cor de Fundo: glclearcolor(r, g, b, alpha). Tamanho do Ponto: glpointsize(3.0). Exemplos de Recuperação void glgetbooleanv(glenum pname, GLboolean *data). int glutget(glut_screen_width). 9 / 29

Pipeline da OpenGL Figura: http://www.songho.ca/opengl/gl_pipeline.html. A sequência de operações da Figura 9 não é uma regra restrita de implementação da OpenGL, mas é um guia confiável de sequência adotada pela biblioteca. 10 / 29

Primitivas Geométricas 2D Ponto 1 glbegin(gl_points); 2 glvertex2f(x1, y1); 3 glvertex2f(x2, y2); 4 glvertex2f(x3, y3); 5 glend(); Linha 1 glbegin(gl_lines GL_LINE_STRIP GL_LINE_LOOP); 2 glvertex2f(x1, y1); 3 glvertex2f(x2, y2); 4 glend(); Triângulo 1 glbegin(gl_triangles GL_TRIANGLE_STRIP GL_TRIANGLE_FAN); 2 glvertex2f(x1, y1); 3 glvertex2f(x2, y2); 4 glvertex2f(x3, y3); 5 glend(); 11 / 29

Primitivas Geométricas 2D Quadriláteros 1 glbegin(gl_quads GL_QUAD_STRIP); 2 glvertex2f(x1, y1); 3 glvertex2f(x2, y2); 4 glvertex2f(x3, y3); 5 glvertex2f(x4, y4); 6 glend(); 12 / 29

Bibliotecas OpenGL basic library ou OpenGL core library (GL) OpenGL Utility (GLU) Gerenciamento de janelas OpenGL Extension to the X Window System (GLX) Apple GL (AGL) Windows-to-OpenGL (WGL) Presentation manager to OpenGL (PGL) OpenGL Utility Toolkit OpenGL (GLUT), Simple DirectMedia Layer (SDL), Graphics Library Framework (GLFW) Difícil 1 #include <GL/gl.h> 2 #include <GL/glu.h> 3 #include <GL/glx.h> Simples 1 #include <GL/glut.h> 13 / 29

GLUT GLUT - OpenGL Utility Toolkit Direcionada a eventos (Event-driven). Programa responde a eventos: clique do mouse, tecla pressionada, redimensionamento da janela, entre outros. Biblioteca que permite a criação de elementos de interface gráfica. Criação de janelas e menus pop-up Gerenciamento de eventos de mouse e teclado Gerenciamento de eventos é realizado por meio de funções callback. Quem chama a função para o tratamento de um evento é a GL Utility Toolkit (GLUT) e não o programador. O papel do programador neste caso é definir a função a ser chamada. 14 / 29

GLUT - Criação de Janelas I Funções básicas void glutinit(int *argcp, char **argv); Inicializa a biblioteca GLUT e negocia uma seção com o sistema de janelas. void glutinitdisplaymode(unsigned int mode); Define qual será o modo inicial de display. void glutinitwindowposition(int x, int y); Utilizada para definir a posição inicial da janela, sendo que os parâmetros representam a posição do canto superior esquerdo. 15 / 29

GLUT - Criação de Janelas II Funções básicas void glutinitwindowsize(int width, int height); Define a largura e altura da janela. int glutcreatewindow(char *string); Cria a janela, sendo que o parâmetro será o título dela. void glutmainloop(); Apresenta o gráfico inicial e coloca o programa em um laço infinito que analisa as entradas dos dispositos como mouse, teclado, touch pad etc. 16 / 29

Programa OpenGL básico 1 #include <cstdlib> 2 #include <GL/glut.h> //ou #include <GLUT/glut.h> no macos 3 4 int main (int argc, char *argv[]) 5 { 6 glutinit(&argc, argv); 7 glutinitdisplaymode(glut_single GLUT_RGB); 8 glutinitwindowposition(400, 400); 9 glutinitwindowsize(300, 300); 10 glutcreatewindow("hello World"); 11 12 // 13 14 glutmainloop(); 15 16 return EXIT_SUCCESS; 17 } Compilação g++ -o hello_world hello_world.cpp -lgl -lglut -lglu 17 / 29

OpenGL básico Antes de começar a desenhar algo na tela, é necessário definir a cor de fundo da tela glclearcolor e glclear, a matriz OpenGL que estará sendo utilizada glmatrixmode e os parâmetros da projeção gluortho2d 1 //valores variam entre [0 1] 2 void glclearcolor(glfloat red, GLfloat green, GLfloat blue, GLfloat alpha); 3 4 //GL_MODELVIEW (padrao), GL_PROJECTION, GL_TEXTURE, GL_COLOR 5 void glmatrixmode(glenum mode); 6 7 void gluortho2d(gldouble left, GLdouble right, GLdouble bottom, GLdouble top); 18 / 29

OpenGL básico Para cada objeto desenhado podem ser definidas características como cor, tamanho etc. Além disso, para que tudo seja realmente executado pelo OpenGL a função glflush ou glfinish precisa ser chamada ao final de qualquer processo. 1 //GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, GL_ACCUM_BUFFER_BIT, GL_STENCIL_BUFFER_BIT 2 void glclear(glbitfield mask); 3 4 //Cor do objeto que esta sendo desenhado 5 void glcolor3f(glfloat red, GLfloat green, GLfloat blue); 6 7 //Diametro do objeto que esta sendo desenhado 8 void glpointsize(glfloat size); 9 10 //Forca executacao esvaziamento dos buffers e execucao das funcoes OpenGL 11 void glflush(); 19 / 29

GLUT - Tratamento de Eventos Funções básicas void glutdisplayfunc(handle_display); Define qual a função responsável por redesenhar a janela quando necessário. void glutreshapefunc(handle_reshape); Define a função responsável por tratar o evento referente ao redimensionamento da tela. 1 void handle_display() 2 { 3 4 } 5 void handle_reshape(gluint width, GLuint heigh) 6 { 7 8 } 20 / 29

GLUT - Mais funções void glutpostredisplay() Sinaliza para que a tela seja redesenhada na próxima iteração do glutmainloop. void glutfullscreen(void) void glutreshapewindow(int width, int height) 21 / 29

GLUT - Interação com o Teclado I Funções básicas void glutkeyboardfunc(handle_keyboardfunc) invoca a função callback quando teclas como letras e números são pressionadas. combinações de teclas podem ser gerenciadas utilizando também a função glutgetmodifiers(). void glutspecialfunc(handle_specialfunc) invoca a função callback quando teclas como Crtrl, Shift, teclas de função (F1, F2,...), teclas direcionais etc. são pressionadas. 22 / 29

GLUT - Interação com o Teclado II 1 void handle_keyboardfunc(glubyte key, GLint x, GLint y) 2 { 3 GLint m = glutgetmodifiers(); 4 5 if (key == 'a') 6 executaralgumacoisa(); 7 else if(m == GLUT_ACTIVE_CTRL && key == 'c') 8 copiaralgumacoisa(); 9 } 10 void handle_specialfunc(glint key, GLint x, GLint y) 11 { 12 if (key == GLUT_KEY_F11) 13 dosomething(); 14 } 23 / 29

GLUT - Interação com o Mouse I Funções básicas void glutmousefunc(handle_mouse) invoca a função callback quando algum botão do mouse é clicado/liberado. void glutpassivemotionfunc(handle_passivemotion) invoca a função callback quando o mouse é movido na tela (com botão LIBERADO). void glutmotionfunc(handle_motion) invoca a função callback quando o mouse é arrastado na tela (com botão PRESSIONADO). 24 / 29

GLUT - Interação com o Mouse II 1 void handle_mouse(glint button, GLint action, GLint x, GLint y); 2 { 3 if(button == GLUT_LEFT_BUTTON && action == GLUT_DOWN) 4 desenha_ponto(x, y); 5 } 6 void handle_passivemotion(glint x, GLint y) 7 { 8 9 } 10 void handle_motion(glint x, GLint y) 11 { 12 13 } 25 / 29

GLUT - Criação e interação com menus I Funções básicas int glutcreatemenu(handle_menu). void glutaddmenuentry(char *menu_name, int menu_index). void glutaddsubmenu(char *menu_name, int sub_menu_index). void glutattachmenu(int button) e void glutdetachmenu(int button). 26 / 29

GLUT - Criação e interação com menus II 1 void create_menu() 2 { 3 GLint menu_id = glutcreatemenu(handle_menu); 4 glutaddmenuentry("item 1", 1); 5 glutaddmenuentry("item 2", 2); 6 7 GLint submenu_id = glutcreatemenu(handle_menu); 8 glutaddmenuentry("subitem 1", 4); 9 glutaddmenuentry("subitem 2", 5); 10 glutaddmenuentry("subitem 3", 6); 11 12 glutaddsubmenu("item 3", submenu_id); 13 14 glutattachmenu(glut_right_button); 15 } 16 void handle_menu(glint menu_index); 17 { 18 19 } 27 / 29

Bibliografia Básica: Hearn, D. Baker, M. P. Computer Graphics with OpenGL, Prentice Hall, 2004. (livro texto) Neider, J. Davis, T. Woo, M. OpenGL programming guide, 2007. (livro base para aulas práticas) Angel, E. Interactive computer graphics: a top-down approach with OpenGL, Addison Wesley, 2000. Foley, J. et. al - Introduction to Computer Graphics, Addison-Wesley, 1993. Kessenich, J., Sellers, G., Shreiner, D. OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 4.5 with SPIR-V - Ninth Edition. 28 / 29

Bibliografia Complementar: Computer Graphics Comes of Age: An Interview with Andries van Dam. CACM, vol. 27, no. 7. 1982 The RenderMan And the Oscar Goes to... IEEE Spectrum, vol. 38, no. 4, abril de 2001. Material do ano passado: https: //sites.google.com/site/computacaograficaicmc2017t2/ Apostilas antigas da disciplina Computação Gráfica http://www.gbdi.icmc.usp.br/material?q=system/ files/apostilas.pdf 29 / 29