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:
Publicar un comentario