Implementar sistema polimórfico de figuras 3D (Sphere + Cube)
- Crear interfaz abstracta Shape con métodos virtuales - Refactorizar RotoBall → SphereShape (clase polimórfica) - Implementar CubeShape con triple rotación (X/Y/Z) - Distribución inteligente en cubo: vértices/centros/grid 3D - Cambiar controles: F=toggle, Q/W/E/R/T/Y/U/I=figuras, B=temas - Actualizar SimulationMode: ROTOBALL → SHAPE - Añadir enum ShapeType (8 figuras: Sphere/Cube/Helix/Torus/etc.) - Incluir source/shapes/*.cpp en CMakeLists.txt - Física compartida escalable entre todas las figuras - Roadmap: 6 figuras pendientes (Helix/Torus/Wave/Cylinder/Icosahedron/Atom) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <SDL3/SDL_stdinc.h> // for Uint64
|
||||
|
||||
// Configuración de ventana y pantalla
|
||||
constexpr char WINDOW_CAPTION[] = "vibe3_physics";
|
||||
|
||||
@@ -58,10 +60,23 @@ enum class ColorTheme {
|
||||
RGB = 4 // RGB puros y subdivisiones matemáticas (fondo blanco)
|
||||
};
|
||||
|
||||
// Enum para tipo de figura 3D
|
||||
enum class ShapeType {
|
||||
NONE, // Sin figura (modo física pura)
|
||||
SPHERE, // Esfera Fibonacci (antiguo RotoBall)
|
||||
CUBE, // Cubo rotante
|
||||
HELIX, // Espiral 3D (futuro)
|
||||
TORUS, // Toroide/donut (futuro)
|
||||
WAVE_GRID, // Malla ondeante (futuro)
|
||||
CYLINDER, // Cilindro rotante (futuro)
|
||||
ICOSAHEDRON, // Icosaedro D20 (futuro)
|
||||
ATOM // Átomo con órbitas (futuro)
|
||||
};
|
||||
|
||||
// Enum para modo de simulación
|
||||
enum class SimulationMode {
|
||||
PHYSICS, // Modo física normal con gravedad
|
||||
ROTOBALL // Modo esfera 3D rotante (demoscene effect)
|
||||
SHAPE // Modo figura 3D (Shape polimórfico)
|
||||
};
|
||||
|
||||
// Configuración de RotoBall (esfera 3D rotante)
|
||||
@@ -72,11 +87,17 @@ constexpr float ROTOBALL_TRANSITION_TIME = 1.5f; // Tiempo de transición (seg
|
||||
constexpr int ROTOBALL_MIN_BRIGHTNESS = 50; // Brillo mínimo (fondo, 0-255)
|
||||
constexpr int ROTOBALL_MAX_BRIGHTNESS = 255; // Brillo máximo (frente, 0-255)
|
||||
|
||||
// Física de atracción RotoBall (sistema de resorte)
|
||||
// Física de atracción para figuras 3D (sistema de resorte compartido)
|
||||
constexpr float ROTOBALL_SPRING_K = 300.0f; // Constante de rigidez del resorte (N/m)
|
||||
constexpr float ROTOBALL_DAMPING_BASE = 35.0f; // Amortiguación base (amortiguamiento crítico ≈ 2*√k*m)
|
||||
constexpr float ROTOBALL_DAMPING_NEAR = 80.0f; // Amortiguación cerca del punto (absorción rápida)
|
||||
constexpr float ROTOBALL_NEAR_THRESHOLD = 5.0f; // Distancia "cerca" en píxeles
|
||||
constexpr float ROTOBALL_MAX_FORCE = 1000.0f; // Fuerza máxima aplicable (evita explosiones)
|
||||
|
||||
// Configuración del Cubo (cubo 3D rotante)
|
||||
constexpr float CUBE_SIZE_FACTOR = 0.25f; // Tamaño como proporción de altura (60/240 = 0.25)
|
||||
constexpr float CUBE_ROTATION_SPEED_X = 0.5f; // Velocidad rotación eje X (rad/s)
|
||||
constexpr float CUBE_ROTATION_SPEED_Y = 0.7f; // Velocidad rotación eje Y (rad/s)
|
||||
constexpr float CUBE_ROTATION_SPEED_Z = 0.3f; // Velocidad rotación eje Z (rad/s)
|
||||
|
||||
constexpr float PI = 3.14159265358979323846f; // Constante PI
|
||||
Reference in New Issue
Block a user