j
jaipkg.dev
packages / library / Collision3D_Project

Collision3D_Project

18acd8blibrary

Un motor de física avanzado implementado en el lenguaje Jai que proporciona detección de colisiones 3D de alta precisión y rendimiento optimizado.

MIT · updated 12 months ago

Sistema de Detección de Colisiones 3D en Jai

Un sistema completo y avanzado de detección de colisiones 3D implementado en el lenguaje de programación Jai, diseñado para aplicaciones de física en tiempo real, motores de juegos y simulaciones.

🚀 Características Principales

Tipos de Colisionadores Soportados

  • Esferas - Colisiones optimizadas para objetos circulares
  • AABB (Axis-Aligned Bounding Box) - Cajas alineadas a los ejes
  • OBB (Oriented Bounding Box) - Cajas con rotación arbitraria
  • Cápsulas - Ideales para personajes y objetos alargados
  • Meshes Convexos - Formas geométricas complejas

Algoritmos de Detección Avanzados

  • GJK (Gilbert-Johnson-Keerthi) - Detección precisa entre meshes convexos
  • SAT (Separating Axis Theorem) - Para poliedros convexos
  • Detección esfera-esfera optimizada
  • Detección AABB-AABB ultra rápida
  • Algoritmos híbridos para combinaciones de formas

Optimización Espacial (Broad Phase)

  • BVH Dinámico - Bounding Volume Hierarchy auto-balanceado
  • Octree - Subdivisión espacial recursiva
  • Spatial Hash Grid - Para distribuciones uniformes
  • Selección automática del mejor algoritmo según la escena

Sistema de Física Integrado

  • Respuesta a colisiones con impulsos realistas
  • Fricción y restitución configurables por material
  • Resolución de penetración para evitar overlapping
  • Integración de fuerzas con gravedad personalizable
  • Cuerpos rígidos con masa e inercia

Detección Continua de Colisiones (CCD)

  • Conservative Advancement para objetos rápidos
  • Swept Volume Testing para trayectorias complejas
  • Time of Impact (TOI) preciso
  • Prevención de tunneling automática

Sistema de Raycast

  • Ray vs Sphere optimizado
  • Ray vs AABB con normales precisas
  • Ray vs OBB para objetos rotados
  • Múltiples hits con ordenamiento por distancia

📁 Estructura de Archivos

collision_3d_math.jai       # Matemáticas base (Vector3, matrices, quaterniones)
collision_3d_shapes.jai     # Definición de formas geométricas y colisionadores
collision_3d_detection.jai  # Algoritmos de detección (GJK, SAT, etc.)
collision_3d_broadphase.jai # Sistemas de optimización espacial
collision_3d_system.jai     # Sistema principal y raycast
collision_3d_response.jai   # Respuesta física y resolución
collision_3d_ccd.jai        # Detección continua de colisiones
collision_3d_example.jai    # Ejemplo de uso completo
test_*.jai                  # Archivos de prueba específicos

🎯 Casos de Uso

Motores de Juegos

  • Detección de colisiones entre jugadores y entorno
  • Sistema de proyectiles con trayectorias precisas
  • Interacciones físicas realistas

Simulaciones Científicas

  • Simulaciones de partículas
  • Dinámica de fluidos discreta
  • Modelado de sistemas mecánicos

Aplicaciones Robóticas

  • Planificación de rutas sin colisiones
  • Detección de obstáculos en tiempo real
  • Simulación de movimientos roboticos

🔧 Instalación y Uso

Requisitos

  • Compilador Jai (versión beta o superior)
  • Sistema operativo: Windows, Linux, macOS

Compilación

# Compilar ejemplo principal
jai collision_3d_example.jai

# Compilar pruebas específicas
jai test_performance.jai
jai test_shapes.jai
jai test_broadphase.jai

Uso Básico

#load "collision_3d_system.jai";

main :: () {
    // Crear mundo de física
    world := create_physics_world();
    
    // Crear esfera
    sphere_collider: Collider;
    sphere_collider.type = .SPHERE;
    sphere_collider.sphere = .{center = .{0, 5, 0}, radius = 1.0};
    
    sphere_body: RigidBody;
    sphere_body.mass = 1.0;
    sphere_body.inverse_mass = 1.0;
    
    // Agregar al mundo
    id := add_rigid_body(world, sphere_body, sphere_collider);
    
    // Simular
    dt := 0.016; // 60 FPS
    physics_step_with_ccd(world, dt);
}

📊 Rendimiento

Optimizaciones Implementadas

  • Detección en dos fases (Broad + Narrow phase)
  • Caché de coherencia para pares de colisión
  • SIMD-friendly operaciones vectoriales
  • Memory pooling para objetos temporales

Benchmarks Típicos

  • 10,000 objetos estáticos: ~2ms por frame
  • 1,000 objetos dinámicos: ~8ms por frame
  • Raycast contra 5,000 objetos: ~0.1ms

🧪 Pruebas Incluidas

test_shapes.jai

Pruebas exhaustivas de todos los tipos de colisionadores:

  • Precisión de detección
  • Casos extremos (objetos muy pequeños/grandes)
  • Transformaciones complejas

test_performance.jai

Benchmarks de rendimiento:

  • Stress test con miles de objetos
  • Comparación de algoritmos broadphase
  • Medición de memory usage

test_broadphase.jai

Validación de sistemas de optimización espacial:

  • Correctitud de BVH dinámico
  • Eficiencia de Octree
  • Escalabilidad de Spatial Hash

test_ccd.jai

Pruebas de detección continua:

  • Objetos a alta velocidad
  • Prevención de tunneling
  • Precisión temporal

test_physics.jai

Validación del sistema físico:

  • Conservación de energía
  • Estabilidad numérica
  • Realismo de interacciones

🎮 Ejemplos Avanzados

Simulación de Billar

// Ver: test_billiards.jai
// Simula bolas de billar con física realista

Sistema de Partículas

// Ver: test_particles.jai  
// Miles de partículas interactuando

Destrucción Procedural

// Ver: test_destruction.jai
// Fractura dinámica de objetos

🔬 Configuración Avanzada

Parámetros de Física

world.gravity = .{0, -9.81, 0};              // Gravedad personalizada
world.constraint_iterations = 8;             // Precisión vs rendimiento
world.penetration_slop = 0.005;             // Tolerancia de penetración
world.penetration_correction_percent = 0.9; // Agresividad de corrección

Optimización Broadphase

// Seleccionar algoritmo optimal
world.collision_world.use_bvh = true;        // Para escenas dinámicas
world.collision_world.broadphase_octree;     // Para distribución espacial
world.collision_world.broadphase_grid;       // Para densidad uniforme

Detección Continua

world.collision_world.use_continuous_detection = true;
// Automáticamente activa CCD para objetos rápidos

📈 Escalabilidad

Recomendaciones por Escenario

Escenario Objetos Broadphase CCD Iterations
Juego 2D/3D Simple < 100 BVH No 4
Simulación Media 100-1000 BVH + Octree 6
Simulación Masiva > 1000 Spatial Hash 8

🐛 Debugging y Profiling

Herramientas Incluidas

  • Visualización de AABBs para debugging
  • Contadores de rendimiento integrados
  • Logs detallados de colisiones
  • Validación de integridad del BVH

Debugging Tips

// Activar logs detallados
#define COLLISION_DEBUG 1

// Verificar integridad del BVH
validate_bvh_integrity(world.collision_world.broadphase_bvh);

// Contar operaciones por frame
print("Broadphase pairs: %\n", world.collision_world.collision_pairs.count);

🤝 Contribuciones

Este sistema está diseñado para ser extensible. Áreas de mejora:

Algoritmos Adicionales

  • EPA (Expanding Polytope Algorithm) para información de contacto detallada
  • MPR (Minkowski Portal Refinement) como alternativa a GJK
  • Detección GPU-acelerada para escenas masivas

Tipos de Colisionadores

  • Heightmaps para terrenos
  • Compound shapes para objetos complejos
  • Soft bodies para deformaciones

Optimizaciones

  • Multithreading para broadphase paralelo
  • SIMD optimizaciones adicionales
  • GPU compute shaders para CCD masivo

📚 Referencias Técnicas

  • Real-Time Collision Detection - Christer Ericson
  • Game Physics Engine Development - Ian Millington
  • Collision Detection in Interactive 3D Environments - Gino van den Bergen

¡Disfruta construyendo mundos físicos realistas con este sistema de colisiones 3D! 🎯