El código crea un tablero de ajedrez de 8x8 usando OpenGL. Usa dos colores (amarillo y negro) y puntos de 50 píxeles de diámetro para dibujar las celdas en una cuadrícula, alternando los colores en filas y columnas para formar el patrón de ajedrez.
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: René Domínguez Escalona
Alumno:
Mendoza González Guillermo Octavio
Pérez Luna María Fernanda
Título: ”Manual de prácticas de OpenGl ”
1
2. Introducción
¿Qué es OpenGl?
OpenGL (Open Graphics Library) es una especificación estándar que define
una API multilenguaje y multiplataforma para escribir aplicaciones que produzcan
gráficos 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. Fue
desarrollada originalmente porSilicon Graphics Inc. (SGI) en 19922 y se usa
ampliamente en CAD, realidad virtual, representación científica, visualización de
información ysimulación de vuelo. También se usa en desarrollo de videojuegos,
donde compite con Direct3D en plataformas Microsoft Windows.
¿Cuáles son la primitiva geométrica?
Formas geométricas consideradas primitivas por su básica constitución en las
partes que la conforman, se conocen también con el nombre de primitivas
geométricas cuyas formas son elCírculo, el Triángulo y el Cuadrado.
Las primitivas geométricas en un software 3D pueden ser editadas para
conseguir formas geométricas más complejas, agregando
nuevos vértices, aristas y polígonos.
Las primitivas son grupos de diversos objetos básicos, por ejemplo: los de tipo
bidimensional o 2d: son el círculo, el cuadrado y otras formas básicas.
En cuanto a primitivas tridimensionales existen los cilindros, el tubo, el torus, la
esfera y el cubo, entre otros.
¿Cómo se crea una ventana en open gl?
Descripción de las funciones principales y variables
Funciones Principales
Los pasos necesarios para crear una ventana en OpenGL los podemos clasificar
como sigue:
- Creamos una ventana.
2
3. - Establecemos el marco de visión y la perspectiva.
- Inicializamos las variables de estado de OpenGL.
Las funciones principales necesarias para inicializar GL son:
CreaVentanaGL: Se puede considerar como la función principal. Crea una
ventana de Windows, selecciona el
formato de pixel, crea su RC y DC y posteriormente llama a las funciones
siguientes para asignarle propiedades
de OpenGL.
EliminaVentanaGL: Libera todos los recursos usados por la ventana.
InicializaEscenaGL: Establece el marco de visión (Viewport) de la escena, así
como la perspectiva que vamos a
utilizar.
InicializaGL: Inicializamos todos los valores internos de OpenGL, como por
ejemplo el tipo de sombreado y luces,
si vamos a utilizar mapeado de texturas, el color de fondo de la escena,...
De este modo la función CreaVentanaGL, después de crear la ventana, llamaría a
InicializaEscenaGL y
posteriormente a InicializaGL y ya tendríamos nuestra ventana creada. Si por
algún motivo la llamada a las dos
últimas funciones fallara, eliminariamos la ventana mediante EliminaVentanaGL y
saldríamos de la aplicación.
Aplicaciones de open gl
Sin entrar en demasiados detalles, describiremos algunas de las características
que OpenGL implementa:
Primitivas geométricas Permiten construir descripciones matemáticas de
objetos. Las actuales primitivas son: puntos, líneas, polígonos, imágenes y
bitmaps.
Codificación del Color en modos RGBA (Rojo-Verde-Azul-Alfa) o de color
indexado.
Visualización y Modelado que permite disponer objetos en una escena
tridimensional, mover nuestra cámara por el espacio y seleccionar la
posicíon ventajosa deseada para visualizar la escena de composición.
Mapeado de texturas que ayuda a traer realismo a nuestros modelos por
medio del dibujo de superficies realistas en las caras de nuestros modelos
poligonales
3
4. La iluminación de materiales es una parte indispensable de cualquier
grágico 3D. OpenGL provee de comandos para calcular el color de
cualquier punto dadas las propiedades del material y las fuentes de luz en
la habitación.
El doble buffering ayuda a eliminar el parpadeo de las animaciones. Cada
fotograma consecutivo en una animación se construye en un buffer
separado de memoria y mostrado solo cuando está completo.
El Anti-alizado reduce los bordes escalonados en las líneas dibujadas
sobre una pantalla de ordenador. Los bordes escalonados aparecen a
menudo cuando las líneas se dibujan con baja resolución. El anti-alizado es
una ténica común en gráficos de ordenador que modifica el color y la
intensidad de los pixels cercanos a la línea para reducir el zig-zag artificial.
El sombreado Gouraud es una técnica usada para aplicar sombreados
suaves a un objeto 3D y producir una sutil diferencia de color por sus
superfícies.
El Z-buffering mantiene registros de la coordenada Z de un objeto 3D. El
Z-buffer se usa para registrar la proximidad de un objeto al observador, y es
también crucial para el eliminado de superfícies ocultas.
Efectos atmosféricos como la niebla, el humo y las neblinas hacen que las
imágenes producidas por ordenador sean más realistas. Sin efectos
atmosféricos las imágenes aparecen a veces irrealmente nítidas y bien
definidas. Niebla es un término que en realidad describe un algoritmo que
simula neblinas, brumas, humo o polución o simplemente el efecto del aire,
añadiendo profundidad a nuestras imágenes.
El Alpha blending usa el valor Alfa (valor de material difuso) del código
RGBA, y permite combinar el color del fragmento que se procesa con el del
pixel que ya está en el buffer. Imagina por ejemplo dibujar una ventana
transparente de color azul claro enfrente de una caja roja. El Alpha blending
permite simular la transparencia de la ventana, de manera que la caja vista
a través del cristal aparezca con un tono magenta.
Los planos de plantilla permiten restringir el trazado a ciertas regiones de
la pantalla.
Las listas de Display permiten almacenar comandos de dibujo en una lista
para un trazado posterior, cuando las listas de display se usan
apropiadamente puedan mejorar mucho el rendimiento de nuestras
aplicaciones.
Los Evaluadores Polinómicos sirven para soportar B-splines racionales
no uniformes, esto es para ayudar a dibujar curvas suaves a través de unos
cuantos puntos de referencia, ahorrándose la necesidad de acumular
grandes cantidades de puntos intermedios.
4
5. Características de Feedback, Selección y Elección que ayudan a crear
aplicaciones que permiten al usuario seleccionar una región de la pantalla o
elegir un objeto dibujado en la misma. El modo de feedback permite al
desarrollador obtener los resultados de los cálculos de trazado.
Primitivas de Raster (bitmaps y rectángulos de pixels)
Operaciones con Pixels
Transformaciones: rotación, escalado, perspectivas en 3D
¿Cuáles son las 3 librerías de Opengl y sus
características?
Librería adicionales de OpenGL
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 unas librería
auxiliares:
GLU: Esta librería acompaña a la OpenGL principal. Incluye funciones más
complejas que GL por ejemplo difinir un cilindro o un disco con un solo comando,
tambien 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 adiconales 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 tambien 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 practicamente la misma estructura que la GLUT con el
defecto de que solo sirve para Windows, mientras que GLUT sirve para cualquier
plataforma.
GLX: Esta es la librería utilizada para trabajar en un sistema de X-Windows
(Linux), permite no sólo renderizar en la máquina local, sino tambien a travez de
una red.
Tambien hay otras librerías más específicas para el control de entrada, sonido,
red.... Evidentemente podemos utilizar las DX, aunque tambien debes saber que
hay una colección de OpenXX que incluyen practicamente las mismas
5
6. características (algunas menos, todo hay que decirlo) que DX, como son OpenAL
(Audio), OpenNL (Red), OpenIN (Entrada)...
¿Cómo configurar open gl en dev c++?
Instalar Opengl en Dev C++
1. Para empezar la instalacion primero abrimos Dev C++ luego nos vamos a la
barra de menu y hacemos click en herramientas , luego hacemos click en Buscar
Actulizaciones
2. Luego nos aparacera una ventana que dira WebUpadate Nos dirigimos a la
parte roja asi como se muestra en la imagen ....
3. Luego expandimos las opciones y selecionamos devpak.org Comunity Dev
Paks
4. Luego hacemos click en Check for Updates
5. Luego nos aparacera un monton de actualizaciones Bueno a nosotros nos
interesa solo opengl .... Bueno entocnes solo marcamos el check de glut y freglut
6. Luego le damos click en Dowload selected y empezaran a descargarse las
opciones marcadas en nuestro caso el glut y freglut
7. Y Por ultimo cuando se ayan descargado todos los paquetes selecionados nos
aparacera una ventana como esta solo le damos click en install y listo :)
6
7. Índice
Portada………………………………………………………… 01
Introducción……………………………………………………..02-06
Índice……………………………………………………………07
Practica 1: Tablero de Ajedrez………………………………..08-12
Practica 2: Estrella……………………………………………..13-14
Practica 3: Cubo con líneas……………………………………15-17
Practica 4: Cubo delineado…………………………………….18-21
Practica 5: Muñeco con triángulos…………………………….22-26
Practica 6: Casita……………………………………………....27-39
Practica 7: Oso………………………………………………….40-44
Practica 8: Cubo con cubitos…………………………………..45-48
Practica 9: Muñeco con formas………………………………..49-55
Practica 10: Animación de circulo rotando……………………56-58
Practica 11: Animación del Sistema Solar…………………….59-61
Practica 12: Movimiento en ocho……………………………....62-64
Practica 13: Semáforo…………………………………………..65-69
Practica 14: Cubo en 3D………………………………………..70-73
Practica 15: Nombres en 3D……………………………………74-80
Practica Extra: Pirámide…………………………………………81-84
7
8. Practicas
Practica No.1: Tablero de Ajedrez
Descripción: En esta práctica debemos de realizar un tablero de
ajedrez de 8 X 8 en el cual allá dos colores diferentes y que se vayan
combinando los colores entre sí.
Borrador con coordenadas utilizadas:
Código:
void dibuja(void) //funcion dibuja
{
glClear(GL_COLOR_BUFFER_BIT); //borra pantalla
glColor3f(1.0 ,1.0 ,0.0);
glPointSize(50);
8
13. Practica No.2: Estrella
Descripción: En esta práctica bebemos de realizar una estrella de
cinco picos con la función de líneas.
Borrador con coordenadas utilizadas:
Código:
void dibuja(void) //funcion dibuja
13
15. Practica No.3: Cubo con líneas
Descripción: En esa práctica debemos de utilizar la función de línea
y debemos de realizar un cubó el tamaño que deseemos.
Borrador con coordenadas utilizadas:
Código:
void dibuja(void) //funcion dibuja
{
glClear(GL_COLOR_BUFFER_BIT); //borra pantalla
glLineWidth(5);
glColor3f(1.0 , 0.0 , 0.0);
glBegin(GL_LINES);
glVertex2i(200,200);
15
18. Practica No.4: Cubo delineado
Descripción: En esta actividad debemos de realizar un cubo pero
ahora debe de ir relleno de color y delineado negro. Para eso
debemos de utilizar la función de cuadros para el relleno y la de líneas
para el delineado.
Borrador con coordenadas utilizadas:
Código:
void dibuja(void) //funcion dibuja
{
glClear(GL_COLOR_BUFFER_BIT); //borra pantalla
18
19. glBegin(GL_QUADS);
// parte de frente
glColor3f(1.0,0.0,0.0);
glVertex2i(200,200);
glColor3f(0.0,1.0,0.0);
glVertex2i(400,200);
glColor3f(0.0,0.0,1.0);
glVertex2i(400,400);
glColor3f(1.0,0.0,1.0);
glVertex2i(200,400);
// parte de lado
glColor3f(0.0,1.0,0.0);
glVertex2i(400,200);
glColor3f(1.0,0.0,0.0);
glVertex2i(500,300);
glColor3f(0.0,0.0,1.0);
glVertex2i(500,500);
glColor3f(1.0,1.0,0.0);
glVertex2i(400,400);
// parte de arriba
glColor3f(1.0,0.0,1.0);
glVertex2i(200,400);
glColor3f(1.0,1.0,0.0);
glVertex2i(400,400);
glColor3f(1.0,1.0,1.0);
glVertex2i(500,500);
glColor3f(0.0,0.0,0.0);
glVertex2i(300,500);
glEnd();
glLineWidth(5);
glBegin(GL_LINES);
glColor3f(0.0,0.0,0.0);
glVertex2i(200,200);
glVertex2i(400,200);
glVertex2i(400,200);
19
22. Practica No.5: Muñeco con triángulos
Descripción: En esta práctica vamos a utilizar la función de
triángulos, cuadrados y polígonos y vamos a realizar un muñeco con
triángulos, la mayoría de las partes son puros triángulos y deberemos
de utilizar diferentes colores.
Borrador con coordenadas utilizadas:
Código:
22
23. void dibuja(void) //funcion dibuja
{
glClear(GL_COLOR_BUFFER_BIT); //borra pantalla
glColor3f(1.0 , 0.0 , 0.0);
// triangulo de la cabeza
glBegin(GL_TRIANGLES);
glColor3f(1.0,1.0,0.0);
glVertex2i(250,750);
glColor3f(0.0,1.0,0.0);
glVertex2i(550,750);
glColor3f(0.0,1.0,1.0);
glVertex2i(400,850);
//triangulo de la cabeza 2
glColor3f(0.0,1.0,0.0);
glVertex2i(300,750);
glColor3f(1.0,0.0,0.0);
glVertex2i(500,750);
glColor3f(0.0,0.0,1.0);
glVertex2i(400,600);
//triangulo pequeño del cuerpo
glColor3f(0.0,0.0,0.0);
glVertex2i(400,550);
glColor3f(0.0,0.0,0.0);
glVertex2i(425,600);
glColor3f(0.0,0.0,0.0);
glVertex2i(374,600);
// triangulos de la mano izquierda
glColor3f(1.0,0.0,0.0);
glVertex2i(300,600);
glColor3f(1.0,0.0,1.0);
glVertex2i(100,300);
glColor3f(1.0,1.0,0.0);
glVertex2i(50,400);
glColor3f(0.0,1.0,0.0);
23
24. glVertex2i(50,400);
glColor3f(0.0,1.0,1.0);
glVertex2i(0,450);
glColor3f(1.0,1.0,0.0);
glVertex2i(0,350);
// triangulos de la mano derecha
glColor3f(1.0,1.0,0.0);
glVertex2i(500,600);
glColor3f(0.0,1.0,1.0);
glVertex2i(650,300);
glColor3f(1.0,1.0,1.0);
glVertex2i(700,350);
glColor3f(1.0,0.0,1.0);
glVertex2i(700,350);
glColor3f(1.0,1.0,0.0);
glVertex2i(750,300);
glColor3f(0.0,1.0,1.0);
glVertex2i(750,400);
// triangulos de la pierna y pie izquierdo
glColor3f(1.0,0.0,1.0);
glVertex2i(350,100);
glColor3f(1.0,0.0,0.0);
glVertex2i(350,350);
glColor3f(0.0,1.0,1.0);
glVertex2i(300,300);
glColor3f(1.0,1.0,0.0);
glVertex2i(350,100);
glColor3f(1.0,0.0,1.0);
glVertex2i(250,150);
glColor3f(1.0,1.0,1.0);
glVertex2i(200,100);
// triangulos de la pierna y pie derecho
glColor3f(1.0,1.0,0.0);
24
27. Practica No.6: Casita
Descripción: En esta práctica utilizaremos todas las funciones ya
aprendidas anterior mente ya que realizaremos una casa con
ventanas, puertas, barandales, arboles entre otras cosas y
utilizaremos diferentes combinaciones de colores para cada accesorio.
Borrador con coordenadas utilizadas:
Código:
void dibuja(void) //funcion dibuja
{
glClear(GL_COLOR_BUFFER_BIT); //borra pantalla
glBegin(GL_QUADS);
// calle
glColor3f(0.0,0.0,0.0);
glVertex2i(0,0);
glVertex2i(1000,0);
glVertex2i(1000,100);
27
29. glVertex2i(50,600);
glVertex2i(450,600);
glVertex2i(450,700);
glVertex2i(100,700);
// parte de la casa (anaranjada)
glColor3f(1.0,0.0,0.0);
glVertex2i(450,300);
glVertex2i(850,300);
glColor3f(1.0,1.0,0.0);
glVertex2i(850,800);
glVertex2i(450,800);
// parte de la casa1 (rosa)
glColor3f(1.0,0.0,1.0);
glVertex2i(550,300);
glVertex2i(600,300);
glVertex2i(600,800);
glVertex2i(550,800);
// parte de la casa2 (rosa)
glColor3f(1.0,0.0,1.0);
glVertex2i(700,300);
glVertex2i(750,300);
glVertex2i(750,800);
glVertex2i(700,800);
// parte de la casa3 (rosa)
glColor3f(1.0,0.0,1.0);
glVertex2i(450,600);
glVertex2i(850,600);
glVertex2i(850,650);
glVertex2i(450,650);
// parte de la casa (roja)
glColor3f(1.0,0.0,0.0);
glVertex2i(300,800);
glVertex2i(1000,800);
glVertex2i(900,900);
glVertex2i(400,900);
29
49. Practica No.9: Muñeco con formas
Descripción: En esta práctica debes de realizar un muñeco con
triángulos, cuadros, polígonos y que vayan rellenos de colores que el
dibujó te vaya indicando.
Borrador con coordenadas utilizadas:
Código:
49
56. Practica No.10: Animación de circulo rotando
Descripción: En esta actividad debes de realizar que el círculo vaya
dando vueltas por toda la ventana de OpenGl.
Borrador con coordenadas utilizadas:
Código:
void dibuja(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
if(x>=1 && x<500){
circulo(2+1*x,500,50);
glFlush();
x++;
}
if(y>=1 && y<500 && x==500){
circulo(500,500+y,50);
56
59. Practica No.11: Animación del Sistema Solar
Descripción: En esta práctica realizaremos una animación en el
cual nosotros vamos a hacer la simulación del sistema solar y que los
planetas vayan girando sobre su eje de rotación.
Borrador con coordenadas utilizadas:
Código:
void dibuja(void)
59
62. Practica No.12: Movimiento en ocho
Descripción: En esta práctica debemos de realizar que una pelotita
se mueva en una dirección de ocho.
Borrador con coordenadas utilizadas:
Código:
void dibuja(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//esto
62
65. Practica No.13: Semáforo
Descripción: En esta práctica vamos a realizar un semáforo en el
cual el semáforo vaya cambiando los colores como lo es un semáforo
de realidad.
Borrador con coordenadas utilizadas:
Código:
65
70. Practica No.14: Cubo 3D
Descripción: En esta actividad realizaremos con funciones en 3D el
un cubo el cual tenga movimiento con el mouse y se vea en tercera
dimensión.
Borrador con coordenadas utilizadas:
Código:
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
70
71. //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});
//glShadeModel (GL_SMOOTH);
// esfera
glPushMatrix();
mover();
if(malla) creaMalla();
if(ejes) creaEjes();
//glRotatef(anguloEsfera, 1.0f, 1.0f,0.0f);
glColor3f(1.0,1.0,0.0);
//R
glTranslatef(-8.0,0.0, 0.0);
glutSolidCube(2);
71
74. Practica No.15: Nombre 3D
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 con coordenadas utilizadas:
Código:
void dibuja( void )
{
glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
74
75. 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) {
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});
//glShadeModel (GL_SMOOTH);
// esfera
glPushMatrix();
mover();
if(malla) creaMalla();
if(ejes) creaEjes();
//glRotatef(anguloEsfera, 1.0f, 1.0f,0.0f);
glColor3f(1.0,1.0,0.0);
75
81. Practica Extra: La pirámide
Descripción: En esta práctica debemos de realizar una pirámide
con 10 cuadros y que vayan disminuyendo, con una función en
especial y ponerle líneas de esquina a esquina.
Borrador con coordenadas utilizadas:
Código:
void dibuja(void) //funcion dibuja
{
int i,a=20;
glClear(GL_COLOR_BUFFER_BIT); //borra pantalla
glColor3f(1.0 , 1.0 , 0.0);
glBegin(GL_LINES);
81