martes, 11 de septiembre de 2007

Práctica 3


1.- Compile y ejecute el código que escribió en el reporte previo.

/*Humanoide parametrizado*/
#include

void init(void){
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_FLAT);
}
void cubod(void)
{
glBegin(GL_LINE_LOOP);
glVertex3f(0.5,0.5,0.5);
glVertex3f(-0.5,0.5,0.5);
glVertex3f(-0.5,-0.5,0.5);
glVertex3f(0.5,-0.5,0.5);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex3f(-0.5,0.5,-0.5);
glVertex3f( 0.5,0.5,-0.5);
glVertex3f(0.5,-0.5,-0.5);
glVertex3f(-0.5,-0.5,-0.5);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex3f(-0.5,0.5,0.5);
glVertex3f(-0.5,0.5,-0.5);
glVertex3f(-0.5,-0.5,-0.5);
glVertex3f(-0.5,-0.5,0.5);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex3f(0.5,0.5,0.5);
glVertex3f(0.5,-0.5,0.5);
glVertex3f( 0.5,-0.5,-0.5);
glVertex3f(0.5,0.5,-0.5);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex3f(-0.5,0.5,-0.5);
glVertex3f(-0.5,0.5,0.5);
glVertex3f(0.5,0.5,0.5);
glVertex3f( 0.5,0.5,-0.5);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex3f(0.5,-0.5,-0.5);
glVertex3f(-0.5,-0.5,-0.5);
glVertex3f(-0.5,-0.5,0.5);
glVertex3f(0.5,-0.5,0.5);
glEnd();
}
/*Rotaciones del brazo derecho*/
static int brazderrot = 0;
static int angbrazder = 0;
static int codderrot = 0;
static int angcododer = 0;
/*cabeza*/
void cabeza (float x){
glPushMatrix();
glTranslatef(0.0,2.0,0.0);
glRotatef(x,0.0,0.1,0.0);
cubohueco();
glPopMatrix();
}
/*Torso.*/
void tronco (float x, float y, float z){
glTranslatef(x,y,z);
glRotatef((GLfloat)torsorot,0.0,1.0,0.0);
glPushMatrix();
glScalef (2.0, 3.0, 1.0);
cubod();
glPopMatrix();
}
/*brazo derecho*/
void brazoder (int y, int z){
glPushMatrix();
glTranslatef(2.0,1.25,0.0);
glTranslatef(-1.0,0.0,0.0);
/*eje en el cual va a girar el brazo.*/
switch(y){
case 0:
glRotatef((GLfloat)angbrazder, 1.0, 0.0, 0.0);
break;
case 1:
glRotatef((GLfloat)angbrazder, 0.0, 1.0, 0.0);
break;
case 2:
glRotatef((GLfloat)angbrazder, 0.0, 0.0, 1.0);
break;
default:
break;
}
glPushMatrix();
glTranslatef(1.0,0.0,0.0);
glScalef(2.0,0.5,1.0);
cubod();
glPopMatrix();
/*antebrazo derecho*/
glTranslatef(3.0,0.0,0.0);
glTranslatef(-1.0,0.0,0.0);
/*eje sobre el cuál girará el antebrazo derecho*/
switch(z){
case 0:
glRotatef((GLfloat)angcododer, 1.0, 0.0, 0.0);
break;
case 1:
glRotatef((GLfloat)angcododer, 0.0, 1.0, 0.0);
break;
case 2:
glRotatef((GLfloat)angcododer, 0.0, 0.0, 1.0);
break;
default:
break;
}
glPushMatrix();
glTranslatef(1.0,0.0,0.0);
glScalef(2.0,1.0,1.0);
cubod();
glPopMatrix();
/*mano derecha*/
glTranslatef(2.25,0.0,0.0);
glPushMatrix();
glScalef(0.5,0.5,1.0);
cubod();
glPopMatrix();
glPopMatrix();
}
void brazoizq (float x, int y){
glPushMatrix();
glTranslatef(-2.0,1.25,0.0);
/*eje sobre el cuál girará el brazo izquierdo*/
switch(y){
case 0:
glRotatef((GLfloat)angbrazizq, 1.0, 0.0, 0.0);
break;
case 1:
glRotatef((GLfloat)angbrazizq, 0.0, 1.0, 0.0);
break;
case 2:
glRotatef((GLfloat)angbrazizq, 0.0, 0.0, 1.0);
break;
default:
break;
}
glPushMatrix();
glScalef(2.0,0.5,1.0);
cubod();
glPopMatrix();
/*antebrazo izquierdo*/
glTranslatef(-2.0,0.0,0.0);
glPushMatrix();
glScalef(2.0,1.0,1.0);
cubod();
glPopMatrix();
/*mano izquierdo*/
glTranslatef(-1.25,0.0,0.0);
glPushMatrix();
glScalef(0.5,0.5,1.0);
cubod();
glPopMatrix();
glPopMatrix();
}
void pierder (float x, int y){
glPushMatrix();
glTranslatef(0.6,-2.25,0.0);
/*giro de la pierna derecha*/
switch(y){
case 0:
glRotatef((GLfloat)angpierder, 1.0, 0.0, 0.0);
break;
case 1:
glRotatef((GLfloat)angpierder, 0.0, 1.0, 0.0);
break;
case 2:
glRotatef((GLfloat)angpierder, 0.0, 0.0, 1.0);
break;
default:
break;
}
glPushMatrix();
glScalef(0.75,1.5,1.0);
cubod();
glPopMatrix();
/*pantorrilla derecha*/
glTranslatef(0.0,-1.5,0.0);
glPushMatrix();
glScalef(0.6,1.5,1.0);
cubod();
glPopMatrix();
/*pie derecho*/
glTranslatef(0.25,-0.85,0.0);
glPushMatrix();
glScalef(1.5,0.25,1.0);
cubod();
glPopMatrix();
glPopMatrix();/*pierna derecha completa*/
}
void pierizq (float x, int y){
glPushMatrix();
glTranslatef(-0.6,-2.25,0.0);
/*Switch que indica sobre qué eje va a girar la pierna izquierda.*/
switch(y){
case 0:
glRotatef((GLfloat)angpierizq, 1.0, 0.0, 0.0);
break;
case 1:
glRotatef((GLfloat)angpierizq, 0.0, 1.0, 0.0);
break;
case 2:
glRotatef((GLfloat)angpierizq, 0.0, 0.0, 1.0);
break;
default:
break;
}
glPushMatrix();
glScalef(0.75,1.5,1.0);
cubod();
glPopMatrix();
/*pantorrilla izquierda*/
glTranslatef(0.0,-1.5,0.0);
glPushMatrix();
glScalef(0.6,1.5,1.0);
cubod();
glPopMatrix();
/*pie izquierdo*/
glTranslatef(-0.25,-0.85,0.0);
glPushMatrix();
glScalef(1.5,0.25,1.0);
cubod();
glPopMatrix();
glPopMatrix();/*pierna izquierda completa*/
}
void display (void)
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);
glLoadIdentity (); /* clear the matrix */
gluLookAt (0.0, 0.0, 9.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glPushMatrix();
/*torso*/
tronco(0.0,1.5,0.0);
/*cara*/
cabeza(cuellorot);
/*brazo derecho*/
brazoder(brazderrot, codderrot);
/*brazo izquierdo*/
brazoizq(angbrazizq,brazizqrot);
/*muslo derecho*/
pierder(angpierder,pierderrot);
/*muslo izquierdo*/
pierizq(angpierizq,pierizqrot);
glPopMatrix();/*humanoide completo*/
glFlush ();
}
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
glMatrixMode (GL_MODELVIEW);
}
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 't':
torsorot = (torsorot + 5)%360;
glutPostRedisplay();
break;
case 'j':
brazderrot = brazderrot + 1;
angbrazder = 0;
angcododer = angcododer-5;
if(brazderrot==3){
brazderrot = 0;
}
case 'k':
codderrot = codderrot + 1;
angcododer = 0;
angbrazder = angbrazder-5;
if(codderrot==3){
codderrot = 0;
}
case 'd':
angbrazder = (angbrazder + 5)%180;
glutPostRedisplay();
break;
case 's':
angcododer = (angcododer + 5)%180;
glutPostRedisplay();
break;
case 27:
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (80, 200);
glutCreateWindow ('Humanoide jerárquico');
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}


