1. Complie y corra el código que generó en el cuestionario previo.
#include
GLfloat brazo = 0.0f;
GLfloat antebrazo = 0.0f;
GLfloat dedo1 = 0.0f;
GLfloat dedo2 = 0.0f;
void reshape(int width, int height){
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0f, (GLfloat)width/(GLfloat)height, 1.0f, 20.0f);
glMatrixMode(GL_MODELVIEW);
}
void cuadrado(){
glBegin(GL_LINE_STRIP);
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);
glVertex3f(-0.5,0.5,-0.5);
glEnd();
}
void cubo(){
cuadrado();
glPushMatrix();
glTranslatef(0.0f, 0.0f, 1.0f);
cuadrado();
glPopMatrix();
glPushMatrix();
glRotatef(-90, 1.0f, 0.0f, 0.0f);
cuadrado();
glPopMatrix();
glPushMatrix();
glRotatef(90, 1.0f, 0.0f, 0.0f);
cuadrado();
glPopMatrix();
}
// antebrazo
void fun_antebrazo(){
glPushMatrix();
glTranslatef(1.0f, 0.0f, 0.0f);
glScalef(2.0f, 2.0f, 1.0f);
cubo();
glPopMatrix();
}
// brazo.
void fun_brazo(){
glPushMatrix();
glTranslatef(2.0f, 0.0f, 0.0f);
glScalef(4.0f, 1.0f, 1.0f);
cubo();
glPopMatrix();
}
// dedo.
void fun_dedo(){
glPushMatrix();
glTranslatef(0.5f, 0.0f, 0.0f);
glScalef(1.0f, 0.25f, 1.0f);
cubo();
glPopMatrix();
}
//brazo_robot
void brazo_robot(float antebrazo, float brazo, float dedo1, float dedo2){
glPushMatrix();
glTranslatef(0.0f, 0.0f, 0.0f);
glRotatef(antebrazo, 0.0f, 0.0f, 1.0f);
fun_antebrazo();
glPushMatrix();
glTranslatef(1.7f, 0.0f, 0.0f);
glRotatef(brazo, 0.0f, 0.0f, 1.0f);
fun_brazo();
glPushMatrix();
glTranslatef(3.8f, 0.25f, 0.0f);
glRotatef(dedo1, 0.0f, 0.0f, 1.0f);
fun_dedo();
glPopMatrix();
glPushMatrix();
glTranslatef(3.8f, -0.25f, 0.0f);
glRotatef(dedo2, 0.0f, 0.0f, 1.0f);
fun_dedo();
glPopMatrix();
glPopMatrix();
glPopMatrix();
}
void display(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(.9,0.8,0.8);
glLoadIdentity();
gluLookAt (0.0, 1.0, -11.0, 2.0, 0.0, 5.0, 0.0, 2.0, 0.0);
glTranslatef(0.0f, 0.0f, 0.0f);
brazo_robot(antebrazo,brazo,dedo1,dedo2);
glFlush();
glutSwapBuffers();
}
void init(){
glClearColor(0.5,0.2,0.1,0.5);
glEnable(GL_DEPTH_TEST);
}
void idle() {
display();
}
// eventos del teclado.
void keyboard(unsigned char key, int x, int y){
switch(key)
{
case 'a':
antebrazo=antebrazo+1;
reshape(500,500);
break;
case 's':
antebrazo=antebrazo-1;
reshape(500,500);
break;
case 'd':
brazo=brazo+1;
reshape(500,500);
break;
case 'f':
brazo=brazo-1;
reshape(500,500);
break;
case 'g':
dedo1=dedo1+1;
reshape(500,500);
break;
case 'h':
dedo1=dedo1-1;
reshape(500,500);
break;
case 'j':
dedo2=dedo2+1;
reshape(500,500);
break;
case 'k':
dedo2=dedo2-1;
reshape(500,500);
break;
}
}
int main(int argc, char **argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(350, 100);
glutInitWindowSize(300, 300);
glutCreateWindow("Brazo Robot");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutIdleFunc(idle);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
2. Construya una escena en la cual haga:
- 2 braxoz con teneza
- 2 manos
- 4 cubos
- 3 humanoides
A cada objeto aplique juegos diferentes de transformaciones.
#include
void reshape(int width, int height){
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(55.0f, (GLfloat)width/(GLfloat)height, 0.1, 0);
glMatrixMode(GL_MODELVIEW);
}
void cuadrado(){
glBegin(GL_LINE_STRIP);
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);
glVertex3f(-0.5,0.5,-0.5);
glEnd();
}
void cubo(){
cuadrado();
glPushMatrix();
glTranslatef(0.0f, 0.0f, 1.0f);
cuadrado();
glPopMatrix();
glPushMatrix();
glRotatef(-90, 1.0f, 0.0f, 0.0f);
cuadrado();
glPopMatrix();
glPushMatrix();
glRotatef(90, 1.0f, 0.0f, 0.0f);
cuadrado();
glPopMatrix();
}
// Partes del Humanoide
void cabeza(){
glPushMatrix();
glTranslatef(0.0f, 6.75f, 0.0f);
glScalef(2.0f, 1.5f, 2.0f);
cubo();
glPopMatrix();
}
void cuello(){
glPushMatrix();
glTranslatef(0.0f, 5.75f, 0.0f);
glScalef(1.0f, 0.5f, 0.5f);
cubo();
glPopMatrix();
}
void torax(){
glPushMatrix();
glTranslatef(0.0f, 4.0f, 0.0f);
glScalef(6.0f, 3.0f, 4.0f);
cubo();
glPopMatrix();
}
void brazos_completos(){
glPushMatrix();
glTranslatef(4.0f, 4.0f, 0.0f);
glScalef(2.0f, 1.0f, 1.0f);
cubo();
glPopMatrix();
glPushMatrix();
glTranslatef(6.0f, 4.0f, 0.0f);
glScalef(2.0f, 1.5f, 1.0f);
cubo();
glPopMatrix();
glPushMatrix();
glTranslatef(7.25f, 4.0f, 0.0f);
glScalef(0.5f, 0.5f, 1.0f);
cubo();
glPopMatrix();
glPushMatrix();
glTranslatef(-4.0f, 4.0f, 0.0f);
glRotatef(180, 0.0f, 0.0f, 1.0f);
glScalef(2.0f, 1.0f, 1.0f);
cubo();
glPopMatrix();
// Codo Izquierdo
glPushMatrix();
glTranslatef(-6.0f, 4.0f, 0.0f);
glRotatef(180, 0.0f, 0.0f, 1.0f);
glScalef(2.0f, 1.5f, 1.0f);
cubo();
glPopMatrix();
// Nudillo Izquierdo
glPushMatrix();
glTranslatef(-7.25f, 4.0f, 0.0f);
glRotatef(180, 0.0f, 0.0f, 1.0f);
glScalef(0.5f, 0.5f, 0.5f);
cubo();
glPopMatrix();
}
void piernas_completas()
{
// Muslo Derecho
glPushMatrix();
glTranslatef(2.0f, -1.5f, 0.0f);
glScalef(1.0f, 2.0f, 1.5f);
cubo();
glPopMatrix();
// Muslo Izquierdo
glPushMatrix();
glTranslatef(-2.0f, -1.5f, 0.0f);
glScalef(1.0f, 2.0f, 1.5f);
cubo();
glPopMatrix();
// Pierna Derecha
glPushMatrix();
glTranslatef(2.0f, -4.5f, 0.0f);
glScalef(1.4f, 4.0f, 1.5f);
cubo();
glPopMatrix();
// Pierna Izquierda
glPushMatrix();
glTranslatef(-2.0f, -4.5f, 0.0f);
glScalef(1.4f, 4.0f, 1.5f);
cubo();
glPopMatrix();
// Pie Derecho
glPushMatrix();
glTranslatef(2.0f, -7.25f, 0.0f);
glScalef(2.75f, 1.5f, 2.0f);
cubo();
glPopMatrix();
// Pie Izquierdo
glPushMatrix();
glTranslatef(-2.0f, -7.25f, 0.0f);
glScalef(2.75f, 1.5f, 2.0f);
cubo();
glPopMatrix();
}
void cadera(){
glPushMatrix();
glTranslatef(0.0f, 0.0f, 0.0f);
glScalef(6.0f, 1.0f, 3.0f);
cubo();
glPopMatrix();
}
void columna(){
glPushMatrix();
glTranslatef(0.0f, 1.5f, 0.0f);
glScalef(1.0f, 2.0f, 1.0f);
cubo();
glPopMatrix();
}
void humanoide(){
cabeza();
cuello();
torax();
brazos_completos();
columna();
cadera();
piernas_completas();
}
// Mano
void palma(){
glPushMatrix();
glScalef(4.0f, 4.0f, 1.0f);
cubo();
glPopMatrix();
}
void dedo(){
glPushMatrix();
glTranslatef(1.5f, 2.4f, 0.0f);
glScalef(0.80f, 0.80f, 0.5f);
cubo();
glTranslatef(0.0f, 1.0f, 0.0f);
cubo();
glPopMatrix();
}
void dedos_mano(){
glPushMatrix();
dedo();
glTranslatef(-1.0f, 0.0f, 0.0f);
dedo();
glTranslatef(-1.0f, 0.0f, 0.0f);
dedo();
glTranslatef(-1.0f, 0.0f, 0.0f);
dedo();
glPopMatrix();
}
void dedo_gordo(){
glPushMatrix();
glScalef(0.80f, 0.80f, 0.7f);
cubo();
glTranslatef(-0.60f, 0.60f, 0.0f);
cubo();
glTranslatef(-0.60f, 0.60f, 0.0f);
cubo();
glTranslatef(-0.60f, 0.60f, 0.0f);
cubo();
glPopMatrix();
}
void mano(){
glPushMatrix();
palma();
glPopMatrix();
glPushMatrix();
dedos_mano();
glPopMatrix();
glPushMatrix();
glTranslatef(-2.0f, 0.0f, 0.0f);
dedo_gordo();
glPopMatrix();
}
// Brazo Robot
void hombro_robot(){
glPushMatrix();
glScalef(2.0f, 2.0f, 1.0f);
cubo();
glPopMatrix();
}
void brazo_robot(){
glRotatef(25, 0.0f, 0.0f, 1.0f);
glPushMatrix();
glTranslatef(2.85f, 0.0f, 0.0f);
glScalef(4.0f, 1.0f, 1.0f);
cubo();
glPopMatrix();
}
void dedos_robot(){
glPushMatrix();
glTranslatef(5.25f, 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(){
glRotatef(-45, 0.0f, 0.0f, 1.0f);
hombro_robot();
brazo_robot();
dedos_robot();
}
void display(){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.7,0.7,0.7);
glLoadIdentity();
gluLookAt (4.0, 2.0, 20.0, .0, 0.0, 0.0, 0.0, 1.0, 0.0);
// Cubo 1
glPushMatrix();
glTranslatef(-10.0,8.0,0.0);
glScalef (2.0, 2.0, 2.0);
glRotatef(45, 1.0f, 0.0f, 0.0f);
cubo();
glPopMatrix();
// Cubo 2
glPushMatrix();
glTranslatef(-10.0,5.0,0.0);
glScalef (1.5, 1.5, 1.5);
glRotatef(90, 1.0f, 1.0f, 1.0f);
cubo();
glPopMatrix();
// Cubo 3
glPushMatrix();
glTranslatef(-10.0,2.0,0.0);
glScalef (1.0, 1.0, 1.0);
glRotatef(135, 1.0f, 1.0f, 1.0f);
cubo();
glPopMatrix();
// Cubo 4
glPushMatrix();
glTranslatef(-10.0,-1.0,0.0);
glScalef (1.8, 1.8, 1.8);
glRotatef(180, 1.0f, 1.0f, 1.0f);
cubo();
glPopMatrix();
// Humanoide 1
glPushMatrix();
glTranslatef(6.5,4.0,0.0);
glScalef (0.45, 0.45, 0.45);
glRotatef(-10, 0.0f, 0.0f, 1.0f);
humanoide();
glPopMatrix();
// Humanoide 2
glPushMatrix();
glTranslatef(2.0,2.0,0.0);
glScalef (0.25, 0.25, 0.25);
glRotatef(0, 0.0f, 0.0f, 1.0f);
humanoide();
glPopMatrix();
// Humanoide 3
glPushMatrix();
glTranslatef(-3.0,4.0,-0.0);
glScalef (0.50, 0.50, 0.50);
glRotatef(10, 0.0f, 0.0f, 1.0f);
humanoide();
glPopMatrix();
// Mano 1
glPushMatrix();
glTranslatef(-10.0,-6.0,-0.0);
glScalef (0.5, 0.5, 0.5);
glRotatef(20, 0.0f, 0.0f, 1.0f);
mano();
glPopMatrix();
// Mano 2
glPushMatrix();
glTranslatef(-4.0,-4.0,-0.0);
glScalef (0.8, 0.8, 0.8);
glRotatef(15, 0.0f, 1.0f, 0.0f);
mano();
glPopMatrix();
// BrazoRobot 1
glPushMatrix();
glTranslatef(1.0,-4.0,-0.0);
glScalef (0.8, 0.8, 0.8);
glRotatef(-20, 0.0f, 0.0f, 1.0f);
brazo_robot_tenaza();
glPopMatrix();
// BrazoRobot 2
glPushMatrix();
glTranslatef(6.0,-2.0,-0.0);
glScalef (0.6, 0.6, 0.6);
glRotatef(15, 0.0f, 0.0f, 1.0f);
brazo_robot_tenaza();
glPopMatrix();
glFlush();
}
void init(){
glClearColor(0.2,0.4,0.1,0.1);
}
int main(int argc, char **argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(350, 100);
glutInitWindowSize(500, 400);
glutCreateWindow("Escenario");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
No hay comentarios:
Publicar un comentario