-Incorpore dos gestos más a la mano.
#include
#include
#define ANTEBRAZO_ALTO 8.0
#define ANTEBRAZO_ANCHO 1.0
#define PALMA_ALTO 5.0
#define PALMA_ANCHO 4.0
#define PULGAR_ALTO1F 2.0
#define PULGAR_ANCHO1F 0.5
#define MENIQUE_ALTO1F 1.5
#define MENIQUE_ALTO2F 0.5
#define MENIQUE_ALTO3F 0.5
#define MENIQUE_ANCHO1F 0.5
#define MENIQUE_ANCHO2F 0.45
#define MENIQUE_ANCHO3F 0.4
#define INDICE_ALTO1F 2.0
#define INDICE_ALTO2F 1.0
#define INDICE_ALTO3F 1.0
#define INDICE_ANCHO1F 0.5
#define INDICE_ANCHO2F 0.49
#define INDICE_ANCHO3F 0.48
#define MEDIO_ALTO1F 2.5
#define MEDIO_ALTO2F 1.0
#define MEDIO_ALTO3F 1.0
#define MEDIO_ANCHO1F 0.5
#define MEDIO_ANCHO2F 0.49
#define MEDIO_ANCHO3F 0.48
#define ANULAR_ALTO1F 2.0
#define ANULAR_ALTO2F 1.0
#define ANULAR_ALTO3F 1.0
#define ANULAR_ANCHO1F 0.5
#define ANULAR_ANCHO2F 0.49
#define ANULAR_ANCHO3F 0.48
#define PALMA_VOLUMEN 1.0
typedef float point[3];
static GLfloat theta[14] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
static GLfloat theta_amorypaz[14] = { 30.0, 15.0, 0.0, -15.0, 80.0, 80.0, 0.0, 0.0, 0.0, 0.0, 145.0, 20.0, 145.0, 20.0};
static GLfloat theta_spiderman[14] = {-65.0, -10.0, 100.0, -55.0, 0.0, 0.0, 0.0, 0.0, 145.0, 20.0, 145.0, 20.0, 0.0, 0.0};
static GLint angle = 0;
static GLint direccion = 1;
GLUquadricObj *ab, *p1f, *p2f,*m1f, *m2f, *m3f, *i1f,*i2f, *i3f, *a1f, *a2f, *a3f, *md1f,*md2f, *md3f;
double size=1.0;
void antebrazo()
{
glPushMatrix();
glRotatef(-90.0,1.0,0.0,0.0);
gluCylinder(ab,ANTEBRAZO_ANCHO,ANTEBRAZO_ANCHO,ANTEBRAZO_ALTO,10,10);
glPopMatrix();
}
void palma()
{
glPushMatrix();
glTranslatef(0.0,PALMA_ALTO/2,0.0);
glScalef(PALMA_ANCHO,PALMA_ALTO,PALMA_VOLUMEN);
glutSolidCube(1.0);
glPopMatrix();
}
void pulgar1f()
{
glPushMatrix();
glRotatef(-80.0,1.0,1.0,0.0);
gluCylinder(p1f,PULGAR_ANCHO1F,PULGAR_ANCHO1F,PULGAR_ALTO1F,10,10);
glPopMatrix();
}
void pulgar2f()
{
glPushMatrix();
glRotatef(-90.1,0.0,1.0,0.0);
gluCylinder(p2f,PULGAR_ANCHO1F,PULGAR_ANCHO1F,PULGAR_ALTO1F,10,10);
glPopMatrix();
}
void menique1f()
{
glPushMatrix();
glRotatef(-90.0,1.0,0.0,0.0);
gluCylinder(m1f,MENIQUE_ANCHO1F,MENIQUE_ANCHO1F,MENIQUE_ALTO1F,10,10);
glPopMatrix();
}
void menique2f()
{
glPushMatrix();
glRotatef(-90.0,1.0,0.0,0.0);
gluCylinder(m2f,MENIQUE_ANCHO2F,MENIQUE_ANCHO2F,MENIQUE_ALTO2F,10,10);
glPopMatrix();
}
void menique3f()
{
glPushMatrix();
glRotatef(-90.0,1.0,0.0,0.0);
gluCylinder(m3f,MENIQUE_ANCHO3F,MENIQUE_ANCHO3F,MENIQUE_ALTO3F,10,10);
glPopMatrix();
}
void indice1f()
{
glPushMatrix();
glRotatef(-90.0,1.0,0.0,0.0);
gluCylinder(i1f,INDICE_ANCHO1F,INDICE_ANCHO1F,INDICE_ALTO1F,10,10);
glPopMatrix();
}
void indice2f()
{
glPushMatrix();
glRotatef(-90.0,1.0,0.0,0.0);
gluCylinder(i2f,INDICE_ANCHO2F,INDICE_ANCHO2F,INDICE_ALTO2F,10,10);
glPopMatrix();
}
void indice3f()
{
glPushMatrix();
glRotatef(-90.0,1.0,0.0,0.0);
gluCylinder(i3f,INDICE_ANCHO3F,INDICE_ANCHO3F,INDICE_ALTO3F,10,10);
glPopMatrix();
}
void medio1f()
{
glPushMatrix();
glRotatef(-90.0,1.0,0.0,0.0);
gluCylinder(md1f,MEDIO_ANCHO1F,MEDIO_ANCHO1F,MEDIO_ALTO1F,10,10);
glPopMatrix();
}
void medio2f()
{
glPushMatrix();
glRotatef(-90.0,1.0,0.0,0.0);
gluCylinder(md2f,MEDIO_ANCHO2F,MEDIO_ANCHO2F,MEDIO_ALTO2F,10,10);
glPopMatrix();
}
void medio3f()
{
glPushMatrix();
glRotatef(-90.0,1.0,0.0,0.0);
gluCylinder(md3f,MEDIO_ANCHO3F,MEDIO_ANCHO3F,MEDIO_ALTO3F,10,10);
glPopMatrix();
}
void anular1f()
{
glPushMatrix();
glRotatef(-90.0,1.0,0.0,0.0);
gluCylinder(a1f,ANULAR_ANCHO1F,ANULAR_ANCHO1F,ANULAR_ALTO1F,10,10);
glPopMatrix();
}
void anular2f()
{
glPushMatrix();
glRotatef(-90.0,1.0,0.0,0.0);
gluCylinder(a2f,ANULAR_ANCHO2F,ANULAR_ANCHO2F,ANULAR_ALTO2F,10,10);
glPopMatrix();
}
void anular3f()
{
glPushMatrix();
glRotatef(-90.0,1.0,0.0,0.0);
gluCylinder(a3f,ANULAR_ANCHO3F,ANULAR_ANCHO3F,ANULAR_ALTO3F,10,10);
glPopMatrix();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glColor3f(1.0,0.0,0.0);
glTranslatef(-4.5, -ANTEBRAZO_ALTO,0.0);
glRotatef(theta[0],0.0,1.0,0.0);
glRotatef(theta[1],1.0,0.0,0.0);
antebrazo();
glTranslatef(0.0, ANTEBRAZO_ALTO,0.0);
glPushMatrix();
glRotatef(theta[2],0.0,1.0,0.0);
glRotatef(theta[3],1.0,0.0,0.0);
palma();
glPushMatrix();
glTranslatef(-PULGAR_ALTO1F/2-0.5,PULGAR_ALTO1F/2+1,0.0);
glRotatef(theta[4],0.0,1.0,0.0);
glTranslatef(0.0,-PULGAR_ALTO1F/2,0.0);
pulgar1f();
glTranslatef(-PULGAR_ALTO1F/2-0.5,PULGAR_ALTO1F+0.5,0.0);
glRotatef(theta[5],0.0,1.0,0.0);
glTranslatef(0.0,-PULGAR_ALTO1F/2,0.0);
pulgar2f();
glPopMatrix();
glPushMatrix();
glTranslatef(-PALMA_ANCHO/2+0.5, PALMA_ALTO,0.0);
glRotatef(theta[6],1.0,0.0,0.0);
indice1f();
glTranslatef(0.0,INDICE_ALTO1F,0.0);
glRotatef(theta[7],1.0,0.0,0.0);
indice2f();
glTranslatef(0.0,INDICE_ALTO2F,0.0);
glRotatef(theta[7],1.0,0.0,0.0);
indice3f();
glPopMatrix();
glPushMatrix();
glTranslatef(-PALMA_ANCHO/2+1.5,PALMA_ALTO,0.0);
glRotatef(theta[8],1.0,0.0,0.0);
medio1f();
glTranslatef(0.0,MEDIO_ALTO1F,0.0);
glRotatef(theta[9],1.0,0.0,0.0);
medio2f();
glTranslatef(0.0,MEDIO_ALTO2F,0.0);
glRotatef(theta[9],1.0,0.0,0.0);
medio3f();
glPopMatrix();
glPushMatrix();
glTranslatef(PALMA_ANCHO/2-1.5,PALMA_ALTO,0.0);
glRotatef(theta[10],1.0,0.0,0.0);
anular1f();
glTranslatef(0.0,ANULAR_ALTO1F,0.0);
glRotatef(theta[11],1.0,0.0,0.0);
anular2f();
glTranslatef(0.0,ANULAR_ALTO2F,0.0);
glRotatef(theta[11],1.0,0.0,0.0);
anular3f();
glPopMatrix();
glPushMatrix();
glTranslatef(PALMA_ANCHO/2-0.5,PALMA_ALTO,0.0);
glRotatef(theta[12],1.0,0.0,0.0);
menique1f();
glTranslatef(0.0,MENIQUE_ALTO1F,0.0);
glRotatef(theta[13],1.0,0.0,0.0);
menique2f();
glTranslatef(0.0,MENIQUE_ALTO2F,0.0);
glRotatef(theta[13],1.0,0.0,0.0);
menique3f();
glPopMatrix();
glPopMatrix();
glFlush();
glutSwapBuffers();
}
void mouse(int btn, int state, int x, int y)
{
GLfloat mintope;
if(btn==GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{
if (angle <=3 ) mintope = -180.0;
else mintope = 0.0;
theta[angle]+=5.0;
if( theta[angle] > 150.0) theta[angle] = 150.0;
display();
}
display();
}
void animacion_amorypaz(void)
{
int i,j;
int mueve=1;
do
{
for(i = 0; i <=13 ; i++)
{
if (theta[i]!=theta_amorypaz[i])
{
if (theta[i]
if((((int)(theta_amorypaz[i]-theta[i]))%5)==0)
theta[i]+=5.0;
else
theta[i]+=(GLfloat)(((int)(theta_amorypaz[i]-theta[i]))%5);
}
else
{
if((((int)(theta[i]-theta_amorypaz[i]))%5)==0)
theta[i]-=5.0;
else
theta[i]-=(GLfloat)(((int)(theta[i]-theta_amorypaz[i]))%5);
}
}
}
j=13;
for(i = 0; i <=13 ; i++)
{
if(theta[i]==theta_amorypaz[i]) j--;
}
if (j<=0) mueve=0;
display();
}
while(mueve);
}
void animacion_spiderman(void)
{
int i,j;
int mueve=1;
do
{
for(i = 0; i <=13 ; i++)
{
if (theta[i]!=theta_spiderman[i])
{
if (theta[i]
if((((int)(theta_spiderman[i]-theta[i]))%5)==0)
theta[i]+=5.0;
else
theta[i]+=(GLfloat)(((int)(theta_spiderman[i]-theta[i]))%5);
}
else
{
if((((int)(theta[i]-theta_spiderman[i]))%5)==0)
theta[i]-=5.0;
else
theta[i]-=(GLfloat)(((int)(theta[i]-theta_spiderman[i]))%5);
}
}
}
j=13;
for(i = 0; i <=13 ; i++)
{
if(theta[i]==theta_spiderman[i]) j--;
}
if (j<=0) mueve=0;
display();
}
while(mueve);
}
void animacion_restituye(void)
{
int i,j;
int mueve=1;
do
{
for(i = 0; i <=13 ; i++)
{
if (theta[i]!=0.0)
{
if (theta[i]<0.0)
{
if(((int)theta[i]%5)==0)
theta[i]+=5.0;
else
theta[i]+=(GLfloat)(((int)theta[i])%5);
}
else
{
if(((int)theta[i]%5)==0)
theta[i]-=5.0;
else
theta[i]-=(GLfloat)(((int)theta[i])%5);
}
}
}
j=13;
for(i = 0; i <=13 ; i++)
{
if(theta[i]==0.0) j--;
}
if (j<=0) mueve=0;
display();
}
while(mueve);
}
void menu(int id)
{
if(id <= 1) direccion = id;
else if(id <= 15 ) angle=id-2;
else if(id <= 18 )
{
switch (id)
{
case 16:
animacion_amorypaz();
break;
case 17:
animacion_spiderman();
break; }
display();
}
else if(id == 19) exit(0);
else if(id == 20) animacion_restituye();
}
void myReshape(int w, int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w<=h)
glOrtho(-10.0,10.0,-10.0 * (GLfloat) h / (GLfloat) w,10.0 * (GLfloat) h / (GLfloat) w, -10.0, 10.0);
else
glOrtho(-10.0 * (GLfloat) w / (GLfloat) h,10.0 * (GLfloat) w / (GLfloat) h, 0.0, 10.0, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void myinit()
{
GLfloat mat_specular[] ={1.0,1.0,1.0,1.0};
GLfloat mat_diffuse[] ={1.0,1.0,1.0,1.0};
GLfloat mat_ambient[] ={1.0,1.0,1.0,1.0};
GLfloat mat_shininess[] ={100.0};
GLfloat light_ambient[] ={0.0,0.0,0.0,1.0};
GLfloat light_diffuse[] ={1.0,0.0,0.0,1.0};
GLfloat light_specular[]={1.0,1.0,1.0,1.0};
GLfloat light_position[]={10.0,10.0,10.0,0.0};
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glEnable(GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH_TEST);
glClearColor(1.0,1.0,1.0,1.0);
glColor3f(1.0,0.0,0.0);
ab=gluNewQuadric();
gluQuadricDrawStyle(ab,GLU_FILL);
p1f=gluNewQuadric();
gluQuadricDrawStyle(p1f,GLU_FILL);
p2f=gluNewQuadric();
gluQuadricDrawStyle(p2f,GLU_FILL);
m1f=gluNewQuadric();
gluQuadricDrawStyle(m1f,GLU_FILL);
m2f=gluNewQuadric();
gluQuadricDrawStyle(m2f,GLU_FILL);
m3f=gluNewQuadric();
gluQuadricDrawStyle(m3f,GLU_FILL);
i1f=gluNewQuadric();
gluQuadricDrawStyle(i1f,GLU_FILL);
i2f=gluNewQuadric();
gluQuadricDrawStyle(i2f,GLU_FILL);
i3f=gluNewQuadric();
gluQuadricDrawStyle(i3f,GLU_FILL);
md1f=gluNewQuadric();
gluQuadricDrawStyle(md1f,GLU_FILL);
md2f=gluNewQuadric();
gluQuadricDrawStyle(md2f,GLU_FILL);
md3f=gluNewQuadric();
gluQuadricDrawStyle(md3f,GLU_FILL);
a1f=gluNewQuadric();
gluQuadricDrawStyle(a1f,GLU_FILL);
a2f=gluNewQuadric();
gluQuadricDrawStyle(a2f,GLU_FILL);
a3f=gluNewQuadric();
gluQuadricDrawStyle(a3f,GLU_FILL);
}
void main(int argc, char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(500,500);
glutInitWindowPosition(400,100);
glutCreateWindow("Mano");
myinit();
glutReshapeFunc(myReshape);
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutCreateMenu(menu);
glutAddMenuEntry("
glutAddMenuEntry("
glutAddMenuEntry("Girar Brazo",2);
glutAddMenuEntry("Doblar Brazo",3);
glutAddMenuEntry("Girar Palma",4);
glutAddMenuEntry("Doblar Palma",5);
glutAddMenuEntry("Pulgar 1ª falange",6);
glutAddMenuEntry("Pulgar 2ª falange",7);
glutAddMenuEntry("Indice 1ª falange",8);
glutAddMenuEntry("Indice 2ª y 3ª falanges",9);
glutAddMenuEntry("Medio 1ª falange",10);
glutAddMenuEntry("Medio 2ª y 3ª falanges",11);
glutAddMenuEntry("Anular 1ª falange",12);
glutAddMenuEntry("Anular 2ª y 3ª falanges",13);
glutAddMenuEntry("Meñique 1ª falange",14);
glutAddMenuEntry("Meñique 2ª y 3ª falanges",15);
glutAddMenuEntry("Gestos - AMOR Y PAZ",16);
glutAddMenuEntry("Gestos - SPIDERMAN",17);
glutAddMenuEntry("RESTITUIR",20);
glutAddMenuEntry("
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutMainLoop();
}
No hay comentarios:
Publicar un comentario