LAB. 1. Introdução à OpenGL

Documentos relacionados
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. Engenharia de Computação. CEFET/RJ campus Petrópolis. Prof. Luis Retondaro. Aula 2. Introdução a OpenGL

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

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

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

OpenGL. Alberto B. Raposo

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

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

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

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

Transformações Geométricas

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

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

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

Introdução a Prática em OpenGL

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

Programação Gráfica Cap 2

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

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

Fundamentos de Computação Gráfica

Computação Gráfica OpenGl 01

FCG2006 Prova sobre OpenGL e Rastreamento de Raios

ORIENTAÇÃO DA MONOGRAFIA: PROF. MARCELO F. PORTO COORDENAÇÃO DA DISCIPLINA: PROF.ª MAGALI MARIA DE ARAÚJO BARROSO

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

OpenGL. Parte I: Geometria. Waldemar Celes Departamento de Informática Tecgraf/PUC-Rio

OpenGL. Uma Abordagem Prática e Objetiva. Marcelo Cohen Isabel Harb Manssour. Novatec Editora

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

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

Engenharia Informática Computação Gráfica

FUNDAMENTOS E APLICAÇÕES. Luis Valente

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

OpenGL Um tutorial. Luis Valente. Instituto de Computação - Universidade Federal Fluminense lvalente@ic.uff.br. Dezembro, 2004

Programa de Aprimoramento Discente em Modelagem Geométrica Computacional. Curso Básico de OpenGL

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

Aspectos de Sistemas Operativos

Revisões. Módulos Sistemas Gráficos e Interação. Filipe Pacheco SGRAI 2017/18 DEI-ISEP 228. Instituto Superior de Engenharia do Porto

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

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

Sistemas Gráficos Interativos. Interações

Conceitos importantes

Computação Gráfica - OpenGl 02

OpenGL Shading Language

Computação Gráfica. Texturas

CG 2013/2014 Primeiro Teste LEIC Alameda/Taguspark

Básico, Ferramentas e o Primeiro Programa em Qt

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

Pesquisa e organização de informação

TECNOLOGIAS DE INFORMAÇÃO E COMUNICAÇÃO

Exemplo de Aplicaça o Facebook

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

Manual de Utilização de Webcams no. Desenvolvimento de Aplicativos Java

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

Referencial do Módulo B

Orientação a Objetos Programação em C++

Introdução ao OpenGL

Ferramentas Web, Web 2.0 e Software Livre em EVT

Framework.NET, Microsoft Visual C# 2010 Express e Elementos da Linguagem C#

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

OpenGL. Soraia Musse

ESTUDO DE CASO WINDOWS VISTA

Introdução a Programação de Jogos

Sumário. Computação Gráfica Illustrator

Programação Gráfica Parte 2 Versão em C 2006 PUCPR Tutoria de Jogos 1º Ano

GraphicsLib Biblioteca Gráfica 2D. Documentação

SIMULADO Windows 7 Parte V

Algoritmos e Programação Estruturada

Conceitos Básicos sobre Programação Prática

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Linguagem de Programação Introdução a Linguagem Java

ESCOLA SUPERIOR DE TECNOLOGIA DE TOMAR DEPARTAMENTO DE ENGENHARIA INFORMÁTICA 2005/ Valores

Open Graphics Library OpenGL

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

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

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

Entradas/Saídas. Programação por interrupções Conceitos gerais Programação da porta série Transmissão

Computação Gráfica - 04

Programa ConsoleRPN. PUC-Rio CIV Sistemas Gráficos para Engenharia Luiz Fernando Martha & André Maués Brabo Pereira

Transcrição:

LAB. 1 Introdução à OpenGL

OpenGL O que é? É uma biblioteca de funções gráficas. É uma API (Application Programming Interface) gráfica 2D e 3D Primitivas vectoriais e rasterizadas (imagens) Capaz de gerar imagens de alta qualidade Normalmente implementada de forma a tirar partido da aceleração gráfica (se disponível) Independente de plataforma (sistema operativo e hardware) Independente de sistema de janelas 2

OpenGL O que é? application program OpenGL Motif widget or similar GLX, AGL or WGL X, Win32, Mac O/S GLUT GLU GL software and/or hardware 3

