Implementar modo RotoBall - Esfera 3D rotante (demoscene effect)
Añadido modo alternativo de simulación que transforma las pelotas en una esfera 3D rotante proyectada en 2D, inspirado en efectos clásicos de demoscene. ## Características Principales - **Algoritmo Fibonacci Sphere**: Distribución uniforme de puntos en esfera 3D - **Rotación dual**: Matrices de rotación en ejes X e Y simultáneos - **Profundidad Z simulada**: Color modulation según distancia (oscuro=lejos, brillante=cerca) - **Transición suave**: Interpolación de 1.5s desde física a esfera - **Sin sprites adicionales**: Usa SDL_SetTextureColorMod para profundidad - **Performance optimizado**: >60 FPS con 100,000 pelotas ## Implementación Técnica ### Nuevos Archivos/Cambios: - `defines.h`: Enum SimulationMode + constantes RotoBall (radio, velocidades, brillo) - `ball.h/cpp`: Soporte 3D (pos_3d, target_2d, depth_brightness, setters) - `engine.h/cpp`: Lógica completa RotoBall (generate, update, toggle) - `generateRotoBallSphere()`: Fibonacci sphere algorithm - `updateRotoBall()`: Rotación 3D + proyección ortográfica - `toggleRotoBallMode()`: Cambio entre PHYSICS/ROTOBALL - `README.md`: Documentación completa del modo - `CLAUDE.md`: Detalles técnicos y algoritmos ## Parámetros Configurables (defines.h) ```cpp ROTOBALL_RADIUS = 80.0f; // Radio de la esfera ROTOBALL_ROTATION_SPEED_Y = 1.5f; // Velocidad rotación eje Y (rad/s) ROTOBALL_ROTATION_SPEED_X = 0.8f; // Velocidad rotación eje X (rad/s) ROTOBALL_TRANSITION_TIME = 1.5f; // Tiempo de transición (segundos) ROTOBALL_MIN_BRIGHTNESS = 50; // Brillo mínimo fondo (0-255) ROTOBALL_MAX_BRIGHTNESS = 255; // Brillo máximo frente (0-255) ``` ## Uso - **Tecla C**: Alternar entre modo física y modo RotoBall - Compatible con todos los temas de colores - Funciona con 1-100,000 pelotas - Debug display muestra "MODE PHYSICS" o "MODE ROTOBALL" ## Performance - Batch rendering: Una sola llamada SDL_RenderGeometry - Fibonacci sphere recalculada por frame (O(n) predecible) - Color mod CPU-side sin overhead GPU - Delta time independiente del framerate 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
39
README.md
39
README.md
@@ -55,6 +55,7 @@ El nombre refleja su proposito: **ViBe** (vibe-coding experimental) + **Physics*
|
||||
| `←` | **Gravedad hacia IZQUIERDA** |
|
||||
| `→` | **Gravedad hacia DERECHA** |
|
||||
| `G` | **Alternar gravedad ON/OFF (mantiene direccion)** |
|
||||
| `C` | **🎯 MODO ROTOBALL - Alternar esfera 3D rotante (demoscene effect)** |
|
||||
|
||||
## 📊 Informacion en Pantalla
|
||||
|
||||
@@ -69,6 +70,7 @@ Cuando se activa el debug display con la tecla `H`:
|
||||
- **Esquina superior derecha**: Contador FPS en tiempo real en **amarillo**
|
||||
- **Lineas 3-5**: Valores fisica primera pelota (GRAV, VY, FLOOR) en **magenta**
|
||||
- **Linea 6**: Tema activo (THEME SUNSET/OCEAN/NEON/FOREST/RGB) en **amarillo claro**
|
||||
- **Linea 7**: Modo de simulación (MODE PHYSICS/ROTOBALL) en **verde claro**
|
||||
|
||||
## 🎨 Sistema de Temas de Colores
|
||||
|
||||
@@ -98,6 +100,43 @@ Cuando se activa el debug display con la tecla `H`:
|
||||
- **Rendimiento optimizado**: El cambio de tema solo regenera los colores, manteniendo la fisica
|
||||
- **Compatibilidad completa**: Funciona con todos los escenarios (1 a 100,000 pelotas)
|
||||
|
||||
## 🎯 Modo RotoBall - Esfera 3D Rotante
|
||||
|
||||
**Modo RotoBall** es un efecto demoscene que convierte las pelotas en una esfera 3D rotante proyectada en 2D.
|
||||
|
||||
### Características del Modo RotoBall
|
||||
|
||||
- **Algoritmo Fibonacci Sphere**: Distribución uniforme de puntos en la superficie de una esfera 3D
|
||||
- **Rotación dual**: Rotación simultánea en ejes X e Y para efecto visual dinámico
|
||||
- **Profundidad Z simulada**: Color modulado según profundidad (puntos lejanos más oscuros, cercanos más brillantes)
|
||||
- **Transición suave**: Interpolación de 1.5 segundos desde física normal a esfera 3D
|
||||
- **Sin sprites adicionales**: Usa `SDL_SetTextureColorMod` para simular profundidad
|
||||
|
||||
### Parámetros Técnicos (ajustables en defines.h)
|
||||
|
||||
```cpp
|
||||
ROTOBALL_RADIUS = 80.0f; // Radio de la esfera (píxeles)
|
||||
ROTOBALL_ROTATION_SPEED_Y = 1.5f; // Velocidad rotación eje Y (rad/s)
|
||||
ROTOBALL_ROTATION_SPEED_X = 0.8f; // Velocidad rotación eje X (rad/s)
|
||||
ROTOBALL_TRANSITION_TIME = 1.5f; // Tiempo de transición (segundos)
|
||||
ROTOBALL_MIN_BRIGHTNESS = 50; // Brillo mínimo fondo (0-255)
|
||||
ROTOBALL_MAX_BRIGHTNESS = 255; // Brillo máximo frente (0-255)
|
||||
```
|
||||
|
||||
### Cómo Funciona
|
||||
|
||||
1. **Generación**: Fibonacci sphere distribuye puntos uniformemente en esfera 3D
|
||||
2. **Rotación**: Matrices de rotación 3D aplicadas en tiempo real
|
||||
3. **Proyección**: Coordenadas 3D proyectadas a 2D (ortográfica)
|
||||
4. **Profundidad**: Componente Z normalizada controla brillo del color
|
||||
5. **Renderizado**: Batch rendering con color modulado por profundidad
|
||||
|
||||
### Activación
|
||||
|
||||
- **Tecla C**: Alternar entre modo física y modo RotoBall
|
||||
- **Compatible**: Funciona con cualquier número de pelotas (1-100,000)
|
||||
- **Temas**: Mantiene la paleta de colores del tema activo
|
||||
|
||||
## 🏗️ Estructura del Proyecto
|
||||
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user