2.- Cree de manera jerárquica un brazo robot de dos eslabones, construida a partir de un cubo deformado por escalamiento, función brazorobot() en objetos.h

#include
void reshape(int width, int height)
{
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-12,12, -12, 12, 0.001, 100);
glMatrixMode(GL_MODELVIEW);
}
void cuadrado()
{
glBegin(GL_LINE_STRIP);
glVertex3f(-1.5,1.5,-1.5);
glVertex3f(-1.5,-1.5,-1.5);
glVertex3f(1.5,-1.5,-1.5);
glVertex3f(1.5,1.5,-1.5);
glVertex3f(-1.5,1.5,-1.5);
glEnd();
}
void cubo()
{
cuadrado();
glPushMatrix();
glTranslatef(0.0f, 0.0f, 0.0f);
cuadrado();
glPopMatrix();
glPushMatrix();
glRotatef(-90, 0.0f, 0.0f, 1.0f);
cuadrado();
glPopMatrix();
glPushMatrix();
glRotatef(90, 0.0f, 0.0f, 1.0f);
cuadrado();
glPopMatrix();
}
void hombro()
{
glPushMatrix();
glScalef(1.5f, 1.5f, 0.5f);
cubo();
glPopMatrix();
}
void brazo()
{
glPushMatrix();
glRotatef(10, 0.0f, 0.0f, 1.0f);
glTranslatef(6.0f, -0.5f, 0.0f);
glScalef(3.0f, 1.0f, 1.0f);
cubo();
glPopMatrix();
}
void brazo_robot()
{
hombro();
brazo();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(3,1,3);
glLoadIdentity();
glRotatef(0, 0.0f, 0.0f, 1.0f);
brazo_robot();
glFlush();
}
void init()
{
glClearColor(-6,0,1,-2);
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(500, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("Brazo Robot");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}



3.- Agregue dos eslabones más al brazo robot a manera de una tenaza y cree la función brazo robot con tenaza() en objetos.h.

#include
void reshape(int width, int height)
{
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-12,12, -12, 12, 0.001, 100);
glMatrixMode(GL_MODELVIEW);
}
void cuadrado()
{
glBegin(GL_LINE_STRIP);
glVertex3f(-0.9,0.9,-0.9);
glVertex3f(-0.9,-0.9,-0.9);
glVertex3f(0.9,-0.9,-0.9);
glVertex3f(0.9,0.9,-0.9);
glVertex3f(-0.9,0.9,-0.9);
glEnd();
}
void cubo()
{
cuadrado();
glPushMatrix();
cuadrado();
glPopMatrix();
glPushMatrix();
cuadrado();
glPopMatrix();
glPushMatrix();
cuadrado();
glPopMatrix();
}
void hombro()
{
glPushMatrix();
glScalef(2.0f, 2.0f, 1.0f);
cubo();
glPopMatrix();
}
void brazo()
{
glPushMatrix();
glTranslatef(4.5f, 0.0f, 0.0f);
glScalef(4.0f, 1.0f, 1.0f);
cubo();
glPopMatrix();
}
void dedos()
{
glPushMatrix();
glTranslatef(9.0f, 0.25f, 0.0f);
glScalef(1.0f, 0.25f, 1.0f);
cubo();
glTranslatef(0.0f, -2.0f, 0.0f);
cubo();
glPopMatrix();
}
void brazo_robot_tenaza()
{
hombro();
brazo();
dedos();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,0,0);
glLoadIdentity();
brazo_robot_tenaza();
glFlush();
}
void init()
{
glClearColor(-10,2,-10,0);
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(500, 100);
glutInitWindowSize(300, 200);
glutCreateWindow("Brazo con un par de tenazas");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}


No hay comentarios: