miércoles, 26 de septiembre de 2007

Reporte Practica 4 (LABORATORIO)

1.- Describa las ventajas de construir de manera jerárquica escenas

-AL contruir jerarquicamente, podemos descomponer una escena compleja en objetos sencillos lo que nos permitirá hacer construcciones y operaciones eficientes. Otra ventaja que se puede mencionar es la reutilización de código.

2.-
Escriba un programa que construya de manera jerárquica una escena en la que:

código:

/*Construcción de escena con humanoides y pilar de adoracion
LAb. computación g´rafica, Ximena Gutiérrez Vasques*/


#include
#include

float Ang=0;
void Idle(void);


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 cubo(void) //construcción del cubo , cara por cara
{
glBegin(GL_QUADS);

glVertex3f(0.5f,0.5f,0.5f);
glVertex3f(-0.5f,0.5f,0.5f);
glVertex3f(-0.5f,-0.5f,0.5f);
glVertex3f(0.5f,-0.5f,0.5f);

glEnd();
glBegin(GL_QUADS);

glVertex3f(-0.5f,0.5f,-0.5f);
glVertex3f( 0.5f,0.5f,-0.5f);
glVertex3f(0.5f,-0.5f,-0.5f);
glVertex3f(-0.5f,-0.5f,-0.5f);

glEnd();
glBegin(GL_QUADS);

glVertex3f(-0.5f,0.5f,0.5f);
glVertex3f(-0.5f,0.5f,-0.5f);
glVertex3f(-0.5f,-0.5f,-0.5f);
glVertex3f(-0.5f,-0.5f,0.5f);

glEnd();
glBegin(GL_QUADS);

glVertex3f(0.5f,0.5f,0.5f);
glVertex3f(0.5f,-0.5f,0.5f);
glVertex3f( 0.5f,-0.5f,-0.5f);
glVertex3f(0.5f,0.5f,-0.5f);
glEnd();
glBegin(GL_QUADS);

glVertex3f(-0.5f,0.5f,-0.5f);
glVertex3f(-0.5f,0.5f,0.5f);
glVertex3f(0.5f,0.5f,0.5f);
glVertex3f( 0.5f,0.5f,-0.5f);
glEnd();
glBegin(GL_QUADS);

glVertex3f(0.5f,-0.5f,-0.5f);
glVertex3f(-0.5f,-0.5f,-0.5f);
glVertex3f(-0.5f,-0.5f,0.5f);
glVertex3f(0.5f,-0.5f,0.5f);

glEnd();
}


void triangulo()
{

glBegin(GL_POLYGON);

glVertex3f(0.5f,0.5f,0.5f);
glVertex3f(-0.5f,0.5f,0.5f);
glVertex3f(-0.5f,-0.5f,0.5f);

glEnd();
}


void columna(void) /*columna de adoracion*/
{
glPushMatrix();
glScalef(2,6,2);
cubo();
glPushMatrix();

}
//cosntruccion jerarquica de humanoides
void palma ()
{
glPushMatrix();
glScalef(2,2,0);
cubo();
glPopMatrix();
}

void dedo (void)
{
glPushMatrix();
glScalef(0.5,0.5,0);
cubo();
glPopMatrix();

glPushMatrix();
glScalef(0.5,0.5,0);
glTranslatef(0,1,0);
cubo();
glPopMatrix();

glPushMatrix();
glScalef(0.5,0.5,0);
glTranslatef(0,2,0);
cubo();
glPopMatrix();
}
void dedoGordo (void) //dedo flexioando de la mano
{
glPushMatrix(); //primera parte
glScalef(0.4,0.6,0);
glRotatef(30,0,0,1);
cubo();
glPopMatrix();

glPushMatrix(); //segunda parte
glRotatef(10,0,0,1);
glScalef(0.4,0.6,0);
glTranslatef(-0.2,1.2,0);
cubo();
glPopMatrix();


glPushMatrix(); //rcera parte
glRotatef(-30,0,0,1);
glScalef(0.4,0.6,0);
glTranslatef(-1.9,2.0,0);
cubo();
glPopMatrix();
}

void manoRobot()
{
glPushMatrix();
palma();
glTranslatef(-0.75,1.25,0);
dedo();
glPopMatrix();

glPushMatrix();
palma();
glTranslatef(-0.25,1.25,0);
dedo();
glPopMatrix();

glPushMatrix();
palma();
glTranslatef(0.25,1.25,0);
dedo();
glPopMatrix();

glPushMatrix();
palma();
glTranslatef(0.75,1.25,0);
dedo();
glPopMatrix();

glPushMatrix();
palma();
glTranslatef(-1.3,-0.75f,0);
dedoGordo();
glPopMatrix();

}

