jueves, 25 de abril de 2013

Espacio 3D

Conceptos en su cuaderno.





Prueba de codigo


 


 
 
Explicacion del Codigo
 

 

#include "stdafx.h"

 

#include <GL/glut.h>

 

 

GLfloat anguloCuboX = 0.0f;

GLfloat anguloCuboY = 0.0f;

GLfloat anguloEsfera = 0.0f;

 

GLint ancho=400; // ancho de la ventana

GLint alto=400; //alto de la ventana

 

int hazPerspectiva = 0;

 

void reshape(int width, int height) //para redimensionar la figura

{

    glViewport(0, 0, width, height);

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

   

    if(hazPerspectiva) // Funcion bolleana si es 0 hace una proyeccion ortonormal

            //con la funcion gl Ortho, y si es 1  se hace una perspectica con gluPerspective

      gluPerspective(60.0f, (GLfloat)width/(GLfloat)height, 1.0f, 20.0f);

    else

 

      glOrtho(-4,4, -4, 4, 1, 10);

 

    glMatrixMode(GL_MODELVIEW);//se reactiva matriz

 

    ancho = width;

    alto = height;

}

 

void drawCube(void)

{

    glColor3f(1.0f, 0.0f, 0.0f);

    glBegin(GL_QUADS);       //cara frontal

    glVertex3f(-1.0f, -1.0f,  1.0f);//PRIMER cara

    glVertex3f( 1.0f, -1.0f,  1.0f);

    glVertex3f( 1.0f,  1.0f,  1.0f);

    glVertex3f(-1.0f,  1.0f,  1.0f);

 

    glEnd();

 

    glColor3f(0.0f, 1.0f, 0.0f);

 

    glBegin(GL_QUADS);       //cara trasera

    glVertex3f( 1.0f, -1.0f, -1.0f);//2da CARA

    glVertex3f(-1.0f, -1.0f, -1.0f);

    glVertex3f(-1.0f,  1.0f, -1.0f);

    glVertex3f( 1.0f,  1.0f, -1.0f);

 

    glEnd();

 

    glColor3f(0.0f, 0.0f, 1.0f);

    glBegin(GL_QUADS);       //cara lateral izq

    glVertex3f(-1.0f,-1.0f, -1.0f);//3era cara

    glVertex3f(-1.0f,-1.0f,  1.0f);

    glVertex3f(-1.0f, 1.0f,  1.0f);

    glVertex3f(-1.0f, 1.0f, -1.0f);

    glEnd();

 

    glColor3f(1.0f, 1.0f, 0.0f);

    glBegin(GL_QUADS);       //cara lateral dcha

    glVertex3f(1.0f, -1.0f,  1.0f);

    glVertex3f(1.0f, -1.0f, -1.0f);//4ta CARA

    glVertex3f(1.0f,  1.0f, -1.0f);

    glVertex3f(1.0f,  1.0f,  1.0f);

    glEnd();

    glColor3f(0.0f,      1.0f, 1.0f);

    glBegin(GL_QUADS);       //cara arriba

    glVertex3f(-1.0f, 1.0f,  1.0f);//5ta cara

    glVertex3f( 1.0f, 1.0f,  1.0f);

    glVertex3f( 1.0f, 1.0f, -1.0f);

    glVertex3f(-1.0f, 1.0f, -1.0f);

    glEnd();

 

    glColor3f(1.0f, 0.0f, 1.0f);

    glBegin(GL_QUADS);       //cara abajo

    glVertex3f( 1.0f,-1.0f, -1.0f);//6ta cara

    glVertex3f( 1.0f,-1.0f,  1.0f);

    glVertex3f(-1.0f,-1.0f,  1.0f);

    glVertex3f(-1.0f,-1.0f, -1.0f);

    glEnd();

}

 

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

 

    glLoadIdentity();

 

    glTranslatef(0.0f, 0.0f, -5.0f);

 

    glRotatef(anguloCuboX, 1.0f, 0.0f, 0.0f);

    glRotatef(anguloCuboY, 0.0f, 1.0f, 0.0f);

 

    drawCube(); //metodo o funcion para crear el cubo

      //por defecto estara en el origen y cuya arista es igual a 2

 

    glLoadIdentity(); //para la matriz activa sea la proyeccion

 

    glTranslatef(0.0f, 0.0f, -5.0f);

    glRotatef(anguloEsfera, 0.0f, 1.0f, 0.0f);

    glTranslatef(3.0f, 0.0f, 0.0f);

 

    glColor3f(1.0f, 1.0f, 1.0f);

    glutWireSphere(0.5f, 8, 8);

 

    glFlush();

    glutSwapBuffers();

 

    anguloCuboX+=0.1f;

    anguloCuboY+=0.1f;

    anguloEsfera+=0.2f;

}

 

void init()

{

    glClearColor(0,0,0,0);

    glEnable(GL_DEPTH_TEST);

    ancho = 400;

    alto = 400;

}

 

 

void idle()

{

    display();

}

 

void keyboard(unsigned char key, int x, int y)// para la captyura y manejo del teclado

//cuando la ventana este activa

{

    switch(key)

    {

    case 'p':

    case 'P':

      hazPerspectiva=1;

      reshape(ancho,alto);

      break;

    case 'o':

    case 'O':

      hazPerspectiva=0;

      reshape(ancho,alto);

      break;

 

    case 27:   // escape

//    exit(0);

      break;

    }

}

 

int main(int argc, char **argv)

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); /* Se utiliza

      GLUT_DOBLE para pintar y otyro para visualizar .

      Por ello es insuficiente utilizar GLUT_SIMPLE,

      asi conseguimos mayor fluides en las escenas animadas*/

 

 

    glutInitWindowPosition(100, 100);

    glutInitWindowSize(ancho, alto); 

    glutCreateWindow("Cubo 1");

    init();

      //llamamos al metodo Init

    glutDisplayFunc(display);

    glutReshapeFunc(reshape);

    glutIdleFunc(idle);

    glutKeyboardFunc(keyboard);//ahora llamamos a  esta funcion para

      //la captura y manejo del teclado cuando la ventana está activa

    glutMainLoop();

    return 0;

 

}

 


No hay comentarios:

Publicar un comentario