2007/09/18

Previo Practica 5

1.- Escriba una aplicacion que usando la libreria GLUT detecte que se ha realizado un click con el botón derecho del mouse sobre la ventana principal e imprima las coordenadas del mouse con la salida estándar.

-Cuando se haga click con el boton izquierdo, cierre la aplicación.

Nota: Usar glutMouseFunc();

void mouse (int button, int state, int x, int y){

switch (button){ //Left Button Clicked

case GLUT_LEFT_BUTTON:

switch (state){

case GLUT_DOWN: //Pressed

exit(0);

break;

}

break;

case GLUT_RIGHT_BUTTON:// Right Button Clicked

switch (state){

case GLUT_DOWN: // Pressed

printf ("Mouse Right Button Pressed on (%d,%d)(Down)...\n",x,y);

break;

case GLUT_UP: // Released

printf ("Mouse Left Button Released on (%d,%d)(Up)...\n",x,y);

break;

}

break;

}

glutPostRedisplay ();

}

2.- Escriba una aplicación que cada 5 segundos abra una nueva ventana y como titulo le

ponga el tiempo en el que se creó.

-Al apretar el botón izquierdo del mouse, para el contador.

-Al apretar el botón derecho reinicia el contador.

-Al apretar la tecla "ESC" cierra la aplicación.

#include

#include

#include

#include

#include

struct practicas{

int ancho, alto, x, y, PrevX, PrevY, ventana;

time_t comienzo, final;

char buffer[10];

float cont;

signed int bandera, RMB;

}variable;

void inicializa (void){

variable.ancho = 500;

variable.alto = 500;

variable.x=100;

variable.y=100;

variable.bandera=0;

variable.RMB=0;

variable.ventana=1;

}

void display(void){

glClearColor(0.0, 0.0, 0.0, 0.0);

glClear(GL_COLOR_BUFFER_BIT);

glLoadIdentity();

glFlush();

}

void reshape (int ancho, int alto){

if(ancho==0)

ancho=1;

glViewport(0, (GLsizei) 0, (GLsizei) ancho, (GLsizei) alto);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluPerspective(45.0f,(float)(ancho/((alto==0)?1:alto)),0.01f,500.0f);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}

void mouse (int button, int state, int x, int y){

variable.PrevX = x;

variable.PrevY = y;

switch (button){ //Left Button Clicked

case GLUT_LEFT_BUTTON:

switch (state){

case GLUT_DOWN: //Pressed

variable.bandera = 0;

break;

}

break;

case GLUT_MIDDLE_BUTTON:// Middle Button clicked

switch (state){

case GLUT_DOWN:// Pressed

exit(0);

break;

}

break;

case GLUT_RIGHT_BUTTON:// Right Button Clicked

switch (state){

case GLUT_DOWN: // Pressed

variable.bandera = 0;

variable.comienzo = time( NULL );

break;

}

break;

}

glutPostRedisplay ();

}

void TimerFunction(int valor){

if(variable.ventana<=10 && variable.bandera == 0){

variable.x=variable.x+50;

variable.y=variable.y+50;

glutInitWindowPosition(variable.x,variable.y);

variable.final = time( NULL );

variable.cont=difftime(variable.final, variable.comienzo);

printf( "Segundos desde el comienzo del programa: %f s\n", variable.cont);

sprintf(variable.buffer,"%.1f s\0",variable.cont);

glutCreateWindow(variable.buffer);

glutDisplayFunc(display);

glutReshapeFunc(reshape);

glutMouseFunc (mouse);

variable.ventana++;

}

glutPostRedisplay();

glutTimerFunc(5000,TimerFunction, 1);

}

int main(int argc, char **argv){

inicializa();

variable.comienzo = time( NULL );

printf( "Segundos desde el comienzo del programa: %f s\n", variable.cont);

sprintf(variable.buffer,"%.1f s\0",variable.cont);

glutInit (&argc, argv);

glutInitDisplayMode (GLUT_RGB);

glutInitWindowSize (variable.ancho, variable.alto);

glutInitWindowPosition (variable.x,variable.y);

glutCreateWindow (variable.buffer);

glutDisplayFunc (display);

glutReshapeFunc (reshape);

glutMouseFunc (mouse);

glutTimerFunc(5000, TimerFunction, 99036568);

glutMainLoop();

return 0;

}

Nota: Usar glutTimeFunc, glutMouseFunc y glutKeyboardFunc

3.- ¿Que comandos para manejo de eventos nos proporciona GLUT?

Describa cada uno de éstos.

glut________func();

glutKeyboardfunc()ñ

Maneja entradas de eventos desde teclado correspondientes al teclado normal y caracteres en el codico ASCII

glutSpecialfunc();

Maneja entradas de eventos desde teclado para caracteres especiales como las teclas de función flechas direccionales etc

glutMousefunc()ñ

Maneja entradas de eventos desde el raton para 3 botones.

No hay comentarios: