Tarea 3 realizado en el curso CC7515-1 Computación en GPU. Corresponde a una escena que simula una superficie fluida en tiempo real donde el usuario puede manipular sus parametros, ademas de agregar algun modelo 3D.
Se uso el lenguaje C++ con la siguientes librerias:
- Glad : Libreria necesaria para cargar los punteros a funciones de OpenGL. En este proyecto se uso OpenGL 4.5
- GLFW3 : Libreria usada con OpenGl que provee una API para manejar ventanas
- GLM : Libreria con funciones matematicas utiles para el uso de aplicaciones con OpenGL
- Stb-image : Libreria para poder cargar texturas
- Assimp: Libreria para poder cargar modelos 3D
- Dear Imgui: Libreria para poder agregar un menu configurable
A continuación se darán los pasos con las que se pudo instalar las diferentes librerías para poder usarlas en el programa Visual Studio 2019:
- Se tiene que configurar el proyecto en VS, creando las carpetas /Libraries/include y /Libraries/lib si no se encuentran
- Seleccionar la plataforma x64 en el editor
- Ir a configuraciones del proyecto y seleccionar en Platform: All Platforms
- Ir a VC++ Directories -> Include Directories -> Edit -> new -> ... -> seleccionar la carpeta project/Libraries/include -> ok
- Ir a VC++ Directories -> Library Directories -> Edit -> new -> ... -> seleccionar la carpeta project/Libraries/lib -> ok
- Ir a Linker -> Input -> Additional Dependencies -> Edit -> poner en el campo de texto:
glfw3.lib
opengl32.lib
Luego para instalar las diferentes librerías:
- Glad : Descargar la version OpenGL/GLAD (version 4.5 Core), abrir glad.zip -> ir a /include y copiar carpetas "glad" y "KHR" a la carpeta del proyecto /Libraries/include. Del mismo zip -> ir a /src y copiar el archivo "glad.c" en la carpeta raíz del proyecto.
- GLFW3 : Descargar, y compilar con Cmake en una carpeta build, ir a ../build/src/Debug y copiar el archivo "glfw3.lib" a la carpeta del proyecto Libraries/lib. Ir a ../include y copiar la carpeta "GLFW" a la carpeta del proyecto Libraries/include
- GLM : Descargar, descomprimir y copiar directorio que sea raíz de glm.h y pegarla en Libraries/include
- Stb-image : Descargar header stb_image.h y copiar en Libraries/include. Luego crear archivo stb.cpp y copiarlo en la raíz del proyecto ya que es necesario su compilación. Debe contener lo siguiente:
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
- Assimp: Descargar y compilar con CMake, agregar config.h desde build/ en include/. Agregar archivo assimp-vc140-mt.dll en la raíz del proyecto
- Dear Imgui: Descargar los archivos y descomprimir. incorporar los archivos del directorio base y de la versión a usar (openGL3.* y glfw, headers y cpp que se encuentran en la carpeta backends) al proyecto directamente. Importante utilizar la versión que soporta Docking
Las librerías ya se encuentran incluidas en el archivo solucion del proyecto De VS 2019 (Se puede ejecutar desde aquí, seleccionando la plataforma x64), sin embargo se incluye también el archivo ejecutable en la raíz del proyecto.
Los controles de teclado son:
- [W] Desplazar la escena hacia el fondo
- [S] Desplazar la escena hacia la cámara
- [A] Desplazar la escena la derecha
- [D] Desplazar la escena la izquierda
- [O] Vuelve el centro de la escena al origen
- [UP] Rotar la cámara hacia arriba
- [DOWN] Rotar la cámara hacia abajo
- [LEFT] Rotar la cámara hacia la izquierda
- [RIGHT] Rotar la cámara hacia la derecha
- [SCAPE] Salir de la aplicación
- [SPACEBAR] Cambiar el modo de relleno de polígonos
Los Controles con el mouse son:
- [Click izquierdo + Movimiento del mouse] Permite rotar la escena
- [Click derecho + Movimiento del mouse] Permite desplazar la escena
- [Scroll] Permite alejar o acercar la escena
Aparte con el mouse se puede controlar el menú de la izquierda
Basta con posicionar el mouse sobre el menú o las pestañas y seleccionar las diversas opciones con el click izquierdo.
La aplicación provee de un sistema para poder arrastrar y reposicionar las ventanas que dispone, las cuales son una para la escena del océano y otra para el menú lateral. También se puede agrandar o cambiar el tamaño de la ventana de la aplicación y no afectará las proporciones de la visualización. Sin embargo se recomienda dejar la posición del menú como se encuentra por defecto.
El menú lateral presenta los siguientes elementos
Parámetros del modelo del barco:
- Position: Tres Slider para cada coordenada de la posición del barco
- Size: Slider para el valor de escala del barco
- Rotation: Slider para el valor de la rotación en el eje Z del barco
Parámetros para controlar los colores del océano y sus coeficientes de material
- Water Color: Seleccionador RGB del color base del oceano
- Water Ambient: Seleccionador RGB del coeficiente de material ambiente del océano
- Water Diffuse: Seleccionador RGB del coeficiente de material difuso del océano
- Water Specular: Seleccionador RGB del coeficiente de material especular del océano
- Shininess: Slider del brillo reflejado por el océano
- Gravity: Slider con el valor de la fuerza de gravedad que influye en la velocidad del oleaje
Contiene parámetros para configurar cada uno de los tres oleajes. Cada pestaña de Wave contiene:
- Direction: Dos Sliders para las coordenadas x,y de la dirección de movimiento del oleaje
- Steepness: Slider para el valor de la amplitud del oleaje
- WaveLength: Slider para el largo del oleaje
Contiene los parámetros para configurar cada uno de los tres efectos con texturas. Casa pestaña contiene:
- Direction: Dos Sliders para las coordenadas x,y de la dirección de movimiento de la textura
- Size: Slider del valor que escala el tamaño de la textura
- Speed: Slider de la velocidad de desplazamiento de la textura
- Strength: Slider del valor de saturación de la textura
- Texture Color: Seleccionador RGB para el color que satura la textura
- Lmt 1: Slider de la cota inferior sobre la cual se filtra el valor leído de la textura
- Lmt 2: Slider de la cota superior sobre la cual se filtra el valor leído de la textura
- Include inside?: Checkbox para seleccionar si el filtro es sobre el interior de los límites anteriores o sobre el exterior
Parámetros para controlar la posición de la luz y de los coeficientes de iluminación
- Cenit: Slider del ángulo cenital del sol
- Azim: Slider del ángulo azimutal del sol
- Ambient: Slider del coeficiente de iluminación ambiental sobre una luz blanca
- Diffuse: Slider del coeficiente de iluminación difusa sobre una luz blanca
- Specular: Slider del coeficiente de iluminación especular sobre una luz blanca
Botón para cambiar entre la vista de la escena global o entre la vista desde el barco
Botón para cambiar a la configuración de la escena con grandes olas
Botón para cambiar a la configuración de la escena con pequeñas olas
Botón para cambiar a la configuración de la escena atardecer
Botón para cambiar a la configuración de la escena de lava