Demo_Monito.c



// Dibujo de un monito [copiado]

#include <GL/glut.h>
//#include <unistd.h>

// Medidas del cuerpo
#define  CUERPO_ALTO		4.0
#define  CUERPO_ANCHO		2.5
#define  CUERPO_LONGITUD	1.0
#define  BRAZO_ALTO		3.5
#define  BRAZO_ANCHO		1.0
#define  BRAZO_LONGITUD		1.0
#define  PIERNA_ALTO		4.5
#define  PIERNA_ANCHO		1.0
#define  PIERNA_LONGITUD	1.0
#define  CABEZA_RADIO		1.1

void display(void)
{
  glDepthFunc(GL_LEQUAL);	  // Activamos el el Z-Buffer
  glEnable(GL_DEPTH_TEST);
  glClearColor(0.0,0.0,0.0,0.0);	// Borramos el buffer de color y el Z-Buffer
  glClearDepth(1.0);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glMatrixMode(GL_PROJECTION);		// Proyección perspectiva. El ángulo de
  glLoadIdentity();
  gluPerspective(60.0,1.0,1.0,100.0);	  // Proyección perspectiva. El ángulo de 60 grados, la razón ancho/alto es 1, la distancia z=100.0

  glMatrixMode(GL_MODELVIEW);
  glTranslatef(0.0,0.0,-16.0);
  // Dibujamos el cuerpo
  glTranslatef(0,CUERPO_ALTO/2,0);
  glPushMatrix();
     glScalef(CUERPO_ANCHO,CUERPO_ALTO,CUERPO_LONGITUD);
     glColor3f(0.0,0.3,0.8);
     glutSolidCube(1);
  glPopMatrix();
  // Dibujamos el brazo derecho
  glPushMatrix();
     glTranslatef(-(CUERPO_ANCHO)/2,(CUERPO_ALTO-BRAZO_ALTO)/2,0);
     glTranslatef(0,BRAZO_ALTO/2,0);
     glRotatef(-30,0,0,1);
     glTranslatef(0,-BRAZO_ALTO/2,0);
     glPushMatrix();
       glScalef(BRAZO_ANCHO,BRAZO_ALTO,BRAZO_LONGITUD);
       glutSolidCube(1);
     glPopMatrix();
     // ya tenemos el brazo... la mano
     glTranslatef(0,-(BRAZO_ALTO+BRAZO_ANCHO)/2,0);
     glColor3f(1,0.6,0.6);
     glScalef(BRAZO_ANCHO,BRAZO_ANCHO,BRAZO_LONGITUD);
     glutSolidCube(1);
  glPopMatrix();
  // Dibujamos el brazo izquierdo
  glColor3f(0.0,0.3,0.8);
  glPushMatrix();
     glTranslatef((CUERPO_ANCHO)/2,(CUERPO_ALTO-BRAZO_ALTO)/2,0);
     glTranslatef(0,BRAZO_ALTO/2,0);
     glRotatef(30,0,0,1);
     glTranslatef(0,-BRAZO_ALTO/2,0);
     glPushMatrix();
       glScalef(BRAZO_ANCHO,BRAZO_ALTO,BRAZO_LONGITUD);
       glutSolidCube(1);
     glPopMatrix();
     // ya tenemos el brazo... la mano
     glTranslatef(0,-(BRAZO_ALTO+BRAZO_ANCHO)/2,0);
     glColor3f(1,0.6,0.6);
     glScalef(BRAZO_ANCHO,BRAZO_ANCHO,BRAZO_LONGITUD);
     glutSolidCube(1);
  glPopMatrix();
  //Dibujamos la pierna derecha
  glColor3f(0.0,0.3,0.8);
  glPushMatrix();
     glTranslatef(-(CUERPO_ANCHO-PIERNA_ANCHO)/2,-(CUERPO_ALTO+PIERNA_ALTO)/2,0);
     glPushMatrix();
       glScalef(PIERNA_ANCHO,PIERNA_ALTO,PIERNA_LONGITUD);
       glutSolidCube(1);
     glPopMatrix();
     // ahora el píe
     glTranslatef(0,-(PIERNA_ALTO+PIERNA_ANCHO)/2,PIERNA_LONGITUD);
     glColor3f(0.3,0.4,0.4);
     glScalef(PIERNA_ANCHO,PIERNA_ANCHO,PIERNA_LONGITUD*2);
     glutSolidCube(1);
  glPopMatrix();
  //Dibujamos la pierna izquierda
  glColor3f(0.0,0.3,0.8);
  glPushMatrix();
     glTranslatef((CUERPO_ANCHO-PIERNA_ANCHO)/2,-(CUERPO_ALTO+PIERNA_ALTO)/2,0);
     glPushMatrix();
       glScalef(PIERNA_ANCHO,PIERNA_ALTO,PIERNA_LONGITUD);
       glutSolidCube(1);
     glPopMatrix();
     // ahora el píe
     glTranslatef(0,-(PIERNA_ALTO+PIERNA_ANCHO)/2,PIERNA_LONGITUD);
     glColor3f(0.3,0.4,0.4);
     glScalef(PIERNA_ANCHO,PIERNA_ANCHO,PIERNA_LONGITUD*2);
     glutSolidCube(1);
  glPopMatrix();
  // Dibujamos la cabeza
  glColor3f(1,0.6,0.6);
  glPushMatrix();
     glTranslatef(0,CUERPO_ALTO/2 + CABEZA_RADIO*3/4,0);
     glutSolidSphere(CABEZA_RADIO,10,10);
  glPopMatrix();
  glFlush();
  sleep(20);
  exit(0);
}
int main(int argc, char ** argv)
{
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
  glutInitWindowPosition(20,20);
  glutInitWindowSize(500,500);
  glutCreateWindow(argv[0]);
  glutDisplayFunc(display);
  glutMainLoop();
  return 0;
}