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

Slides:



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

TRATAMENTO DE ARQUIVOS EM C
Denise Guliato Faculdade de Computação – UFU
Um programa em C Bibliotecas Variáveis globais
Construção de Algoritmos AULA 07
Listas duplamente encadeadas
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Programação para Engenharia I
OpenGL Clique para adicionar texto Soraia Musse 6/4/2011.
TADS – Tipos Abstratos de Dados
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
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Computação Gráfica Interativa - Gattass
Sistemas de Interfaces com o Usuário
Sistemas de Interfaces com o Usuário e OpenGL/Glut
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Callback de Teclado // registro void glutKeyboardFuc(Teclado);
Laboratório de Computação Gráfica OpenGL
Fundamentos de Programação 1
Revisão da Linguagem C.
exercícios listas encadeadas
Revisão /*======================================================*/
Classes Revisando: –Forma de implementação de estruturas específicas –Atributos (grupos de dados) –Métodos (conjuntos de procedimentos)
Curso de Nivelamento LCG
PROGRAMAÇÃO ESTRUTURADA II
PROGRAMAÇÃO ESTRUTURADA II
Árvores Binárias de Pesquisa
TAD Pilha com Alocação Dinâmica de Memória
Conceitos e implementação em C
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.
Denise Guliato Faculdade de Computação – UFU
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
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.
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:
Introdução à Linguagem C
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
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
Wellington Felix.  Criada por Brian Kernighan e Denis Ritchie, na década de 1970, para uso em um computador DEC PDP-11 em Unix  C++ é uma extensão da.
Viewport.
1 SUIT - Simple User Interface Toolkit Maria Alice Grigas Varella Ferreira EP-USP Abril 2003.
Felipe Cavalcanti Ferreira Fernando Valente Kakimoto
Introdução de um programa no sistema, mostrando a interação com o sistema (programa 1.1). Utilização do compilador/ligador (cc – gcc). /* * Mostra Hello.
Vetores Normais.
Profa. Maria Augusta Constante Puget
Manipulação de Imagens em OpenGL
30/8/2015(c) Dept. Informática - PUC-Rio1 INF1007: Programação 2 Módulos.
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
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.
Introdução à Linguagem C
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Linguagem de Programação
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Estrutura de Dados Prof. André Cypriano M. Costa
Fundamentos de Programação 1 Slides 22 Prof.ª Fabiany e Prof. SIMÃO Linguagem C “Lista Duplamente Encadeada - Projeto com vários Arquivos”.
Alocação Dinâmica de Memória e Tipo Abstrato de Dados Cristiano Arbex Valle Vinicius Fernandes dos Santos
Estrutura de Dados STRUCTS Dilvan Moreira. Objetivos  Entender o que são e como usar:  Estrutura de Dados para a Linguagem C  Structs (Registros)
1 Aula 07 Strings Prof. Filipe Mutz. 2 Em nossos programas ainda não vimos como armazenar palavras e textos, e eles são muito importantes! Exemplos: Programas.
Fundamentos de Programação 1 Slides 18 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Arquivos Seqüências ou de Texto ”. 1.
Transcrição da apresentação:

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

MGattass Objetos de comuns interface

MGattass Modelo de Programação Usuário Dispositivos Computador Toolkit de Interface (GLUT, SDK,... ) Sistema Gráfico (OpenGL, Direct3D,...) Programa Gráfico- Interativo

MGattass Programação Convencional Os comandos são executados segundo uma ordem pré- estabelecida e sequencial. Programação Convencional captura dados inicio processa dados fim

MGattass Eventos típicos (WIMP) KeyPress KeyRelease ButtonPress ButtonRelease Motion LeaveNotify EnterNotify WindowExposure (Repaint) Resize Timer Idle Janela A Janela B Janela C

MGattass Modelo de Call Backs Examina eventos, chama os módulos de processamento Processa Evento Tipo 1 Processa Evento Tipo 2 Processa Evento Tipo 3 Eventos Motif Visual Basic Glut IUP... Programa de Aplicação

Visual Basic

MGattass OpenGL/GLUT #include /* inclui a glut que inclui o OpenGL */ /* Variaveis globais */ int width=640,height=480; /* largura e altura do canvas */ int main(int argc, char **argv) { /* Inicializando a GLUT */ glutInit(&argc, argv); /* formato obrigatorio de inicializacao da glut */ glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE); /* coloca a janela em modo RGBA e double_buffer */ glutInitWindowSize(width, height); /* define largura e altura inicial da janela */ glutCreateWindow("FCG: Trabalho T1"); /* cria a janela com os dizeres na barra */ /* Registrando as callbacks */ glutDisplayFunc(display_cb); /* registra a funcao a ser chamada quando a janela e' exibida */ glutReshapeFunc(reshape_cb); /* idem para a funcao de mudanca de tamanho */ glutSpecialFunc(special_cb); /* idem para quando as teclas especiais F1, F2,... forem acionadas */ /* GLUT main loop */ glutMainLoop(); /* o programa entra em modo de receber eventos do usuario */ 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); glLoadIdentity(); window.width = width; window.height = height; }

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

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

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

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; } Diálogo de seleção de arquivos

Canvas 1 e 2 Evento: RESIZE int resize_cb(Ihandle *self, int w, int h) { IupGLMakeCurrent(self); glViewport(0,0,w,h); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D (0., w, 0., h); glRasterPos2d(0.0,0.0); return IUP_DEFAULT; } w h xvxv yvyv xexe yeye zeze 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; }

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; } Canvas 2 (outra maneira)

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 typedef struct Image_imp Image;

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

struct Image_imp { int width; int height; float *buf; }; TAD: Implementação do módulo: image.c 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; }

MGattass Inscrição na lista do curso Mandar para: Subj: INF1761