//
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);
//cambio
del bufer oculto al activo
glutSwapBuffers();
}