Computação Gráfica Interativa - Gattass

Slides:



Advertisements
Apresentações semelhantes
Sistemas de Interfaces com o Usuário e Glut/OpenGL
Advertisements

Curso de aprofundamento na linguagem C
Funções para serem usadas no exercício de Lab
Interações cliente/servidor usando o UDP
Denise Guliato Faculdade de Computação – UFU
Um programa em C Bibliotecas Variáveis globais
Computação Gráfica Mapeamento de textura
Programação II Estruturas de Dados
Programação II Estruturas de Dados
MPI – Comunicações Com. Colectiva esquecida Barrier não há troca de dados, apenas sincroniza os processos int MPI_Barrier( MPI_Comm, comm) T com = T lat.
Programação para Engenharia I
OpenGL Clique para adicionar texto Soraia Musse 6/4/2011.
TADS – Tipos Abstratos de Dados
Introdução a OpenGL (parte final).
Introdução à Computação Gráfica OpenGL Básico
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
Navegador de cenas com openGL e rastreamento de raios
OpenGL Conceitos Básicos
Sistemas de Interfaces com o Usuário
Sistemas de Interfaces com o Usuário e OpenGL/Glut
OpenGL Alberto B. Raposo.
Computação Gráfica Módulo IV – OpenGL
Funções para serem usadas no exercício de Lab nos dias (11/03/2010 e 17/03/10) Visualização 3D Incluir no FrameWork Básico (na página da disciplina), as.
Callback de Teclado // registro void glutKeyboardFuc(Teclado);
Laboratório de Computação Gráfica OpenGL
Iluminação Para programar um sistema de iluminação, dois passos principais devem ser considerados: c) Que tipo e posição de Iluminação se deseja b) Que.
OpenGL – Uma abordagem prática e objetiva
Armazenamento de Dados em Arquivos
Armazenamento de Dados em Arquivos
Slides: Prof. SIMÃO Revisão: Prof. João Fabro
Slides: Prof. João Fabro UTFPR - Curitiba
Fundamentos de Programação 1
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
exercícios listas encadeadas
Computação Gráfica – Transformações Geométricas
Introdução à Programação
Curso de Nivelamento LCG
Visibilidade em Computação Gráfica
PROGRAMAÇÃO ESTRUTURADA II
PROGRAMAÇÃO ESTRUTURADA II
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Programação Paralela em OpenCL
Computação Gráfica Mapeamento de textura
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Arquivo.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Computação Gráfica Introdução ao OpenGL.
Estruturas de Dados Aula 11: TAD Pilha
Introdução à Computação Gráfica OpenGL Básico
Uso de parâmetros na linha de comando. Parâmetros da função main:
Estruturas de Dados Aula 17: Estruturas Genéricas
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
Computação Gráfica – Transformações Projetivas
Desenhos Tridimensionais
Computação Gráfica – Transformações Geométricas
OpenGL Aula Prática.
Viewport.
1 SUIT - Simple User Interface Toolkit Maria Alice Grigas Varella Ferreira EP-USP Abril 2003.
Felipe Cavalcanti Ferreira Fernando Valente Kakimoto
Sistemas de Interfaces com o Usuário (IUP ou GLUT) e Sistemas Gráficos (OpenGL)
Profa. Maria Augusta Constante Puget
Animação 2D. // Variáveis que guardam a translação que será aplicada // sobre a casinha GLfloat Tx; GLfloat Ty; // Variáveis que guardam os valores mínimos.
Grupo: Antônio Inocêncio Francisco Ícaro Filipe Araújo Guilherme Barreto Leonardo Vilaça Márcio Dias Thiago Gomes.
Fundamentos de Programação 1 Slides 19 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Arquivos Binários”.
Fundamentos de Programação 1 Slides 22 Prof.ª Fabiany e Prof. SIMÃO Linguagem C “Lista Duplamente Encadeada - Projeto com vários Arquivos”.
Estrutura de Dados STRUCTS Dilvan Moreira. Objetivos  Entender o que são e como usar:  Estrutura de Dados para a Linguagem C  Structs (Registros)
Fundamentos de Programação 1
Transcrição da apresentação:

