Mostrando entradas con la etiqueta dibujo 3d en opengl. Mostrar todas las entradas
Mostrando entradas con la etiqueta dibujo 3d en opengl. Mostrar todas las entradas

miércoles, 19 de septiembre de 2012

Pirámide cuadrada en Open GL


// piramide.cpp: define el punto de entrada de la aplicación de consola.
//

#include"stdafx.h"
//librería para utilizar operaciones matemáticas
#include<glut.h>

voidInicializacion(void);
voidDibuja(void);

int main()
{
       //inicio del boblebuffering para evitar parpadeo
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
//tamaño de la pantalla
glutInitWindowSize(600,600);
//posición de inicio de la pantalla
glutInitWindowPosition(0,0);
//título de la pantalla
glutCreateWindow("Pirámide cuadrada");
//llamado a inicialización
Inicializacion();
//llamado a dibuja
glutDisplayFunc(Dibuja);
//ciclo para pausar la pantalla
glutMainLoop();

return 0;
}

voidInicializacion(void)
{
       //matriz a modificar
glMatrixMode(GL_PROJECTION);
//resetear a la matriz a su estado por default
glLoadIdentity();
//se indica la perspectiva en que se verá
gluPerspective(70,1,0.1,100);
//matriz de transformacion
glMatrixMode(GL_MODELVIEW);
//permiyte trasladar un objeto en el espacio
glTranslated(0,0,-10);
//glRotated permite rotar un objeto
//------------------------------vistas de la pirámide
//--------vista de dos caras
glRotated(50,1,1,0);
//--------vista de tres caras
//glRotated(85,1,1,0);
//--------vista de la base y dos caras
//glRotated(-40,1,-5,0);
//--------vista de la base y un cara
//glRotated(200,1,0,0);
//--------vista de una cara
//glRotated(0,0,0,0);
//--------vista de la base
//glRotated(-90,100,0,0);
//--------vista de las cuatro caras
//glRotated(90,100,0,0);
//limpiamos la pantalla con un color
//glClearColor(0,0,0,0);
//glShadeModel especifica un tipo de sombreado o relleno
//en este caso es un relleno plano al tratarse de GL_FLAT
//no lo usamos para colorear como si fuese degradado
//glShadeModel(GL_FLAT);
//habilitanos GL_CULL_FACE el cual especifica si facetas delantera o
//trasera son estraídas o eliminadas
glEnable(GL_CULL_FACE);
//aquí se indica que se van a extraer las facetas traseras
glCullFace(GL_BACK);
//glFrontFace define los poligones de frente o espalda
//GL_CW especifica que los polígonos se verán de frente
glFrontFace(GL_CW);
}


void Dibuja(void)
{
       //limpiamos pantalla
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//inicio de dibujo de un cuadrado

//-----base de la piramide--varios colores
//se usa GL_QUADS para crear un cuadrilátero
glBegin(GL_QUADS);
//vértices en 3d
glColor3f(1,0,0);//rojo
glVertex3d(-4,0,-4);//4
glColor3f(1,1,0);//amarillo
glVertex3d(-4,0,4);//3
glColor3f(0,0,1);//azul
glVertex3d(4,0,4);//2
glColor3f(0,1,0);//verde
glVertex3d(4,0,-4);//1
glEnd();
//------------------caras de la pirámide
//para las caras triangulares
//se usará GL_TRIANGLES
//--------Cara 4  amarillo con blanco
glBegin(GL_TRIANGLES);
//vértices en 3d
glColor3f(1,1,1);//blanco
glVertex3d(0,4,0);
glColor3f(1,1,0);
glVertex3d(-4,0,-4);//1
glVertex3d(4,0,-4);//4
glEnd();

//--------Cara 1 rojo con blanco
glBegin(GL_TRIANGLES);
//vértices en 3d
glColor3f(1,1,1);//blanco
glVertex3d(0,4,0);
glColor3f(1,0,0);//rojo
glVertex3d(4,0,-4);
glVertex3d(4,0,4);
glEnd();
//--------Cara 3 verde con blanco
glBegin(GL_TRIANGLES);
//vértices en 3d
glColor3f(1,1,1);//blanco
glVertex3d(0,4,0);
glColor3f(0,1,0);//verde
glVertex3d(-4,0,4);
glVertex3d(-4,0,-4);
glEnd();
//-------Cara 2 azul con blanco
glBegin(GL_TRIANGLES);
//vértices en 3d
glColor3f(1,1,1);//blanco
glVertex3d(0,4,0);
glColor3f(0,0,1);//azul
glVertex3d(4,0,4);
glVertex3d(-4,0,4);
glEnd();

//cambio del bufer oculto al activo
glutSwapBuffers();
}