martes, 25 de septiembre de 2007

PRACTICA 4

Este es el código que dibuja a los 3 humanoides y al cubo con la esfera arriba y los brazos saliendo de ella.

#include
#include "cubo0.h"
#include "triangulo.h"

void mano (void)
{
glPushMatrix();
glScalef(1.2,1,1);
cubo();
glPopMatrix();
}

void brazo(void)
{
glPushMatrix();
glScalef(1,0.3,0.6);
cubo();
/*glPushMatrix();
glTranslatef(1.1,0,0);
mano();
glPopMatrix();*/
glPopMatrix();
}
void pierna(void)
{
glPushMatrix();
glScalef(0.5,3,1.1);
cubo();
glPopMatrix();
}

void brazoRobot(void)
{
//brazo
glPushMatrix();
glRotatef(30,0.0,0.0,1.0);
glTranslatef(0.0,1.5,0.0);
glPushMatrix();
glScalef(0.5,3.0,0.5);
cubo();
glPopMatrix();
//antebrazo

glTranslatef(0.0,1.5,0.0);
glRotatef(-30,0.0,0.0,1.0);
glTranslatef(0.0,1.0,0.0);
glPushMatrix();
glScalef(0.5,2.0,0.5);
cubo();
glPopMatrix();

//dedos
//dedo1
glPushMatrix();
glTranslatef(0.0,0.5,0.0);
glRotatef(10,0.0,0.0,1.0);
glTranslatef(-0.125,1.0,0.0);
glPushMatrix();
glScalef(0.25,1.0,0.5);
cubo();
glPopMatrix();
glPopMatrix();
//dedo2
glPushMatrix();
glTranslatef(0.0,0.5,0.0);
glRotatef(-10,0.0,0.0,1.0);
glTranslatef(0.125,1.0,0.0);
glPushMatrix();
glScalef(0.25,1.0,0.5);
cubo();
glPopMatrix();
glPopMatrix();
glPopMatrix();
glFlush();
}

void monito (void)
{
glPushMatrix();
glTranslatef(0,1,0);
glScalef(1.2,1.5,1);
cubo(); //PECHO
glPushMatrix();
glTranslatef(0,0.75,0);
glScalef(0.75,0.6,0.8);
cubo(); //CABEZA
glPopMatrix();
glPushMatrix();
glTranslatef(1,0.15,0);
glRotatef(-20,0,0,1);
brazo(); //BRAZO DERECHO
glPopMatrix();
glPushMatrix();
glTranslatef(-1,0.15,0);
glRotatef(200,0,0,1);
brazo(); //BRAZO IZQUIERDO
glPopMatrix();
glPushMatrix();
glTranslatef(0,-0.75,0);
glScalef(0.8,0.5,0.8);
cubo(); //CINTURA
glPushMatrix();
glTranslatef(-0.35,-2,0);
pierna(); //PIERNA
glPushMatrix();
glTranslatef(-0.25,-1.75,0);
glScalef(1,0.5,1);
cubo();
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(0.35,-2,0);
pierna();
glPushMatrix();
glTranslatef(0.25,-1.75,0);
glScalef(1,0.5,1);
cubo();
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPopMatrix();

}

void escena (void)
{
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH_TEST);
glClearDepth(1.0);
glClearColor(1.0,1.0,1.0,0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(50.0,1.0,1.0,100.0);

glMatrixMode(GL_MODELVIEW);

glPushMatrix();
glTranslatef(0,0,-7);
monito();
glPopMatrix();
glPushMatrix();
glTranslatef(7,-1.7,7);
glRotatef(-120,0,1,0);
glScalef(2,0.5,1);
monito();
glPopMatrix();
glPushMatrix();
glTranslatef(-7,1.7,7);
glRotatef(120,0,1,0);
glScalef(0.5,1.5,1);
monito();
glPopMatrix();
glPushMatrix();
glTranslatef(0,-3.3,0);
glScalef(3,3,3);
triangulo();
glPopMatrix();
glPushMatrix();
glTranslatef(0,0,0);
glScalef(1.5,5.5,1.5);
cubo();
glPushMatrix();
glTranslatef(0,1.3,0);
glColor3d(0.8,0.3,0.7);
glutWireSphere(0.8,30,30);
glPushMatrix();
glTranslatef(-0.8,0,0);
glScalef(1,0.1,1);
brazoRobot();
glPopMatrix();
glPushMatrix();
glTranslatef(0,0,0.8);
glRotatef(90,0,1,0);
glScalef(1,0.1,1);
brazoRobot();
glPopMatrix();
glPushMatrix();
glTranslatef(0,0,-0.8);
glRotatef(-90,0,1,0);
glScalef(1,0.1,1);
brazoRobot();
glPopMatrix();
glPushMatrix();
glTranslatef(0.8,0,0);
glRotatef(180,0,1,0);
glScalef(1,0.1,1);
brazoRobot();
glPopMatrix();
glPopMatrix();
glPopMatrix();
glRotatef(45,1,1,1);
glFlush();
}

int main(int argc,char *argv)
{
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA| GLUT_DEPTH );
glutInitWindowPosition(0,0);
glutInitWindowSize(600,600);
glutCreateWindow("Practica 4");
gluLookAt(0.0, 5.0, 25.0,0.0, 0.0, 0.0,0.0, 1.0, 0.0);
//Vista desde el punto 0,0,0. Con el 3er parámetro se acerca o se aleja la cámara
glutDisplayFunc(escena);
glutMainLoop();
return 0;
}


2. Para qué sirve tener una escena construida jerárquicamente?

Sirve para poder tener el control sobre el objeto o la escena que se crea, ya que de esta manera el movimiento o traslado de los objetos sucede de forma "natural", es decir, que por ejemplo si se desea mover algo que esta conectado o ligado a otra cosa, este objeto se mueva también. Esto lo vimos con el modelado del humanoide. Para que el humanoide pueda mover el pie por ejemplo es necesario mover la pierna o si se desea mover la cabeza se tenga que mover forzosamente la cabeza.

No hay comentarios: