domingo, 27 de noviembre de 2016

Ejercicio 6

ENUNCIADO
Modificar el codigo fuente del ejercicio 5 para que se pueda elegir la forma del objeto dentro del menu. Se debe elegir entre tres formas distintas por ejemplo una tetera una esfera y un cubo.

FIGURA




CODIGO FUENTE

//modificar para que cambie la figura geometrica desde menu.

#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;
int iFigura=9;

typedef enum {FONDO1,FONDO2,FONDO3,DIBUJO1,DIBUJO2,DIBUJO3,TAMANO1,TAMANO2,TAMANO3,
FIGURA1,FIGURA2,FIGURA3}
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;

        case FIGURA1:
            iFigura=9;
         break;

         case FIGURA2:
            iFigura=10;
         break;

         case FIGURA3:
            iFigura=11;
         break;


    }

    glutPostRedisplay();

}


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

    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);

    menuFigura=glutCreateMenu(onMenu);
    glutAddMenuEntry("Tetera",FIGURA1);
    glutAddMenuEntry("Esfera",FIGURA2);
    glutAddMenuEntry("Cubo",FIGURA3);


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


    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]);
    switch (iFigura) {
        case 9:
             glutWireTeapot(iTamano);
        break;
         case 10:
             glutWireSphere(iTamano,16,16);
        break;
         case 11:
             glutWireCube(iTamano);
        break;
    }

    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