martes, 18 de febrero de 2014

Programa inicial de code blocks

El siguiente código de programa que mostraré fue hecho con Code Blocks como un código predefinido. Partiremos desde la idea de que ya tenemos instalado Code Blocks en nuestra PC. Lo abrimos y nos encontramos con el menú, donde seleccionaremos Create new project.



Luego nos aparecerá el siguiente sub-menu en el cual desplazamos todas las opciones (All-categories) y seleccionamos 2D/3D Graphics. Para continuar le picamos en Go.


Y luego nos aparecerá una pantalla donde nos pedirá el título y la dirección a guardar (el nombre de proyecto se auto escribe conforme al título). Colocamos el que queramos y luego damos en next.


Las siguientes dos pantallas muestran en dónde queremos la ubicación de los glut y la otra información del compilador, en mi caso daré ok pues no tengo algo que configurar en ninguna de las dos.




En la última imagen nos muestra como debería de quedar el programa después de todo lo anterior, desplegamos la carpeta que dice sources y damos doble clic en main.cpp para mostrar el código fuente.

El siguiente código se muestra:

#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/gl.h> //Original mente esto no venía incluido así que se lo incluí para que corriera el programa
#include <GL/glut.h>
#endif

#include <stdlib.h>
//El símbolo # significa incluir paqueterías


static int slices = 16;
static int stacks = 16;

/* GLUT callback Handlers */

static void resize(int width, int height)
//método resize el cual permite re-dimensionar las figuras dentro de la pantalla sí esta se altera de tamaño
{
    const float ar = (float) width / (float) height;

    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);

    glMatrixMode(GL_MODELVIEW); //Indica que la pantala estará en modo matriz
    glLoadIdentity() ;
}

static void display(void)//Este método despliega las figuras
{
    const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
    const double a = t*90.0;

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3d(1,0,0);

    glPushMatrix();
        glTranslated(-2.4,1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutSolidSphere(1,slices,stacks);//Este crea la figura sólida de la esfera
    glPopMatrix();

    glPushMatrix();
        glTranslated(0,1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutSolidCone(1,1,slices,stacks);//Muestra la figura solida del cono
    glPopMatrix();

    glPushMatrix();
        glTranslated(2.4,1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutSolidTorus(0.2,0.8,slices,stacks);//Muestra la figura sólida del círculo
    glPopMatrix();

    glPushMatrix();
        glTranslated(-2.4,-1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutWireSphere(1,slices,stacks);//La figura esfera con líneas
    glPopMatrix();

    glPushMatrix();
        glTranslated(0,-1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutWireCone(1,1,slices,stacks);//Figura del cono con líneas
    glPopMatrix();

    glPushMatrix();
        glTranslated(2.4,-1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutWireTorus(0.2,0.8,slices,stacks);//Figura del anillo con líneas
    glPopMatrix();

    glutSwapBuffers();
}


static void key(unsigned char key, int x, int y)
{
    switch (key)
    {
        case 27 :
        case 'q':
            exit(0);
            break;

        case '+':
            slices++;
            stacks++;
            break;

        case '-':
            if (slices>3 && stacks>3)
            {
                slices--;
                stacks--;
            }
            break;
    }

    glutPostRedisplay();
}

static void idle(void)
{
    glutPostRedisplay();
}

const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };

const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };

/* Program entry point */

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitWindowSize(640,480);//Las dimenciones de la ventana a desplegar
    glutInitWindowPosition(10,10);//Posición inicial de la ventana
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");//Nombre que tendrá ventana

    glutReshapeFunc(resize);//Llama al método resize
    glutDisplayFunc(display);//Llama a la muestra de las figuras
    glutKeyboardFunc(key);
    glutIdleFunc(idle);

    glClearColor(1,1,1,1);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);

    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);

    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);

    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);

    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);

    glutMainLoop();

    return EXIT_SUCCESS;
}

Todo esto muestra la siguiente figura:






























No hay comentarios:

Publicar un comentario