domingo, 27 de noviembre de 2016

EJERCICIO 5

ENUNCIADO

Modificar el codigo del ejercicio 4 para que la tetera se pueda mover arriba abajo izquierda y derecha con el teclado.



CODIGO FUENTE

//modificar para que se mueva en el plano
#include <stdio.h>
#include <stdlib.h>

#include <GL/glx.h>    /* this includes the necessary X headers */
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

#include <X11/X.h>    /* X11 constant (e.g. TrueColor) */
#include <X11/keysym.h>

int iFondo=0;
int iDibujo=3;
GLfloat iTamano=0.5;
GLfloat xpos=0.0,ypos=0.0;

typedef enum {FONDO1,FONDO2,FONDO3,DIBUJO1,DIBUJO2,DIBUJO3,TAMANO1,TAMANO2,TAMANO3}
opcionesMenu;




void onMenu (int opcion) {
    switch (opcion) {
        case FONDO1:
            iFondo=0;
        break;
         case FONDO2:
            iFondo=1;
        break;
         case FONDO3:
            iFondo=2;
        break;
         case DIBUJO1:
            iDibujo=3;
        break;
           case DIBUJO2:
            iDibujo=4;
        break;
           case DIBUJO3:
            iDibujo=5;
         break;
           case TAMANO1:
            iTamano++;
           break;

         break;
           case TAMANO2:
            iTamano=0.5;
           break;

         break;
           case TAMANO3:
            iTamano=iTamano-0.1;
           break;
    }

    glutPostRedisplay();

}


void creacionMenu () {
    int menuFondo,menuDibujo,menuPrincipal,menuTamano;

    menuFondo= glutCreateMenu(onMenu);
    glutAddMenuEntry("Negro",FONDO1);
    glutAddMenuEntry("Verde oscuro",FONDO2);
    glutAddMenuEntry("Azul oscuro",FONDO3);

    menuDibujo=glutCreateMenu(onMenu);
    glutAddMenuEntry("Blanco",DIBUJO1);
    glutAddMenuEntry("Verde claro",DIBUJO2);
    glutAddMenuEntry("Azul claro",DIBUJO3);

      menuTamano=glutCreateMenu(onMenu);
    glutAddMenuEntry("GRANDE",TAMANO1);
    glutAddMenuEntry("NORMAL",TAMANO2);
    glutAddMenuEntry("REDUCIDO",TAMANO3);

    menuPrincipal = glutCreateMenu(onMenu);
    glutAddSubMenu("Cambiar tamano",menuTamano);
    glutAddSubMenu("Color de fondo",menuFondo);
    glutAddSubMenu("Color de dibujo",menuDibujo);

    glutAttachMenu(GLUT_RIGHT_BUTTON);
}


void ControlTeclado (unsigned char key) {
    switch (key) {
        case 'o':
            xpos=xpos-0.1;
        break;

           case 'p':
            xpos=xpos+0.1;
        break;

           case 'q':
            ypos=ypos+0.1;
        break;

           case 'a':
            ypos=ypos-0.1;
        break;
    }

    glutPostRedisplay();

}


void display() {
    float colores [6] [3] = {
     {0.00f,0.00f,0.00f}, // 0-negro
     {0.06f,0.25f,0.13f}, // 1-verde oscuro
     {0.10f,0.07f,0.33f}, // 2-azul oscuro
     {1.00f,1.00f,1.00f}, // 3-blanco
     {0.12f,0.50f,0.26f}, // 4-verde claro
     {0.20f,0.14f,0.66f}, // 5-azul claro
    };

    glTranslatef(xpos,ypos,0.0f);

    glClearColor(colores[iFondo][0],colores[iFondo][1],colores[iFondo][2],1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(colores[iDibujo][0],colores[iDibujo][1],colores[iDibujo][2]);
    glutWireTeapot(iTamano);
    xpos=0.0;
    ypos=0.0;
    glFlush();
    glutSwapBuffers();
}


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

    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(700,700);
    glutInitWindowPosition(200,200);

    glutCreateWindow("Ejercicio 3 ejemplo menus");
    glutDisplayFunc(display);
    creacionMenu();
    glutKeyboardFunc(ControlTeclado);
    glutDisplayFunc(display);

    glutMainLoop();

    return 0;
}


No hay comentarios:

Publicar un comentario