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