Files
vibe3_physics/ROADMAP.md
Sergio Valor 0f0617066e Implementar PNG_SHAPE y sistema de física mejorado
Nuevas Características:
- PNG_SHAPE (tecla O): Logo JAILGAMES desde PNG 1-bit
  - Extrusión 2D con detección de bordes/relleno configurable
  - Rotación "legible": 90% frente, 10% volteretas aleatorias
  - 15 capas de extrusión con relleno completo (22K+ puntos 3D)
  - Fix: Z forzado a máximo cuando está de frente (brillante)
  - Excluido de DEMO/DEMO_LITE (logo especial)

- Sistema de texturas dinámicas
  - Carga automática desde data/balls/*.png
  - normal.png siempre primero, resto alfabético
  - Tecla N cicla entre todas las texturas encontradas
  - Display dinámico del nombre (uppercase)

- Física mejorada para figuras 3D
  - Constantes SHAPE separadas de ROTOBALL
  - SHAPE_SPRING_K=800 (+167% rigidez vs ROTOBALL)
  - SHAPE_DAMPING_NEAR=150 (+88% absorción)
  - Pelotas mucho más "pegadas" durante rotaciones
  - applyRotoBallForce() acepta parámetros personalizados

Archivos:
- NEW: source/shapes/png_shape.{h,cpp}
- NEW: data/shapes/jailgames.png
- NEW: data/balls/{normal,small,tiny}.png
- MOD: defines.h (constantes PNG + SHAPE physics)
- MOD: engine.cpp (carga dinámica texturas + física SHAPE)
- MOD: ball.{h,cpp} (parámetros física configurables)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-04 13:26:15 +02:00

7.2 KiB

ROADMAP - ViBe3 Physics

Estado Actual

Figuras 3D (8/8 Completadas)

  • Q - SPHERE (Esfera Fibonacci)
  • W - WAVE_GRID (Malla ondeante) - ⚠️ Necesita mejora de movimiento
  • E - HELIX (Espiral helicoidal)
  • R - TORUS (Toroide/donut)
  • T - CUBE (Cubo rotante)
  • Y - CYLINDER (Cilindro) - ⚠️ Necesita rotación multi-eje
  • U - ICOSAHEDRON (Icosaedro D20)
  • I - ATOM (Núcleo + órbitas)

Temas Visuales (6/6 Completadas)

  • SUNSET (Atardecer)
  • OCEAN (Océano)
  • NEON (Neón vibrante)
  • FOREST (Bosque)
  • RGB (Círculo cromático matemático)
  • MONOCHROME (Monocromo - blanco puro)

Sistemas de Presentación

  • Transiciones LERP entre temas (0.5s suaves)
  • Carga dinámica de texturas desde data/balls/
  • Hot-swap de sprites con tecla N (cicla entre todas las texturas)
  • PNG_SHAPE (O) - Logo "JAILGAMES" con rotación legible

Mejoras de Presentación 🎨

1. Mejorar Animaciones de Figuras 3D

Descripción: Añadir movimientos más dinámicos e interesantes a algunas figuras Prioridad: Media Estimación: 1.5 horas Detalles:

CYLINDER (Y):

  • Rotación actual: Solo eje Y (spin horizontal continuo)
  • Mejora propuesta: Rotaciones multi-eje con cambios periódicos
    • Rotación principal en eje Y (como ahora)
    • Cada 3-5 segundos: tumbling en eje X o Z durante 1-2 segundos
    • Efecto visual: "dar una vuelta" sobre otro eje ocasionalmente
    • Transiciones suaves con aceleración/desaceleración

WAVE_GRID (W):

  • Rotación actual: XY girando como esfera (confuso)
  • Mejora propuesta: Vista frontal con pivoteo sutil
    • Vista principal: Paralela a pantalla (mirando de frente)
    • Movimiento: Pivoteo en centro con esquinas hacia adelante/atrás
    • Ejemplo: esquina superior-derecha se aleja (Z-), inferior-izquierda se acerca (Z+)
    • Movimiento ondulatorio sincronizado: olas + pivoteo crea efecto "océano"
    • Opcional: Rotación completa ocasional (cada 10-15s) como transición

Implementación técnica:

  • Añadir rotation_mode_ y mode_timer_ a cada shape
  • Estados: NORMAL, TRANSITION, ALTERNATIVE
  • Interpolación suave entre modos de rotación

2. Modo DEMO (Auto-play)

Descripción: Modo demostración automática con acciones aleatorias Prioridad: Alta Estado: COMPLETADO Detalles:

  • Toggle con tecla D
  • Timer que ejecuta acciones cada 3-8 segundos (configurable)
  • Acciones: gravedad, figuras, temas, escenarios, impulso, profundidad, escala, sprite
  • Secuencia pseudo-aleatoria con pesos configurables (defines.h)
  • Totalmente interactivo - usuario puede seguir usando controles
  • Indicador visual "DEMO MODE" centrado en pantalla (naranja)
  • Eliminado sistema auto-restart antiguo (ya no necesario)

3. Resolución Lógica Configurable

Descripción: Especificar resolución lógica por parámetros de línea de comandos Prioridad: Media Estimación: 1 hora Detalles:

  • Parámetros --width <px> --height <px> o -w <px> -h <px>
  • Parámetro --fullscreen o -f (opcional)
  • Defaults: 1280x720 en ventana
  • Ejemplo: ./vibe3_physics -w 1920 -h 1080 -f
  • Validación de valores (mínimo 640x480, máximo según SDL_DisplayMode)
  • Help text con -h o --help

4. 🐛 Corregir Escalado de Pelotas en Reposo

Descripción: Las pelotas cambian de tamaño cuando están quietas (bug visual) Prioridad: Alta (bug visible) Estimación: 30 minutos Detalles:

  • Síntoma: Pelotas en reposo (velocidad ≈ 0) se escalan incorrectamente
  • Posible causa:
    • Scale factor calculado desde velocidad o energía
    • División por cero o valor muy pequeño
    • Interpolación incorrecta en modo transición
  • Investigar: Ball::render(), scale calculations, depth brightness
  • Solución esperada: Tamaño constante independiente de velocidad

5. Sistema de Release

Descripción: Empaquetado para distribución standalone Prioridad: Baja Estimación: 30 minutos Detalles:

  • Crear carpeta release/
  • Script Python pack_resources.py para empaquetar
  • Incluir SDL3.dll
  • Incluir icon.png (si existe)
  • Empaquetar data/ en archivo .dat o .zip
  • Target make release en Makefile
  • README.txt con instrucciones

Futuras Mejoras (Ideas)

Performance

  • Spatial partitioning para colisiones ball-to-ball
  • Level-of-detail para 100K+ pelotas
  • GPU compute shaders para física masiva

Efectos Visuales

  • Trails (estelas de movimiento)
  • Heatmaps de velocidad/energía
  • Bloom/glow para sprites

Física Avanzada

  • Colisiones entre partículas
  • Viento (fuerza horizontal)
  • Campos magnéticos (atracción/repulsión)
  • Turbulencia

Shapes PNG

  • Voxelización 3D para PNG_SHAPE (Enfoque B)
    • Actualmente: Extrusión 2D simple (píxeles → capas Z)
    • Futuro: Voxelización real con detección de interior/exterior
    • Permite formas 3D más complejas desde imágenes
    • Rotación volumétrica en vez de extrusión plana

Interactividad

  • Mouse: click para aplicar fuerzas
  • Mouse: drag para crear campos
  • Mouse wheel: ajustar intensidad

Historial de Cambios

2025-10-04 (Sesión 5) - PNG Shape + Texturas Dinámicas

  • PNG_SHAPE implementado - Tecla O para activar logo "JAILGAMES"
  • Carga de PNG 1-bit con stb_image
  • Extrusión 2D (Enfoque A) - píxeles → capas Z
  • Detección de bordes vs relleno completo (configurable)
  • Tamaño 80% pantalla (como otras figuras)
  • Rotación "legible" - De frente con volteretas ocasionales (3-8s idle)
  • Excluido de DEMO/DEMO_LITE (logo especial)
  • Sistema de texturas dinámicas - Carga automática desde data/balls/
  • Tecla N cicla entre todas las texturas PNG encontradas
  • Orden alfabético con normal.png primero por defecto
  • Display dinámico del nombre de textura (uppercase)
  • 📝 Preparado para voxelización 3D (Enfoque B) en futuro

2025-10-04 (Sesión 4) - Modo DEMO

  • Implementado Modo DEMO (auto-play) - Tecla D para toggle
  • Sistema de acciones aleatorias cada 3-8 segundos (configurable)
  • 8 tipos de acciones con pesos de probabilidad ajustables
  • Totalmente interactivo - usuario puede seguir controlando
  • Display visual "DEMO MODE" centrado en naranja
  • Mejoras animaciones 3D: tumbling en cilindro + pivoteo en wave grid
  • Eliminado sistema auto-restart antiguo (ya no necesario)

2025-10-04 (Sesión 3)

  • Implementado tema MONOCHROME (6º tema)
  • Sistema LERP para transiciones suaves de temas (0.5s)
  • Hot-swap de sprites con tecla N (ball.png ↔ ball_small.png)
  • Tamaño dinámico de pelotas desde texture->getWidth()
  • Ajuste de posiciones inteligente al cambiar sprite
  • 📝 Añadidas mejoras propuestas para CYLINDER y WAVE_GRID

2025-10-03 (Sesión 2)

  • Implementadas 8 figuras 3D (SPHERE, WAVE_GRID, HELIX, TORUS, CUBE, CYLINDER, ICOSAHEDRON, ATOM)
  • Sistema polimórfico de shapes con herencia virtual

2025-10-02 (Sesión 1)

  • Migración desde vibe1_delta
  • Sistema de gravedad direccional (4 direcciones)
  • Coeficientes de rebote variables (0.30-0.95)
  • 5 temas de colores iniciales

Última actualización: 2025-10-04