El documento presenta 10 prácticas de OpenGL para crear diferentes figuras geométricas 2D como un tablero de ajedrez, una estrella, un cubo con líneas. También incluye prácticas más complejas como un cubo delineado, un muñeco con triángulos y formas, y animaciones de un círculo y el sistema solar.
Sesión de aprendizaje Planifica Textos argumentativo.docx
Renee opengl karla
1. Colegio de Estudios Científicos y Tecnológicos
del Estado de México.
P l a n t e l: Tecámac
Carrera: Técnico en Informática
Asignatura: Utilización de Software de Diseño para el Manejo de
Gráficos.
Docente: Ing. René Domínguez Escalona.
Alumnos:
Bernal Sixto Karla Gabriela
Campos Centeno Jorge Alejandro
Título: ”MANUAL DE PRACTICAS DE OpenGl ”
1
2. Ecatepec de Morelos, Estado de México, a jueves 01 de marzo del 2012.
INTRODUCCIÓN.
OpenGl
es una especificación estándar que define a una APL
(Open Graphics Library)
(Application Programming Interface) multilenguaje para producir
aplicaciones que produzcan gráficos en 2D y 3D. La interfaz consiste en
más de 250 funciones diferentes que pueden usarse para dibujar escenas
tridimensionales complejas a partir de primitivas geométricas simples, tales
como puntos, líneas y triángulos.
Así mismo cuenta con varias paqueterias las cuales ayudan a el uso de
este software.
¿Cuáles son las librerías de OpenGl y sus características?
La librería principal de OpenGl nos suministra todas las funciones necesarias
para mostrar un entorno 3D aunque hay algunas operaciones que son algo
tediosas de realizar utilizando solo esta librería. Estas son por ejemplo
calcular la matriz de proyección. Para esto se han desarrollado tambien
una librería auxiliar:
GLU: Esta librería acompaña a la OpenGl principal. Incluye funciones más
complejas que GL por ejemplo definir un cilindro o un disco con un solo
comando, también contiene funciones para trabajar con splines y
operaciones con matrices.
GLUT: Esta librería es independiente de la librería OpenGl de cada
plataforma. Esta librería no incluye funciones adicionales para OpenGl :(
pero nos permite utilizar funciones para el tratamiento de ventanas,
teclado y ratón. Para trabajar con OpenGl en cualquier plataforma,
primero tenemos que inicializar una ventana (y esto es diferente entre
Windows y Linux por ejemplo). GLUT nos permite crear ventanas y controlar
la entrada independientemente de la plataforma utilizada :). Aunque
también contiene comandos para crear conos, tazas de té...
GLAUX: Esta librería, muy parecida a GLUT, es la que Microsoft ha
desarrollado para Windows. Mantiene prácticamente la misma estructura
2
3. que la GLUT con el defecto de que solo sirve para Windows, mientras que
GLUT sirve para cualquier plataforma.
INDICE
Portada…………………………………………………………………….1
Introducción………………………………………………………………2
Indice………………………………………………………………………3
Practicas
Tablero De Ajedrez………………………………………………………4
Estrella………………………………………………………………………5
Cubo Con Lineas…………………………………………………………6
Cubo Delineado………………………………………………………….7
Muñeco Con triangulos…………………………………………………8
Casita………………………………………………………………………9
Oso………………………………………………………………………….10
Cubo Con Cubitos……………………………………………………….11
Muñeco Con Formas……………………………………………………12
Animación a Un Circulo………………………………………………..13
Animaciòn del Sistema Solar………………………………………….14
Movimiento en ocho…………………………………………………….15
Semaforo…………………………………………………………………..16
Cubo en 3D………………………………………………………………..17
Nombre en 3D…………………………………………………………….18
Practica Extra: Piramide………………………………….……………..19
3
4. Practica 1.
Tablero De Ajedrez.
DESCRIPCIÓN.
Con la primitiva de PUNTO en OpenGL (POINTS) crear una simulación de un
tablero de ajedrez de 8 x 8 cuadros uno blanco y uno negro.
Borrador
CODIGO
void dibuja(void) //funcion dibuja
{
glClear(GL_COLOR_BUFFER_BIT); //borra pantalla
glColor3f(0.0 , 0.0 , 0.0);
glPointSize(80);
glBegin(GL_POINTS);
glVertex2i(100,100);
4
8. Practica 2.
Estrella.
DESCRIPCIÓN.
Con la primitiva de LINEA en OpenGL (LINES) crear una estrella del tamaño
cuales quiera.
BORRADOR
CODIGO
void dibuja(void) //funcion dibuja
{
glClear(GL_COLOR_BUFFER_BIT);
glLineWidth(3);
glColor3f(101 ,333 ,210 );
glBegin(GL_LINES);
8
10. Practica 3.
Cubo con Lineas.
DESCRIPCIÓN.
Con la primitiva de LINEA en OpenGL (LINES) crear una cubo del tamaño
cuales quiera(obvio sin relleno).
BORRADOR
10
14. Con la primitiva de CUADRO en OpenGL (QUADS) crear una cubo del
tamaño cuales quiera con diferentes colores de relleno. Y así mismo
remarcar todas las orillas de cada cuadro que conforman el cubo con las
primitiva de LINES en OpenGL (LINES), para así lograr la simulacion de un
cubo delineado.
BORRADOR
CODIGO
void dibuja(void) //funcion dibuja
{
glClear(GL_COLOR_BUFFER_BIT); //borra pantalla
glBegin(GL_QUADS);
//atras
glColor3f(0.0 , 0.6 , 0.0);
glVertex2d(100,150);
glVertex2d(300,150);
glVertex2d(300,350);
glVertex2d(100,350);
14
24. DESCRIPCIÓN.
Con las primitivas de TRIANGULO, CUADRO, LINEA y PUNTO en OpenGL
(TRIANGLE, QUADS, LINES && POINTS) crear una copia de las siguiente
imagen:
CODIGO
void dibuja(void)
{
int i,j=0;
/* borra la pantalla */
glClear(GL_COLOR_BUFFER_BIT);
// Cerca
for(i=0;i<50;i++){
glBegin(GL_POLYGON);
glColor3f (1.0, 0.3, 0.0);
glVertex2f(0+20*i,292);
glVertex2f(5+20*i,300);
glVertex2f(10+20*i,292);
glVertex2f(10+20*i,240);
glVertex2f(0+20*i,240);
glEnd();
}
glBegin(GL_QUADS);
24
37. DESCRIPCIÓN.
Crendo una nueva instrucción en OpenGl con la que puedas dibujar
CIRCULOS crea un oso cualesquiera.
BORRADOR
CODIGO
void circuloc(int x, int y, int t, int radio)
{
int angulo=0;
glPointSize(t);
glBegin(GL_POINTS);
//glColor3f (1.0, 0.0, 1.0);
glVertex2f(x,y);
//glColor3f(0,0.0,0.0);
for (angulo=0;angulo<=360; angulo+=1){ glVertex2f(x + sin(angulo) * radio, y +
cos(angulo) * radio);}
glEnd();
}
void circulo(int x, int y, int radio)
{
int angulo=0;
glBegin(GL_TRIANGLE_FAN);
// glColor3f (1.0, 0.0, 1.0);
glVertex2f(x,y);
for (angulo=0;angulo<=360; angulo+=1){ glVertex2f(x + sin(angulo) * radio, y +
cos(angulo) * radio);}
glEnd();
}
void dibuja(void) //funcion dibuja
37
40. Practica 8.
Cubo con Cubitos.
DESCRIPCIÓN.
Crea una nueva instrucción con la cual puedas multiplicar un dibujo que
en este caso sea el CUBO DELIEADO que hicimos anteriormente y que se
multiplique en forma de linea y acomodarlos para que nos forme otro
cubo.
BORRADOR
CODIGO
void dibuja(void) //funcion dibuja
{
glClear(GL_COLOR_BUFFER_BIT); //borra pantalla
glColor3f(1.0 , 0.0 , 0.0);
40
44. Muñeco con Formas.
DESCRIPCIÓN.
Con las primitvas ya conocidas crea un dibujo de un niño.
BORRADOR
CODIGO
void circuloc(int x, int y, int t, int radio)
{
int angulo=0;
glPointSize(t);
glBegin(GL_POINTS);
//glColor3f (1.0, 0.0, 1.0);
glVertex2f(x,y);
//glColor3f(0,0.0,0.0);
for (angulo=0;angulo<=360; angulo+=1){ glVertex2f(x + sin(angulo) * radio, y +
cos(angulo) * radio);}
glEnd();
}
void circulo(int x, int y, int radio)
{
int angulo=0;
glBegin(GL_TRIANGLE_FAN);
// glColor3f (1.0, 0.0, 1.0);
glVertex2f(x,y);
for (angulo=0;angulo<=360; angulo+=1){ glVertex2f(x + sin(angulo) * radio, y +
cos(angulo) * radio);}
glEnd();
}
void dibuja(void) //funcion dibuja
{
glClear(GL_COLOR_BUFFER_BIT);
44
54. DESCRIPCIÓN.
En esta animaciòn realizaremos un sistema solar con movimien5o en todos
los planetas.
BORRADOR
CODIGO
void dibuja(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//esto
glColor3f (0.9,0.8, 0.0);
circulo(500,500,50);
circulo( 500+ sin(ang) * 70,500 + cos(ang) * 70,10);
glColor3f (1.0,1.0, 1.0);
circuloc(500,500,1,70); //funcion circulo
54
57. ang=ang+0.01; //velocidad entre mas grande mas rapido y entre menos
mas lento
for(int j=1;j<=10000000;j++){}//pausa
if(ang==360){ang=0;}// se repite idefinidamente
glFlush(); //forzar dibujado
glutSwapBuffers(); //y esto
}
SALIDA
57
58. Practica 12.
Movimiento en Ocho.
DESCRIPCIÓN.
En esta animaciòn realizaremos el movimiento de una pelota en forma de
ocho para lo cual ocuparemos lo siguiente.
BORRADOR
CODIGO
void dibuja(void)
58
65. En esta practica tendremos que realizar un cubo el cual tenga movimiento.
BORRADOR
CODIGO
void dibuja( void )
{
glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glEnable(GL_DEPTH_TEST); // Activamos el z-Buffer
glEnable(GL_LIGHTING); // Activamos la iluminación
glEnable(GL_LIGHT0); // Activamos la luz 0
65
66. //glShadeModel(GL_FLAT);
glShadeModel (GL_SMOOTH);
// Cargamos la matriz identidad para reiniciar las transformaciones
/* float angulo;
int i;
glLineWidth(20);
glBegin(GL_LINES);
glColor3d(1,1,1);
for (i=0; i<360; i+=10) {
angulo = (GLfloat)i*3.14159f/180.0f; // grados a radianes
glColor3d(1,1,1);
glVertex3i(0,0,-3);
glVertex3f(0+cos(angulo)*45, 0+sin(angulo)*45,0);
}
glEnd();*/
// Colocamos una luz
glLightfv(GL_LIGHT0,GL_DIFFUSE,(GLfloat []){1.0f,1.0f,1.0f,0.0f}); //
Color de la luz
glLightfv(GL_LIGHT0,GL_AMBIENT,(GLfloat []){1.0, 1.0, 1.0, 4.0}); //
Luz ambiente
glLightfv(GL_LIGHT0,GL_POSITION,(GLfloat []){0.0f,12.0f,5.0f,0.0f});
// Posición de la luz
glLightfv(GL_LIGHT0,GL_EMISSION,(GLfloat []){0.5,0.5,0.5,1.0});
66
71. Practica 15.
Nombre 3D.
DESCRIPCIÓN.
En esta practica tendremos que realizar un nombre en el cual tambien
tenga movimiento y se vean todos sus lados.
CODIGO
void dibuja( void )
{
glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glEnable(GL_DEPTH_TEST); // Activamos el z-Buffer
glEnable(GL_LIGHTING); // Activamos la iluminación
glEnable(GL_LIGHT0); // Activamos la luz 0
//glShadeModel(GL_FLAT);
glShadeModel (GL_SMOOTH);
// Cargamos la matriz identidad para reiniciar las transformaciones
/* float angulo;
int i;
glLineWidth(20);
glBegin(GL_LINES);
glColor3d(1,1,1);
for (i=0; i<360; i+=10) {
71
72. angulo = (GLfloat)i*3.14159f/180.0f; // grados a radianes
glColor3d(1,1,1);
glVertex3i(0,0,-3);
glVertex3f(0+cos(angulo)*45, 0+sin(angulo)*45,0);
}
glEnd();*/
// Colocamos una luz
glLightfv(GL_LIGHT0,GL_DIFFUSE,(GLfloat []){1.0f,1.0f,1.0f,3.0f}); // Color de la
luz
glLightfv(GL_LIGHT0,GL_AMBIENT,(GLfloat []){1.0, 7.0, 3.0, 4.0}); // Luz
ambiente
glLightfv(GL_LIGHT0,GL_POSITION,(GLfloat []){0.0f,12.0f,5.0f,13.0f}); //
Posición de la luz
glLightfv(GL_LIGHT0,GL_EMISSION,(GLfloat []){0.5,0.5,0.5,4.0});
//glShadeModel (GL_SMOOTH);
// esfera
glPushMatrix();
mover();
if(malla) creaMalla();
if(ejes) creaEjes();
//glRotatef(anguloEsfera, 1.0f, 1.0f,0.0f);
glColor3f(0.0,0.0,1.0);
//A
glTranslatef(-8.0,0.0, 0.0);
glutSolidCube(1);
72
77. Practica Extra
Piramide.
DESCRIPCIÓN.
En esta actividad realizaremos con funciones en 3D el nombre de
nosotros en cual tenga movimiento con el mouse y se vea en tercera
dimensión.
BORRADOR
77