Computação Gráfica Interativa - Gattass 3/25/2017 Sistemas de Interfaces com o Usuário (IUP ou GLUT) e Sistemas Gráficos (OpenGL) Interfaces Gráficas

Objetos de comuns interface Computação Gráfica Interativa - Gattass 3/25/2017 Objetos de comuns interface MGattass Interfaces Gráficas

Computação Gráfica Interativa - Gattass 3/25/2017 Modelo de Programação Toolkit de Interface (GLUT, SDK, ... ) Programa Gráfico- Interativo Sistema Gráfico (OpenGL, Direct3D, ...) Dispositivos Computador Usuário MGattass Interfaces Gráficas

Programação Convencional Computação Gráfica Interativa - Gattass 3/25/2017 Programação Convencional inicio Programação Convencional Os comandos são executados segundo uma ordem pré-estabelecida e sequencial. captura dados processa dados fim MGattass Interfaces Gráficas

Eventos típicos (WIMP) Computação Gráfica Interativa - Gattass 3/25/2017 Eventos típicos (WIMP) KeyPress KeyRelease ButtonPress ButtonRelease Motion LeaveNotify EnterNotify WindowExposure (Repaint) Resize Timer Idle Janela A Janela B Janela C MGattass Interfaces Gráficas

Computação Gráfica Interativa - Gattass 3/25/2017 Modelo de Call Backs Processa Evento Tipo 1 Eventos Examina eventos, chama os módulos de processamento Processa Evento Tipo 2 Motif Visual Basic Glut IUP ... Processa Evento Tipo 3 Programa de Aplicação MGattass Interfaces Gráficas

Computação Gráfica Interativa - Gattass 3/25/2017 Visual Basic Interfaces Gráficas

OpenGL/GLUT #include <glut.h> #include “image.h” /* Variaveis globais */ typedef struct window_impl { int width; int height;} Window; Window window; Image* pic; int main(int argc, char **argv) { pic = imgReadBMP(“teste.bmp”); imgGetDimensions(pic, &window.width, &window.height); /* GLUT - Initialization */ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE ); glutInitWindowSize(window.width, window.height); glutCreateWindow("CG-T1"); /* Registrando callbacks */ glutDisplayFunc(displayCall); glutReshapeFunc(reshapeCall); glutMouseFunc(mouseCall); glutMotionFunc(motionCall); glutKeyboardFunc(keyboardCall); glutIdleFunc(idleCall); /* GLUT main loop */ glutMainLoop(); return 0; } MGattass

Exemplo simples da GLUT void displayCall(void) { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT); imgDraw(pic); glutSwapBuffers(); } void reshapeCall(int width, int height) { glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D (0.0, width, 0.0, height); glMatrixMode(GL_MODELVIEW); window.width = width; window.height = height; } MGattass

OpenGL/IUP – Exemplo Simples void main(void) { IupOpen(); IupGLCanvasOpen(); if ( init() ) IupMainLoop(); IupClose(); }

Elementos de interface Canvas 1 Canvas 2 HBox Eventos: RESIZE, REPAINT, BUTTON

Incialização int init(void) { Ihandle *canvas1, *canvas2, *dialog; char str[80]; char* filename = get_file_name( ); if (filename==NULL) return 0; /* le a imagem de fundo */ image1 = imgLoad(filename); image2 = imgGrey(image1); /* prepara um string com dim. da imagem, por exemplo "320x200" */ sprintf(str,"%dx%d",imgGetWidth(image1),imgGetHeight(image1)); /* cria dois canvas */ canvas1 = IupGLCanvas("repaint_cb1"); IupSetAttribute(canvas1,IUP_RASTERSIZE,str); IupSetAttribute(canvas1, "RESIZE_CB", "resize_cb"); IupSetAttribute(canvas1, "BUTTON_CB", "button_cb1"); /* associa o evento de repaint a funcao repaint_cb */ IupSetFunction("repaint_cb1", (Icallback) repaint_cb1); IupSetFunction("resize_cb", (Icallback) resize_cb); IupSetFunction("button_cb1", (Icallback) button_cb1); /* cria uma dialogo janela que contém o canvas */ dialog = IupDialog( IupHbox(canvas1,canvas2,NULL)); /* constroi e coloca o dialogo principal na tela */ IupShow(dialog); return 1; } Incialização

