domingo, 23 de marzo de 2014

Práctica.- Eventos del teclado

La práctica que a continuación se presenta se basa en otro trabajo publicado en este blog anteriormente denominado "Francotirador".
El objetivo fundamental es realizar un dibujo en la pantalla y por medio de las teclas, asignar eventos, como por ejemplo, el desplazamiento a través de la pantalla o la posibilidad de poder modificar el tamaño de la figura.
El código del programa quedó de la siguiente manera:
-------------------------------------------------------------------------------------------
/*
Sáenz Morales Carlos Giovanni
*/

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <iostream>

using namespace std;
float valor_x=0.0;
float valor_y=0.0;
double tama=0.1;


void Dibuja(){
    cerr << "Dibuja() \n";
    glClearColor(0,0,0,0);
    glClear(GL_COLOR_BUFFER_BIT);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();


    glPushMatrix();
    glTranslatef(valor_x,valor_y,0.0);
    glutWireTeapot(tama);
    glPopMatrix();

    glFlush();
}

void keyInput(unsigned char key,int x, int y){
    switch(key){
        case 27:
        case 'q':
            exit(0);
        break;
        case '+':
            tama=tama+0.1;
        break;
        case '-':
            tama=tama-0.1;
        break;
    }
    glutPostRedisplay();
}

void specialKeyInput(int key,int x, int y){
    if(key==GLUT_KEY_DOWN){
                valor_y=valor_y-0.1;
                valor_x=valor_x;
        if(valor_y<-1){
            valor_y=1;
        }
        glutPostRedisplay();
    }
    if(key==GLUT_KEY_UP){
                valor_y=valor_y+0.1;
                valor_x=valor_x;
        if(valor_y>1){
            valor_y=-1;
        }

        glutPostRedisplay();
    }
    if(key==GLUT_KEY_LEFT){
                valor_x=valor_x-0.1;
                valor_y=valor_y;
        if(valor_x<-1){
            valor_x=1;
        }

        glutPostRedisplay();
    }
    if(key==GLUT_KEY_RIGHT){
                valor_x=valor_x+0.1;
                valor_y=valor_y;
        if(valor_x>1){
            valor_x=-1;
        }
        glutPostRedisplay();
    }
}

int main (){
    cerr << "main() \n" ;
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(720, 680);
    glutCreateWindow("");
    glutDisplayFunc(Dibuja);
    glutKeyboardFunc(keyInput);
    glutSpecialFunc(specialKeyInput);
    glutMainLoop();

}
-----------------------------------------------------------------------------------------
Como podemos observar, en el código se asignó la tecla q para terminar la ejecución del programa y las teclas + y - para cambiar el tamaño de la figura.
También se acomodó para que la figura no saliera del cuadro, antes bien, se prefiere que al salir por uno de los lados de la pantalla, reaparezca por el lado contrario. Finalmente se obtiene un trabajo como el siguiente:

No hay comentarios.:

Publicar un comentario