A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Sistemas de Interfaces com o Usuário e Glut/OpenGL.

Apresentações semelhantes


Apresentação em tema: "Sistemas de Interfaces com o Usuário e Glut/OpenGL."— Transcrição da apresentação:

1 Sistemas de Interfaces com o Usuário e Glut/OpenGL

2 Objetos de comuns interface

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

4 Programação Convencional Os comandos são executados segundo uma ordem pré- estabelecida e seqüêncial. Programação Convencional captura dados inicio processa dados fim

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

6 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

7 Visual Basic

8 Ponteiro para Função em C Na linguagem C você pode criar e manipular ponteiros para funções. –Isso permite escolher qual função a ser usada em tempo de execução. –O ponteiro para uma função pode ser passado como parâmetro para outra função.

9 Exemplo 1 de Function Pointer int func1(int arg) { return(2 * arg); } int func2(int arg) { return(10 * arg); } void func3(int (*func_ptr)(int)) { int i = 10, j; j = func_ptr(i); printf("\n%d",j); } void main(void) { func3(func1); func3(func2); }

10 Exemplo 2 (QuickSort) void qsort (void* base, int nel, int width, int (*CPtr)(void*, void*)); int CmpChar ( char* a, char* b) { if ( *a == *b ) return 0; else return ( *a > *b ? 1 : -1 ); } int (*CmpPtr)(); // declare a function pointer CmpPtr = CmpChar; // initialize it qsort ( buffer, 32, sizeof(char), CmpPtr ); Para comparar caracteres, deve ser criada uma função de comparação:

11 Exemplo 3 (CallBack IUP) typedef int (*Icallback)(Ihandle *,...); Icallback IupSetFunction (char *ação, Icallback função) ; static int iup_CbFechaTodos( void ); static int iup_CbAbreTodos( void ); static int iup_CbMousePress (Ihandle* self,int botao,int estado,int x,int y,char* r); static int iup_CbMouseMove(Ihandle *self, int x, int y, char*r); static int iup_CbMouseEnter (Ihandle *self); IupSetFunction("cb_FechaTodos", (Icallback) iup_CbFechaTodos); IupSetFunction("cb_AbreTodos", (Icallback) iup_CbAbreTodos); IupSetFunction("cb_MousePress", (Icallback) iup_CbMousePress); IupSetFunction("cb_MouseMove", (Icallback) iup_CbMouseMove); IupSetFunction("cb_MouseEnter", (Icallback) iup_CbMouseEnter);

12 OpenGL/GLUT #include /* Variaveis globais */ typedef struct window_impl { int width; int height;} Window; Window window; IMAGE pic; int main(int argc, char **argv) { pic = imgReadBMP(filename); imgGetDimensions(pic, &window.width, &window.height); /* GLUT - Initialization */ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(window.width, window.height); glutCreateWindow("CG2001-T1"); /* Registrando callbacks */ glutDisplayFunc(displayCall); glutReshapeFunc(reshapeCall); glutMouseFunc(mouseCall); glutMotionFunc(motionCall); glutKeyboardFunc(keyboardCall); glutIdleFunc(idleCall); /* GLUT main loop */ glutMainLoop(); return 0; }

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


Carregar ppt "Sistemas de Interfaces com o Usuário e Glut/OpenGL."

Apresentações semelhantes


Anúncios Google