← Volver al portafolio

Motor gráfico

Motor gráfico desarrollado como trabajo académico

Duración
9 meses
Equipo
2 personas
Librería
OpenGL
Plataforma
PC

Descripción del Proyecto

Motor gráfico desarrollado desde cero. Implementa técnicas avanzadas como forward y deferred rendering, sistema de sombras, portales, físicas mediante el uso de la librería Bullet, scripting en Lua y una arquitectura ECS con jerarquías. Además, incluye herramientas de edición integradas con ImGui y un sistema de hilos para tareas pesadas.

Tecnologías Utilizadas

OpenGL C++ Bullet physics API ImGui

Tareas asignadas

Mi rol principal se centró en la parte de más alto nivel como puede ser el input o un sistema de hilos, aunque también participé en algunas características como la iluminación o la carga de assets

Controller Icon Sistema de input

Apoyandose en la librería glfw se ha realizado un sistema de input para ratón y teclado que te permite capturar tanto las diferentes teclas como el movimiento del ratón y el offset de la rueda

Threads Icon Sistema de trabajos

Se ha implementado un sistema de hilos en los que realizar aquellas tareas complejas de forma que la aplicación se mantenga usable en todo momento. Con el objetivo de que estos hilos puedan devolver el resultado de cualquier acción, se ha hecho uso de funciones templatizadas, generalizando el código lo máximo posible.

Scripting Icon Scripting en LUA

Se han creado e integrado las bases de un sistema de scripting con LUA. Este sistema es escalable, de forma que en un futuro se podría trabajar en el y permitir al usuario realizar acciones en LUA directamente, sin tener que utilizar C++.

Scripting Icon Integración de físicas

Se ha integrado la API Bullet en el motor, permitiendo crear un sistema de físicas con los objetos en escena. Esta librería permite tener tanto objetos físicos estáticos como "Rigidbodies" y controla las interacciones entre los mismos.

Diagram Icon Jerarquías de objetos con ECS

Una tarea muy importante realizada en el motor ha sido la abstracción del mismo de forma que sea sencillo de utilizar por el usuario. Es por ello que se ha creado un sistema de objetos que nos permite realizar por debajo todas las acciones necesarias para controlar las diferentes entidades existentes y sus respectivas propiedades, mientras que el usuario tan solo debe pensar en que tipo de objeto le interesa en cada momento. Este sistema también abstrae las físicas integradas de la librería, permitiendo al usuario crear un objeto con físicas de forma sencilla.

Editor Icon Editor realizado con ImGui

Con intención de facilitar la depuración del motor así como la creación de escenas en el mismo se ha desarrollado un editor haciendo uso de ImGui. Desde este editor podremos ver la jerarquía de objetos en la escena así como editar sus propiedades básicas, ya sea su componente de "Transform", sus propiedades físicas o el tipo de luz y sus propiedades en caso de serlo.

Saving Icon Prototipo de sistema de guardado de escenas

Se ha creado una versión inicial de un sistema de guardado que nos permite almacenar en memoria tanto el componente de Transform de los objetos como las propiedades de las diferentes luces. De esta forma se nos permite crear una escena desde el editor sin necesidad de configurar dichos componentes desde código.