Sistemas de Janelas Principal meio de interacção homem/máquina em ambientes de computação modernos. A tela do ecrã é vista como uma janela que contém outras janelas (eventualmente sobrepostas). Janelas são controladas por aplicações que têm a incumbência de mantê-las sempre actualizadas. Interacção com o utilizador e com o próprio sistema de janelas é comunicada à aplicação através de eventos. Por exemplo: Rato foi accionado Janela foi redimensionada Eventos são tratados por rotinas callback da aplicação. Por exemplo: Redesenhar o conteúdo da janela Mover um objecto de um lado para outro da janela Cada sistema de janelas (SJ) possui uma API distinta: MS Windows, X, Apple Portabilidade: camada de interface com diversos SJ mas com API única (ex.: GLUT) 4

APIs Relacionadas GLU (OpenGL Utility Library) Parte da norma OpenGL NURBS, trianguladores, quádricas, etc. AGL, GLX, WGL Camadas entre a OpenGL e os diversos sistemas de janelas GLUT (OpenGL Utility Toolkit) API portátil de acesso aos sistemas de janelas Encapsula e oculta as camadas proprietárias Não é parte oficial da OpenGL 5

Arquitetura da OpenGL Poly. Per Vertex CPU DL Pixel Texture Raster Frag FB 6

Representação gráfica em OpenGL OpenGL funciona como uma máquina de estados OpenGL API tem rotinas para desenhar primitivas geométricas e imagens alterar variáveis de estado (ex.: cor, material, fontes de iluminação, etc) consultar variáveis de estado OpenGL é uma norma em evolução Mecanismo padronizado de extensões Novas versões são estabelecidas por uma comissão (ARB) de utilizadores e fabricantes 7

Estrutura de um programa OpenGL/GLUT #include <GLUT/glut.h> /* Outros headers */ void display (void) {... } /* Outras rotinas callback */ int main (int argc, char *argv[]) { } glutinit (argc, argv); glutinitdisplaymode( modo ); glutcreatewindow( nome_da_janela ); glutdisplayfunc( displaycallback ); glutreshapefunc( reshapecallback ); /* Registro de outras rotinas callback */ glutmainloop(); return 0; Headers Rotinas callback Inicialização do GLUT Inicialização da janela Registo de callbacks Lacete principal 8

Headers da OpenGL/GLUT // headers files for Mac OS X #include <OpenGL/gl.h> #include <OpenGL/glu.h> #include <GLUT/glut.h> // headers files for Windows XP #include <GL/gl.h> #include <GL/glu.h> #include <GLUT/glut.h> Há APIs para construção de interfaces gráficas (GUI-Graphical User Interfaces) que funcionam sobre a GLUT. Isto significa que os seus headers incluem os da GLUT. Por exemplo, a utilização da GLUI num programa gráfico requer a inclusão de: #include <OpenGL/glui.h> a qual já inclui glut.h 9

GLUT Registo de callbacks Callbacks são rotinas que são chamadas para tratar eventos. Para que uma rotina callback ser efectivamente invocada quando um dado evento ocorre, é preciso fazer previamente o seu registo através da função glutxxxfunc (callback) em que Xxx designa uma classe de eventos e callback é o nome da rotina Por exemplo, o registo da callback designada por Desenho, é feito do seguinte modo: glutdisplayfunc (Desenho); 10

GLUT callback de desenho É a rotina chamada automaticamente sempre que a janela ou parte dela precisa ser redesenhada (ex.: janela estava ocultada por outra que entretanto foi fechada) Todo programa GLUT precisa de ter uma! Exemplo: void display ( void ) { glclear( GL_COLOR_BUFFER_BIT ); glbegin( GL_TRIANGLE_STRIP ); glvertex3fv( v[0] ); glvertex3fv( v[1] ); glvertex3fv( v[2] ); glvertex3fv( v[3] ); glend(); glutswapbuffers(); /* double-buffering! */ } 11

GLUT callback de redimensionamento Chamada sempre que a janela é redimensionada por alteração do seu tamanho Tem a seguinte sintaxe: void reshape (int width, int height){...} em que width/height especificam as novas largura/altura da janela (em pixels) Se uma rotina de redimensionamento não for especificada, a GLUT usa uma rotina de redimensionamento default que simplesmente ajusta o viewport para usar toda a área da janela. 12

GLUT - callbacks de interacção humana com o computador Eventos do teclado: void keyboard (unsigned char key, int x, int y) Eventos do rato: void mouse(int button, int state, int x, int y) void motion(int x, int y) void passivemotion(int x, int y) Evento de falta-de-evento: void idle (void) Outros eventos 13