void robot()
{
//construcción de humanoide :
glPushMatrix();
glPushMatrix();// caja central
glScalef(1.2,0.8,0.5);
glColor3f(0,.5,.9);
cubo();


glPushMatrix();//segunda caja central
glScalef(1.2,0.2,0.5);
glColor3f(0,.5,.3);
cubo();
glPopMatrix();


glPushMatrix(); //cabeza
glTranslatef(0.0,1.0,0.0);
glScalef(0.6,0.9,0.8);
glColor3f(0,.5,.2);
cubo();
glPopMatrix();
glPushMatrix(); //brazo der. parte1
glTranslatef(0.8,0.4,0.0);
glScalef(0.7,0.2,0.5);
cubo();
glPushMatrix(); //brazo der. parte 2
glTranslatef(1.0,0.0,0.0);
glScalef(1.0,1.5 ,0.5);
cubo();
glPushMatrix();
glTranslatef(0.8,0.0,0.0);
glScalef(0.8,0.6,0.5);
cubo();
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPushMatrix();//brazo izq. parte1
glTranslatef(-0.8,0.4,0.0);
glScalef(0.7,0.2,0.5);
cubo();
glPushMatrix();////brazo der. parte2
glTranslatef(-1.0,0.0,0.0);
glScalef(1.0,1.5,0.5);
cubo();
glPushMatrix();
glTranslatef(-0.8,0.0,0.0);
glScalef( 0.8,0.6,0.5);
cubo();
glPopMatrix();
glPopMatrix();
glPopMatrix();



glPushMatrix();//pie derecho parte 1
glTranslatef(0.35,-0.7,0.0);
glScalef(0.3,0.4,0.5);
cubo();
glPushMatrix();
glTranslatef(0.0,-1.0,0.0); //pie derecho parte 2
glScalef(1.2,1.0,0.5);
cubo();
glPushMatrix();
glTranslatef(0.5,-0.6,0.0); //pie derecho parte 3
glScalef(1.2,0.4,0.5);
cubo();
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPushMatrix();//pie izq parte 1
glTranslatef(-0.35,-0.7,0.0);
glScalef(0.3,0.4,0.5);
cubo();
glPushMatrix();
glTranslatef(0.0,-1.0,0.0); //pie izq parte 2
glScalef(1.2,1.0,0.5);
cubo();
glPushMatrix();
glTranslatef(- 0.5,-0.6,0.0); //pie izq parte 3
glScalef(1.2,0.4,0.5);
cubo();
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPopMatrix(); //fin del humanoide

glPopMatrix();
}


void brazoConTenaza(void) //CONSTRUCCION DE BRAZO CON TENAZAS
{
glColor3f(1,0,0);
glPushMatrix();
glPushMatrix();
glRotatef(-30,0,0,1);
glTranslatef(0,1.5,0);
glPushMatrix();
glScalef(0.5,3.0,0.5);
cubo();
glPopMatrix();

glTranslatef(0,1.5,0);
glRotatef(-30,0,0,1);
glTranslatef(0,1,0);

glPushMatrix();
glScalef(0.5,2.0,0.5);
cubo();
glPopMatrix();


glPushMatrix();
glTranslatef(0,2,0);
glRotatef(-30,-4,-2,0);
glScalef(0.2,0.9,0.2);
glColor3f(0,1,0);
cubo();
glPopMatrix();

glTranslatef(.3,2,0);
glRotatef(-30,-4,-2,5);
glScalef(0.2,0.9,0.2);
glColor3f(0,1,0);
cubo();
glPopMatrix();

glPopMatrix();

glPopMatrix();
}


void esferaConTenazas(void) //esfera con muchos brazos de tenazas
{
glPushMatrix();
glutSolidSphere(.6,100,4);
glPopMatrix();

glPushMatrix();
glScalef(0.5,0.5,0.5);
brazoConTenaza();
glPopMatrix();

glPushMatrix();
glTranslatef(0.6,0,0);
glRotatef(-30,0,0,1);
glScalef(0.5,0.5,0.5);
brazoConTenaza();
glPopMatrix();

glPushMatrix();
glTranslatef(-0.6,0,0);
glRotatef(30,0,0,1);
glScalef(0.5,0.5,0.5);
brazoConTenaza();
glPopMatrix();


glPushMatrix();
glTranslatef(.4,-0.5,.3);
glRotatef(-60,0,0,1);
glScalef(0.5,0.5,0.5);
brazoConTenaza();
glPopMatrix();


glPushMatrix();
glTranslatef(-.4,-0.5,.3);
glRotatef(-200,1,0,0);
glRotatef(60,0,0,1);
glScalef(0.5,0.5,0.5);
brazoConTenaza();
glPopMatrix();


}


void escena() //construccion de la escena
{
glPushMatrix(); // piso triangular
glScalef(25,14,19);
glTranslatef(0,0,-.5);
glRotatef(90,1,0,0);
triangulo();
glPopMatrix();



glPushMatrix(); //alto y flaco
glScalef(2,3,1);
glTranslatef(-1.1,0,5);
robot();
glPopMatrix();

glPushMatrix(); //chaparro y regordete
glScalef(1,2,3);
glTranslatef(3,-4,-2);
glRotatef(30,0,1,0);
robot();
glPopMatrix();

glPushMatrix(); //normal
glScalef(2,2,2);
glTranslatef(2,0,-3);
robot();
glPopMatrix();



esferaConTenazas(); //esfera a la que adoran

glPushMatrix(); //pilar de adoracion
glTranslatef(0,-4.7,0);
columna();

glPopMatrix();

}


void display() //llamada de la escena
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0,100,4);
glLoadIdentity();
gluLookAt (6.0, 2.0, 4.0, .0, 0.0, 0.0, 0.0, 1.0, 0.0);
//glRotatef(Ang,0.0f,1.0f,0.0f);

glPushMatrix();
escena();
glPopMatrix();


glFlush();
}





No hay comentarios: