1. INSTITUTO TECNOLÓGICO DE OAXACA
NOMBRE DE LA CARRERA:
INGENIERIA EN SISTEMAS COMPUTACIONALES
NOMBRE DE LA MATERÍA:
GRAFICACIÓN
CLAVE: SCC-1010
NOMBRE DEL PROYECTO:
REPRESENTACIÓN DE UNA MONTAÑA USANDO OPENGL
https://www.linkedin.com/in/benjaminjoaquinmartinez/
SEMESTRE: SEPTIMO (7º)
GRUPO: “IS-A”
HORA: 17:00 – 18:00 HRS
FECHA: 12 DE DICIEMBRE DE 2016
3. 3
Índice de Figuras
Ilustración 1. Malla principal ................................................................................................12
Ilustración 2. Malla con 9 vértices (segunda iteración)........................................................12
Ilustración 3. Malla con n iteraciones...................................................................................13
Ilustración 4. Montaña con efecto de luz y sombra .............................................................13
Ilustración 5. Aumento de rugosidad ...................................................................................14
Ilustración 6. Montaña con división de altitud por color ....................................................14
Ilustración 8. Traslación negativa sobre eje x.......................................................................15
Ilustración 7. Traslación positiva sobre eje x........................................................................15
Ilustración 9. Traslación positiva en eje y.............................................................................16
Ilustración 10. Traslación negativa en eje y..........................................................................16
Ilustración 11. Traslación positiva en eje z...........................................................................17
Ilustración 12. Traslación negativa en eje z..........................................................................17
Ilustración 13. Escala reductiva ............................................................................................18
Ilustración 14. Escala aumentada .........................................................................................18
Ilustración 15. Rotación en eje y...........................................................................................19
Ilustración 16. Rotación en eje x...........................................................................................19
Ilustración 17. Rotación en eje z...........................................................................................20
Ilustración 18. Vista de la montaña final ..............................................................................20
Índice de tablas
Tabla 1. Funciones del teclado para el programa.................................................................11
4. 4
1. MARCOCONTEXTUAL
1.1 Nombre del proyecto
Representación de una montaña utilizando OpenGL
1.2 Introducción
Desde la aparición de la graficación por computadora se ha facilitado la representación
virtual de los objetos visibles del universo y todo lo que podamos imaginar, aún si ello no
existe.
Estos gráficos que se generan por computadora pueden emplearse en diferentes áreas
como el cine, los videojuegos, publicidad, simuladores, etcétera, pues ayuda a visualizar
datos complejos de forma sencilla,representar escenas,y en algunos casos,interactuar con
ellas en tiempo real.
En las escenas que podemos realizar, muchas veces tenemos la necesitad de proyectar
elementos de la naturaleza, los cuales tienen estructuras fractales. Esta característica es
posible definir en algún lenguaje de programación y facilitar esto con ayuda de alguna
librería gráfica.
1.3 Objetivo general
Modelar gráficamente una montaña.
1.4Objetivos específicos
Elaborar el modelado de una montaña
Codificar el modelado con lenguaje C++
Utilizar la librería OpenGL para la codificación
Implementar la interacción con la escena
Realizar la documentación para los usuarios
5. 5
2. MARCOTEÓRICO
2.1 Gráfico por computadora
Se denomina grafico por computadora a las imágenes las cuales son generadas mediante el
uso de software ordenadores pueden dividirse en gráficos 2D y gráficos 3D (aparenta
profundidad).
2.2 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 por Silicon Graphics Inc. (SGI) en
19922 y se usa ampliamente en CAD, realidad virtual, representación científica,
visualización de información y simulación de vuelo. También se usa en desarrollo de
videojuegos, donde compite con Direct3D en plataformas Microsoft Windows. Actualmente
se encuentra en su versión 4.4 liberada el 22 de julio de 2013.
2.3 Lenguaje de programación C++
C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne
Stroustrup. La intención de su creación fue el extender al exitoso lenguaje de programación
C con mecanismos que permitan lamanipulación de objetos. En esesentido, desde elpunto
de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido.
Posteriormente seañadieron facilidades deprogramación genérica,que sesumó a los otros
dos paradigmas que ya estaban admitidos (programación estructurada y la programación
orientada a objetos). Por esto se suele decir que el C++ es un lenguaje de programación
multiparadigma.
2.4 GLUT
Es una biblioteca de utilidades para programas OpenGL que principalmente proporciona
diversas funciones de entrada/salida con el sistema operativo. Entre las funciones que
6. 6
ofrece se incluyen declaración y manejo de ventanas y la interacción por medio de teclado
y ratón. También posee rutinas para el dibujado de diversas primitivas geométricas (tanto
sólidas como en modo wireframe) que incluyen cubos, esferas y teteras. También tiene
soporte para creación de menús emergentes.
2.5 Montaña
El término montaña proviene del latín mons. En geografía, una montaña o un monte es un
conjunto de rocas, tierra, piedras y, en su caso, lava, que forman una elevación natural de
gran altura y de grandes dimensiones (mayor de 700 m) sobre el terreno.
2.6 Fractal
Un fractal es un objeto geométrico cuya estructura básica, fragmentada o irregular, se
repite a diferentes escalas. El término fue propuesto por el matemático Benoît Mandelbrot
en 1975 y deriva del latín fractus, que significa quebrado o fracturado. Muchas estructuras
naturales son de tipo fractal. La propiedad matemática clave de un objeto genuinamente
fractal es que su dimensión métrica fractal es un número no entero.
2.7 Textura
Una textura es una imagen del tipo bitmap utilizada para cubrir la superficie de un objeto
virtual, ya sea tridimensional o bidimensional, con un programa de gráficos especial.
Multitexturizado es el uso de más de una textura a la vez en un polígono.
2.8 Recursividad
Es la forma en la cual se especifica un proceso basado en su propia definición.
2.9 Modelado
Arte o técnica que consiste en dar la forma deseada a una materia blanda.
7. 7
2.10 Renderizar
Es un término usado en jerga informática para referirse al proceso de generar una imagen
o vídeo mediante el cálculo de iluminación GI partiendo de un modelo en 3D. Este término
técnico es utilizado por los animadores o productores audiovisuales (CG)y en programas de
diseño en 3D.
2.11 Grafico3D
El término gráficos 3D por computadora (o por ordenador) se refiere a trabajos de arte
gráfico que son creados con ayuda de software y programas especiales en general, o de
términos, de técnicas y tecnología relacionadas con los gráficos de dimensiones altamente
concentradas pueden ser grises o azul con rojo.
2.12 Artesaníadesoftware
En la artesanía del software se pone el énfasis en las capacidades de desarrollo del
programador y su capacidad de aprendizaje constante, como una forma de resolver los
problemas habituales de la industria que surgen por un enfoque hacia el software como
producto en lugar de como arte. Donde la industria tradicional pone varios niveles de
consultores, analistas, diseñadores y programadores, la artesanía del software, basada en
las directrices del desarrollo ágil (Agile Manifestó), da prioridad a la figura del desarrollador
artesano, trabajando dentro de un grupo de artesanos de mayor o menor nivel.
Aprendizaje y mejora constante, gusto por la perfección entendiendo que ésta es
inalcanzable, productos sólidos, bien construidos y pasión por el oficio. Soy un artesano;
artesano del software.
3. MARCO METODOLÓGICO
1. Se realizara un boceto a mano para darse la idea de la implementación en el cual el
objeto a dibujar “Montaña” quedara plasmado.
2. Utilización de superficie plana que será la guía con la cual se dividirá para tener la
referencia de la ubicación de los objetos.
8. 8
3. Creación de un método recursivo para que vaya calculando
4. Creación de un segundo boceto codificado en OpenGl mediante el uso de figuras
tridimensionales simples (sin texturas).
5. De la figura plana se hace una división en cuatro partes.
6. Se le asigna una altura aleatoria a los 5 vértices
7. Se repite el proceso en cada iteración.
8. Aplicación de efectos de profundidad e iluminación alescenario resultado del último
paso.
9. Le hicimos algunas modificaciones porque la vista de la cámara no podía apreciar de
cerca la textura.
10. Aplicación de la rugosidad.
11. Se le aplica color a la montaña, esto de acuerdo a la altura de cada vértice.
12. Pruebas finales.
4 FUNCIONES
4.1 Traslación
Con la traslación le damos movimiento a la gráfica de la montaña.
La tecla “” traslada la figura en el eje de las “equis” (x). Cuando se presiona esa tecla la
montaña se moverá a la izquierda, representaría un movimiento negativo en el eje de las
equis (x); y cuando la tecla presionada es “”, el gráfico se moverá en sentido positivo,
recorriéndose a la derecha.
El movimiento vertical del gráfico de la montaña está dado por el uso de la tecla “”, donde
se moverá hacia abajo, y por el contrario siendo la tecla “” la montaña se trasladará hacia
arriba.
El gráfico de la montaña se deslizará en la profundidad usando la tecla “o”, representando
con esta el eje “z”. Si la tecla se presiona la figura representará un movimiento de
9. 9
acercamiento a la pantalla; y si se presiona la tecla “p” el gráfico describirá una traslación
que aparentará lejanía a la pantalla.
4.2 Rotación
La figura es capaz de rotar, y lo hará en 6 direcciones dependiendo de las teclas que sean
presionadas. Si se presiona la tecla “F1” la figura rotará sobre el eje “x” hacia arriba, si es
presionada la tecla “1” la figura rotara sobre el eje “x” hacia abajo.
La figura rotara hacia la derecha sobre el eje “y” si es presionada la tecla “F2” rotara al lado
opuesto si se presiona la tecla “2”.
Para que la figura rote sobre el eje “z” se implementaron las teclas “F3” para rotación
contraria a las manecillas del reloj o la tecla “3” para rotación similar a las manecillas del
reloj.
4.3 Rugosidad
La montaña puede aumentar o disminuir su rugosidad y con esto aumentar la altura de los
“picos” en su superficie. Esto por la cantidad de veces que la malla calcula las alturas
aleatorias de sus puntos (o intersecciones en esa malla).
4.4 Escala
Laescalatambién puede modificarse, aumentando en 0.1 en los tres ejes.Si se presiona “+”
aumentara y si se presiona la tecla “-“ disminuirá la escala
4.4 Profundidad
La profundidad y las iteraciones también pueden cambiar. La montaña puede aumentar o
disminuir sus iteraciones, y con esto mejorar su textura, agregar complejidad y aumentar la
cantidad de “picos” en su superficie o todo lo contrario al reducir la cantidad de figuras en
la malla inicial y simplificar la figura. Esto por la cantidad de veces que la malla inicial se
divide y calcula sus puntos para las alturas aleatorias de sus puntos (o intersecciones en esa
malla).
10. 10
Para lograr esto, se presiona las teclas “F5” para reducir las iteraciones al restar uno, o “F6”
para aumentarlas, sumando uno a la profundidad cada que se presiona.
4.5 Posición inicial
Si se desea ver el gráfico de la montaña centrado y en una posición horizontal, se presiona
la tecla “r” y con esto las transformaciones de traslación, rotación y escalabilidad regresan
a la normalidad y se podrá ver el gráfico completamente de frente y observar mejor sus
transformaciones, tal y como se encontraba al inicio, en cuanto a posición se refiere, pues
las iteraciones y rugosidad no se ven alterados
4.6 Establecer luz origen
Para poder darle un mayor realismo a la figura se implementaron las funciones de luz de
openGL (Luz ambiental, luz difusa y luz especular) añadiendo a esta una posición donde se
establecería el origen de la luz. La posición del origen de luz la podemos cambiar usando las
teclas “x, X, y, X, z, Z” para mover sobre los ejes “x”, “y” o “z”. Si la tecla se presiona con
mayúsculas activadas la traslación de punto origen de luz se moverá positivamente sobre
cada eje, de lo contrario si la tecla es presionada sin activar mayúsculas el movimiento será
negativo sobre cada eje.
4.7 Nueva montaña
Adicional seimplemento una función para que cuando seapresionada la tecla“F4” cree una
nueva montaña.
11. 11
4.7 Resumen de Funciones
Tabla 1. Funciones del teclado para el programa
TECLA FUNCIÓN DESCRIPCIÓN
Traslación Traslación negativa sobre el eje x
Traslación Traslación positiva sobre el eje x
Traslación Traslación positiva sobre el eje y
Traslación Traslación negativa sobre el eje y
o Traslación Traslación negativa sobre el eje z
p Traslación Traslación positiva sobre el eje z
F1 Rotación Rotar sobre el eje x hacia arriba
1 Rotación Rotar sobre el eje x hacia abajo
F2 Rotación Rotar sobre el eje y hacia la derecha
2 Rotación Rotar sobre el eje y hacia la izquierda
F3 Rotación Rotar sobre el eje z hacia la izquierda
3 Rotación Rotar sobre el eje z hacia la derecha
F4 Nuevo Crear nueva montaña
F5 Iteración Aumentar las iteraciones para dividir la malla principal
F6 Iteración Disminuir las iteraciones para dividir la malla principal
+ Escala Aumentar el tamaño de la figura
- Escala Disminuir el tamaño de la figura
X Traslación Traslación positiva sobre el eje x el origen de luz
x Traslación Traslación negativa sobre el eje x el origen de luz
Y Traslación Traslación positiva sobre el eje y el origen de luz
y Traslación Traslación negativa sobre el eje y el origen de luz
Z Traslación Traslación positiva sobre el eje z el origen de luz
z Traslación Traslación negativa sobre el eje z el origen de luz
ESC Escape Salir del programa
21. 21
7 CONCLUSIÓN
Durante la realización de este trabajo se hizo notable la importancia de los fractales. El
campo de acción de los fractales no ha parado de ampliarse desde las investigaciones de
Mandelbrot en los 70’s. A partir de eso, muchos científicos han descubierto que la
geometría fractal es una poderosa herramienta para el descubrimiento de los secretos de
una amplia variedad de sistemas y solución de los problemas importantes de la ciencia
aplicada.
Entre la gran variedad de fractales que existen hoy en día se decidió utilizar el fractal de
paisaje puesto que éste cuenta con el algoritmo de subdivisión y proporciona de una
manera más realista y flexible el cálculo de las estructuras de la montaña. Con esta técnica,
se logró cierto grado de realismo en el paisaje.
Se utilizó la especificación estándar OpenGL, visto que este es por sus características el
mejor cuando se trata de generar efectos visuales, escenas, imágenes realistas entre otras
cosas, debido a su portabilidad, estandarización y potencia gráfica. De igual manera 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.