Programa OpenGL/GLUT - Inicialização Inicialização da GLUT: glutinit (int* argc, char** argv) estabelece ligação com o sistema de janelas 14

Programa OpenGL/GLUT - Inicialização Inicialização da(s) janela(s): glutinitdisplaymode (int modo) em que modo é um OR bit-a-bit de constantes tais como: GLUT_RGB GLUT_DOUBLE GLUT_DEPTH GLUT_ACCUM GLUT_ALPHA - modelo de cor - bufferização dupla - buffer de profundidade (z-buffer) - buffer de acumulação - buffer de cores terá componente alfa glutinitwindowposition (int x, int y) estabelece a posição inicial do canto superior esquerdo da janela glutinitwindowsize (int width, height) estabelece o tamanho (em pixels) da janela 15

Programa OpenGL/GLUT - Inicialização Criação da(s) janela(s): int glutcreatewindow (char* nome) cria uma nova janela primária (top-level) nome é a etiqueta que aparece na barra superior da janela o número inteiro que é devolvido pela função é usado pela GLUT para identificar a janela Outras inicializações Após a criação da janela, é costume configurar as variáveis de estado da OpenGL que não mudarão durante a execução do programa. Por exemplo: cor do fundo tipo de coloração 16

Programa OpenGL/GLUT lacete principal de eventos Depois de registadas as callbacks, o controlo é entregue ao sistema de janelas: glutmainloop (void) esta rotina na verdade é o despachador de eventos. 17

Exemplo /* * quad.cc - Simple Quad * Adam Mills */ #include <OpenGL/gl.h> // Header File For The OpenGL Library #include <OpenGL/glu.h> // Header File For The GLu Library #include <GLUT/glut.h> // Header File For The GLut Library #include <stdlib.h> void quad(){ glbegin(gl_quads); glvertex2f( 0.0f, 1.0f); // Top Left glvertex2f( 1.0f, 1.0f); // Top Right glvertex2f( 1.0f, 0.0f); // Bottom Right glvertex2f( 0.0f, 0.0f); // Bottom Left glend(); } void draw(){ glclearcolor( 0, 0, 0, 0 ); // Make background colour black glclear ( GL_COLOR_BUFFER_BIT ); glpushmatrix(); // Push the matrix stack glcolor3f( 0, 0, 1 ); // Set drawing colour to blue gltranslatef(-0.5, -0.5, 0.0); // Move the shape to middle of the window quad(); // Call our Quad Method glpopmatrix(); // Pop the Matrix glutswapbuffers(); // display it 18 }

Exemplo (cont.) // Keyboard method to allow ESC key to quit void keyboard(unsigned char key,int x,int y){ if(key==27) exit(0); } int main(int argc, char ** argv) { glutinit(&argc, argv); // Double Buffered RGB display glutinitdisplaymode( GLUT_RGB GLUT_DOUBLE); // Set window size glutinitwindowsize( 500,500 ); glutcreatewindow("test"); // Declare the display and keyboard functions glutdisplayfunc(draw); glutkeyboardfunc(keyboard); // Start the Main Loop glutmainloop(); return 0; } 19

OpenGL primitivas gráficas glbegin ( PRIMITIVA ); especificação de vértices, cores, coordenadas de textura, propriedades de material glend (); Entre glbegin() e glend() apenas alguns comandos podem ser usados: glmaterial glnormal gltexcoord Uma vez definido um vértice (glvertex), este é desenhado com as propriedades (cor, material, normal, coordenadas de textura, etc) registadas nas variáveis de estado. Conclusão: Antes de definir um vértice, há que assegurar que a cor, o material, a normal, etc, têm o valor adequado. 20

v 4 v 1 OpenGL primitivas gráficas GL_POINTS v 2 v 3 v v 5 1 v4 v 2 GL_TRIANGLES v 4 v 1 v 6 v v 3 v 5 2 GL_QUADS v v v v 3 2 8 7 GL_LINES v 4 GL_TRIANGLE_STRIP v 2 v 4 v 1 GL_LINE_STRIP v v 6 1 GL_LINE_LOOP v v 6 1 v 1 v v 3 v 2 5 v 2 v 5 v v 4 v 3 v 4 3 GL_QUAD_STRIP v 2 v v 1 3 v 5 v v 3 v 6 2 v 5 v 4 v 6 v 5 GL_POLYGON GL_TRIANGLE_FAN v 1 v 6 v 3 v 4 21 FIM