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.
- 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
- 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
- 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
- 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
- Conservative Advancement para objetos rápidos
- Swept Volume Testing para trayectorias complejas
- Time of Impact (TOI) preciso
- Prevención de tunneling automática
- Ray vs Sphere optimizado
- Ray vs AABB con normales precisas
- Ray vs OBB para objetos rotados
- Múltiples hits con ordenamiento por distancia
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
- Detección de colisiones entre jugadores y entorno
- Sistema de proyectiles con trayectorias precisas
- Interacciones físicas realistas
- Simulaciones de partículas
- Dinámica de fluidos discreta
- Modelado de sistemas mecánicos
- Planificación de rutas sin colisiones
- Detección de obstáculos en tiempo real
- Simulación de movimientos roboticos
- Compilador Jai (versión beta o superior)
- Sistema operativo: Windows, Linux, macOS
# Compilar ejemplo principal
jai collision_3d_example.jai
# Compilar pruebas específicas
jai test_performance.jai
jai test_shapes.jai
jai test_broadphase.jai#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);
}- 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
- 10,000 objetos estáticos: ~2ms por frame
- 1,000 objetos dinámicos: ~8ms por frame
- Raycast contra 5,000 objetos: ~0.1ms
Pruebas exhaustivas de todos los tipos de colisionadores:
- Precisión de detección
- Casos extremos (objetos muy pequeños/grandes)
- Transformaciones complejas
Benchmarks de rendimiento:
- Stress test con miles de objetos
- Comparación de algoritmos broadphase
- Medición de memory usage
Validación de sistemas de optimización espacial:
- Correctitud de BVH dinámico
- Eficiencia de Octree
- Escalabilidad de Spatial Hash
Pruebas de detección continua:
- Objetos a alta velocidad
- Prevención de tunneling
- Precisión temporal
Validación del sistema físico:
- Conservación de energía
- Estabilidad numérica
- Realismo de interacciones
// Ver: test_billiards.jai
// Simula bolas de billar con física realista// Ver: test_particles.jai
// Miles de partículas interactuando// Ver: test_destruction.jai
// Fractura dinámica de objetosworld.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// 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 uniformeworld.collision_world.use_continuous_detection = true;
// Automáticamente activa CCD para objetos rápidos| Escenario | Objetos | Broadphase | CCD | Iterations |
|---|---|---|---|---|
| Juego 2D/3D Simple | < 100 | BVH | No | 4 |
| Simulación Media | 100-1000 | BVH + Octree | Sí | 6 |
| Simulación Masiva | > 1000 | Spatial Hash | Sí | 8 |
- Visualización de AABBs para debugging
- Contadores de rendimiento integrados
- Logs detallados de colisiones
- Validación de integridad del BVH
// 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);Este sistema está diseñado para ser extensible. Áreas de mejora:
- 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
- Heightmaps para terrenos
- Compound shapes para objetos complejos
- Soft bodies para deformaciones
- Multithreading para broadphase paralelo
- SIMD optimizaciones adicionales
- GPU compute shaders para CCD masivo
- 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! 🎯