Motor de simulación procedural de monstruos desacoplado, modular y agnóstico de cualquier librería de renderizado, desarrollado en C idiomático.
El motor está compuesto por los siguientes módulos principales:
MathUtils(include/MathUtils.h): Utilidades matemáticas escalares genéricas (clamp, lerp, grados/radianes) y cálculo seguro de capacidades para arreglos dinámicos.Vector(include/Vector.h): Álgebra vectorial para dimensiones fijas (Vector2,Vector3,Vector4) y N-dimensionales (VectorND).Transform3D(include/Transform3D.h): Transformaciones 3D (posición, rotación Euler y escala) con conversión entre espacio local y mundo.AABB(include/AABB.h): Bounding Boxes 3D alineadas a los ejes (AABB) y utilidades de expansión/margen.Color&ColorPalette(include/Color.h,include/ColorPalette.h): Gestión de espacio de colores RGBA/HSV, gradientes dinámicos y muestreo continuo.BodyPart(include/BodyPart.h): Definición anatómica de segmentos corporales, cajas de colisión y lista dinámica de traits.Eye&Mouth(include/Eye.h,include/Mouth.h): Órganos faciales de las criaturas: ojos individuales y boca/mandíbula.Trait,VisualTrait&MonsterBehavior(include/Trait.h,include/VisualTrait.h,include/MonsterBehavior.h): Rasgos polimórficos (comportamiento, combate y visuales) y controladores de comportamiento.Monster(include/Monster.h): Entidad principal que engloba paleta cromática, partes corporales, ojos, bocas, traits polimórficos y física.MonsterQueries(include/MonsterQueries.h): Funciones de consulta pura (no mutadoras) sobre la entidad: centros de masa, direcciones, anchos/altos interpolados y caja envolvente.MonsterAger(include/MonsterAger.h): Módulo de interpolación continua entre fases (envejecimiento/evolución de un monstruo).WorldInterface(include/WorldInterface.h): Interfaz agnóstica de consulta del mundo/entorno (altura del terreno).
La geometría de los monstruos se define mediante Signed Distance Fields (SDF) y se convierte en malla poligonal a través del siguiente pipeline:
SDFPrimitives(include/SDFPrimitives.h): Primitivas geométricas continuas (esfera, elipsoide, cápsula, cápsula cónica, caja 3D).SDFOperations(include/SDFOperations.h): Operaciones CSG booleanas y mezclas suaves (Smooth Union / Subtract) con materiales.SDFSampling(include/SDFSampling.h): Muestreo del campo SDF y estimación de normales por diferencias finitas.MonsterSDF(include/MonsterSDF.h): Representación geométrica implícita compilada de un monstruo (snapshot desacoplado e independiente trasBuild).MarchingCubes(include/MarchingCubes.h,include/MarchingCubesTables.h): Interprete de topología: máscara de aristas cortadas y filas canónicas de triángulos (256 casos).SDFMesher(include/SDFMesher.h): Orquestador de triangulación: convierte el campo SDF en malla poligonal con caché de aristas.Mesh&PrimitiveMesh(include/Mesh.h,include/PrimitiveMesh.h): Estructura de datos genérica de mallas 3D indexadas (vértices + índices) y generador de mallas primitivas (esferas UV).MonsterVisual(include/MonsterVisual.h): Coordinador desacoplado que sintetiza la representación visual (SDF → Mesh) de un monstruo, incluyendo los ojos.
RenderInterfaces&OpenGLRenderer(include/RenderInterfaces.h,include/OpenGLRenderer.h): Arquitectura agnóstica de dibujado (MonsterRendererVTable yICamera) implementada actualmente mediante OpenGL y SDL2 (renderizado atómico de triángulos y modo wireframe).
El proyecto incluye un Makefile listo para construir el motor, las ejecuciones de prueba, los visores 3D y la documentación.
# Compilar todo (pruebas, ejecutable principal, demos y documentación Doxygen)
make all
# Compilar y ejecutar la suite de pruebas unitarias
make test
# Compilar únicamente las demos de la carpeta demos/
make demos
# Generar la documentación HTML en doc/html
make docs
# Limpiar objetos y binarios generados
make clean-
Visor 3D Interactivo (
lizard_viewer,src/main_lizard_viewer.c): Visor SDL2 + OpenGL del pipeline SDF que renderiza el lagarto con ojos sintetizados (mallado por voxel size)../lizard_viewer
-
Prueba Lógica e Impresión de Datos (
demos/demo_lizard_console): Construye un lagarto y muestra su anatomía, paleta y centros por consola../demos/demo_lizard_console
-
Visor 3D Interactivo de Envejecimiento (
demos/demo_ager_3d): Muestra la animación en tiempo real con OpenGL del lagarto evolucionando de joven a adulto alfa.- Flecha DERECHA / ARRIBA: Avanzar porcentaje de edad.
- Flecha IZQUIERDA / ABAJO: Retroceder porcentaje de edad.
- ESPACIO: Activar/Desactivar oscilación automática.
./demos/demo_ager_3d
La suite de pruebas unitarias (tests/test_*.c) cubre colores, vectores, partes del cuerpo, monstruo, envejecimiento, pipeline SDF, tablas de Marching Cubes, validación de mallas, mallas primitivas y el pipeline completo (SDF → Mesh → Visual). Se ejecuta con:
make testToda la base de código utiliza anotaciones en formato Doxygen (@file, @brief, @param, @return, @struct).
Para actualizar o consultar la documentación HTML:
- Ejecuta
make docsodoxygen Doxyfile. - Abre
doc/html/index.htmlen el navegador.