Diálogo de seleção de arquivos static char * get_file_name( void ) { Ihandle* getfile = IupFileDlg(); char* filename = NULL; IupSetAttribute(getfile, IUP_TITLE, "Abertura de arquivo"); IupSetAttribute(getfile, IUP_DIALOGTYPE, IUP_OPEN); IupSetAttribute(getfile, IUP_FILTER, "*.tga"); IupSetAttribute(getfile, IUP_FILTERINFO, "Arquivo de imagem (*.tga)"); IupPopup(getfile, IUP_CENTER, IUP_CENTER); filename = IupGetAttribute(getfile, IUP_VALUE); return filename; }

Canvas 1 e 2 Evento: RESIZE w h xv yv xe ye ze w h int resize_cb(Ihandle *self, int w, int h) { IupGLMakeCurrent(self); glViewport(0,0,w,h); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glMatrixMode(GL_PROJECTION); gluOrtho2D (0., w, 0., h); glRasterPos2d(0.0,0.0); return IUP_DEFAULT; } xe ye ze w h

Canvas 1 (uma maneira) Evento: REPAINT nt repaint_cb1(Ihandle *self) { int w = imgGetWidth(image1); int h = imgGetHeight(image1); unsigned char *rgbData = imgGetRGBData(image1); IupGLMakeCurrent(self); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT); glDrawPixels (w, h, GL_RGB,GL_UNSIGNED_BYTE, (GLubyte *) rgbData); glFlush(); return IUP_DEFAULT; }

Canvas 2 (outra maneira) int repaint_cb2(Ihandle *self) { int w = imgGetWidth(image2); int h = imgGetHeight(image2); unsigned char *rgbData = imgGetRGBData(image2); int x,y; IupGLMakeCurrent(self); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POINTS); for (y=0;y<h;y++) { for (x=0; x<w; x++) { unsigned char rgb[3]; imgGetPixel3ubv(image2, x, y, rgb ); glColor3ubv(rgb); glVertex2i(x,y); } glEnd(); glFlush(); return IUP_DEFAULT;

TAD: Interface do módulo: image.h typedef struct Image_imp Image; Image *imgCreate (int w, int h); void imgDestroy (Image *image); int imgGetWidth(Image * image); int imgGetHeight(Image * image); unsigned char * imgGetRGBData(Image * image); void imgSetPixel3fv(Image *image, int x, int y, float * color); void imgSetPixel3ubv(Image *image, int x, int y, unsigned char *color); void imgGetPixel3fv(Image *image, int x, int y, float *color); void imgGetPixel3ubv(Image *image, int x, int y, unsigned char *color); Image * imgLoad(char *filename); int imgWriteTGA(char *filename, Image * image); Image * imgCopy(Image * image); Image * imgGrey(Image * image); Image * imgResize(Image * img0, int w1, int h1);

TAD: Interface do módulo: image.h Funções do primeiro trabalho: unsigned int imgCountColor(Image *img, float tol); Image *imgReduceColors(Image *img, int ncolors); unsigned char* imgNormalizeColors(Image *img);

TAD: Implementação do módulo: image.c struct Image_imp { int width; int height; float *buf; }; Image * imgCreate (int w, int h) { Image * image = (Image*) malloc (sizeof(Image)); assert(image); image->width =(unsigned int) w; image->height =(unsigned int) h; image->buf = (float *) malloc (w * h * 3* sizeof(float)); assert(image->buf); return image; }

Inscrição na lista do curso Mandar e-mail para: mgattass@inf.puc-rio.br Subj: INF1761 MGattass