martes, 11 de marzo de 2008

Reporte de practica 3

Reporte de la practica tres, el programa dado por el profesor se debe agregar otro brazo, tronco y cabeza:


___________________________________________



//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: