___________________________________________
//Programa brazo.c
//4 de marzo de 2008
/* Granados Chavarria Eduardo
*
* reporte practica 3
*/
//Igor Valiente - igor at servidor dot unam dot mx
#include GLfloat light_diffuse[] = {1.0, 0.0, 0.0, 1.0}; /* Red diffuse light. */ GLfloat light_poseybition[] = {1.0, 1.0, -1.0, 0.0}; /* Infinite light location. */ GLfloat n[6][3] = { /* Normals for the 6 faces of a cube. */ {-1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {1.0, 0.0, 0.0}, {0.0, -1.0, 0.0}, {0.0, 0.0, 1.0}, {0.0, 0.0, -1.0} }; GLint faces[6][4] = { /* Vertex indices for the 6 faces of a cube. */ {0, 1, 2, 3}, {3, 2, 6, 7}, {7, 6, 5, 4}, {4, 5, 1, 0}, {5, 6, 2, 1}, {7, 4, 0, 3} }; GLfloat v[8][3]; /* Will be filled in with X,Y,Z vertexes. */ static int shoulder=0; static int joint=0; static int wrist=0; void drawBox(void) { int i; for (i = 0; i < 6; i++) { glBegin(GL_QUADS); glNormal3fv(&n[i][0]); glVertex3fv(&v[faces[i][0]][0]); glVertex3fv(&v[faces[i][1]][0]); glVertex3fv(&v[faces[i][2]][0]); glVertex3fv(&v[faces[i][3]][0]); glEnd(); } } void troncoCabeza() { glPushMatrix(); // tronco glTranslatef(0,1.10,0); glPushMatrix(); glScalef(2.6,2.2,0.5); drawBox(); glPopMatrix(); glTranslatef(0,1.45,0); glPushMatrix(); glScalef(0.7,0.7,0.5); drawBox(); glPopMatrix(); glPopMatrix(); } void brazoIzquierdo(int shoulder, int joint, int wrist) { glPushMatrix(); glTranslatef(-1.3,2.0,0); //empieza el dibujo del brazo robot glPushMatrix(); //empieza el brazo glRotatef(-(GLfloat)shoulder, 0.0, 0.0, 1.0); glTranslatef(-1.0, 0.0, 0.0); glPushMatrix(); glScalef(2.0,0.5,0.5); drawBox(); glPopMatrix(); //termina brazo //empieza antebrazo glTranslatef(-1.0, 0.0, 0.0); glRotatef(-(GLfloat)joint, 0.0, 0.0, 1.0); glTranslatef(-1.0, 0.0, 0.0); glPushMatrix(); glScalef(2.0,0.5,0.5); drawBox(); glPopMatrix(); //termina antebrazo-- M6 //empieza el grip glPushMatrix(); //empieza el primer dedo glPushMatrix(); glTranslatef(-1.0,0.0,0.0); glRotatef((GLfloat)wrist,0.0,0.0,1.0); glTranslatef(-0.35,0.125,0.0); glPushMatrix(); glScalef(0.7,0.25,0.25); drawBox(); glPopMatrix(); glPopMatrix(); //termina el primer dedo //empieza el segundo dedo glPushMatrix(); glTranslatef(-1.0,0.0,0.0); glRotatef((GLfloat)-wrist,0.0,0.0,1.0); glTranslatef(-0.35,-0.125,0.0); glPushMatrix(); glScalef(0.7,0.25,0.25); drawBox(); glPopMatrix(); glPopMatrix(); //termina el segundo dedo glPopMatrix(); //termina el grip glPopMatrix(); //termina el dibujo del brazo robot glPopMatrix(); } void brazo(int shoulder, int joint, int wrist) { //empieza el dibujo del brazo robot glPushMatrix(); glTranslatef(1.3,2.0,0); glPushMatrix(); //empieza el brazo glRotatef((GLfloat)shoulder, 0.0, 0.0, 1.0); glTranslatef(1.0, 0.0, 0.0); glPushMatrix(); glScalef(2.0,0.5,0.5); drawBox(); glPopMatrix(); //termina brazo //empieza antebrazo glTranslatef(1.0, 0.0, 0.0); glRotatef((GLfloat)joint, 0.0, 0.0, 1.0); glTranslatef(1.0, 0.0, 0.0); glPushMatrix(); glScalef(2.0,0.5,0.5); drawBox(); glPopMatrix(); //termina antebrazo-- M6 //empieza el grip glPushMatrix(); //empieza el primer dedo glPushMatrix(); glTranslatef(1.0,0.0,0.0); glRotatef((GLfloat)wrist,0.0,0.0,1.0); glTranslatef(0.35,0.125,0.0); glPushMatrix(); glScalef(0.7,0.25,0.25); drawBox(); glPopMatrix(); glPopMatrix(); //termina el primer dedo //empieza el segundo dedo glPushMatrix(); glTranslatef(1.0,0.0,0.0); glRotatef((GLfloat)-wrist,0.0,0.0,1.0); glTranslatef(0.35,-0.125,0.0); glPushMatrix(); glScalef(0.7,0.25,0.25); drawBox(); glPopMatrix(); glPopMatrix(); //termina el segundo dedo glPopMatrix(); //termina el grip glPopMatrix(); //termina el dibujo del brazo robot glPopMatrix(); } display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); brazoIzquierdo(shoulder,joint,wrist); brazo(shoulder,joint,wrist); troncoCabeza(); glutSwapBuffers(); } void init(void) { /* Setup cube vertex data. */ v[0][0] = v[1][0] = v[2][0] = v[3][0] = -0.5; v[4][0] = v[5][0] = v[6][0] = v[7][0] = 0.5; v[0][1] = v[1][1] = v[4][1] = v[5][1] = -0.5; v[2][1] = v[3][1] = v[6][1] = v[7][1] = 0.5; v[0][2] = v[3][2] = v[4][2] = v[7][2] = 0.5; v[1][2] = v[2][2] = v[5][2] = v[6][2] = -0.5; /* Enable a single OpenGL light. */ glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); /* Use depth buffering for hidden surface elimination. */ glEnable(GL_DEPTH_TEST); /* Setup the view of the cube. */ glMatrixMode(GL_PROJECTION); gluPerspective( /* field of view in degree */ 120.0, /* aspect ratio */ 1.0, /* Z near */ 1.0, /* Z far */ 20.0); glMatrixMode(GL_MODELVIEW); gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,5) */ 0.0, 0.0, 0.0, /* center is at (0,0,0) */ 0.0, 1.0, 0.); /* up is in positive Y direction */ /* Adjust cube position to be asthetic angle. */ //glTranslatef(0.0, 0.0, -1.0); glRotatef(20, 1.0, 0.0, 0.0); //glRotatef(-20, 0.0, 0.0, 1.0); } int keyboard(char key, int x, int y) { switch(key){ case 27: exit(0); //tecla de escape break; case 'h': shoulder=(shoulder+5)%360; glutPostRedisplay(); break; case 'H': shoulder=(shoulder-5)%360; glutPostRedisplay(); break; case 'c': joint=(joint+5)%360; glutPostRedisplay(); break; case 'C': joint=(joint-5)%360; glutPostRedisplay(); break; case 'm': wrist=(wrist+5)%360; glutPostRedisplay(); break; case 'M': wrist=(wrist-5)%360; glutPostRedisplay(); break; default: break; } glutPostRedisplay(); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(500,500); glutCreateWindow("Brazo robot rojo"); glutDisplayFunc(display); glutKeyboardFunc(keyboard); init(); glutMainLoop(); return 0; /* ANSI C requires main to return int. */ }

No hay comentarios:
Publicar un comentario