ViBe3 Physics - Simulador de Sprites con Física Avanzada

ViBe3 Physics es una demo experimental de vibe-coding que implementa físicas avanzadas con sistema de delta time independiente del framerate. Utiliza SDL3 para renderizado optimizado con batch geometry de hasta 100,000 sprites simultáneos.

El nombre refleja su propósito: ViBe (vibe-coding experimental) + Physics (nuevas físicas experimentales). La demo sirve como sandbox para probar bucles de juego con timing independiente, comportamientos emergentes (boids), figuras 3D procedurales y efectos demoscene.


🎯 Características Principales

  • Sistema delta time: Física independiente del framerate (60Hz, 75Hz, 144Hz+)
  • Batch rendering: Hasta 100,000 sprites con SDL_RenderGeometry
  • 15 temas visuales: 9 estáticos + 6 dinámicos animados (sistema de 2 páginas)
  • 9 figuras 3D: Esfera, Cubo, Helix, Torus, Cylinder, Icosahedron, Atom, Lissajous, PNG_SHAPE
  • Modo BOIDS: Comportamiento de enjambre emergente (separación, alineación, cohesión)
  • Gravedad multidireccional: UP/DOWN/LEFT/RIGHT con detección de superficie inteligente
  • 4 modos de aplicación: SANDBOX (manual), DEMO (auto completo), DEMO_LITE (auto física), LOGO (easter egg)
  • Logo periódico animado: Sistema AppLogo con 4 tipos de animación y fade dual
  • Control dinámico: V-Sync, zoom, fullscreen, escalado, sprites, escenarios
  • Parámetros CLI: Resolución, zoom, fullscreen, modo inicial configurables
  • Hot-swap de sprites: Cambio de textura dinámico sin reiniciar física
  • Transiciones LERP: Cambios de tema suaves (0.5s) sin pérdida de estado

🎮 Modos de Funcionamiento

Modos de Aplicación (AppMode)

ViBe3 Physics tiene 4 modos mutuamente excluyentes que controlan el comportamiento general:

Modo Tecla Descripción Comportamiento
SANDBOX - Modo sandbox (por defecto) Control manual completo del usuario
DEMO D Auto-play completo Aleatoriza física, temas, escenarios automáticamente
DEMO_LITE Shift+D Auto-play solo física Solo aleatoriza física (gravedad, shapes, impulso)
LOGO K Easter egg animado Muestra logo 3D con PNG_SHAPE (mín. 500 pelotas)

Notas:

  • Al entrar a DEMO/DEMO_LITE se aleatoriza el estado inicial
  • LOGO configura automáticamente: tema especial, 5000 pelotas, sprite pequeño, PNG_SHAPE
  • Presionar misma tecla vuelve a SANDBOX
  • DEMO puede saltar automáticamente a LOGO (easter egg)

Modos de Simulación (SimulationMode)

Controlan el comportamiento físico de las pelotas:

Modo Activación Descripción
PHYSICS Cursores, G, 1-8 Física normal con gravedad
SHAPE Q-O, F Figura 3D activa (atracción tipo resorte)
BOIDS C Comportamiento de enjambre emergente

Cambio automático:

  • Pulsar cursores o G → Sale de SHAPE/BOIDS a PHYSICS
  • Pulsar Q-O → Activa SHAPE y figura específica
  • Pulsar C → Toggle entre BOIDS ↔ último modo (PHYSICS o SHAPE)
  • Pulsar F → Toggle entre PHYSICS ↔ última SHAPE usada

🎹 Controles

Sistema

Tecla Acción
H Toggle debug display (FPS, V-Sync, física, gravedad, modo)
V Toggle V-Sync ON/OFF
ESC Salir del programa

Ventana y Zoom

Tecla Acción
F1 Zoom Out (reducir zoom ventana)
F2 Zoom In (aumentar zoom ventana)
F3 Toggle Fullscreen (letterbox, mantiene aspecto)
F4 Toggle Real Fullscreen (resolución nativa)
F5 Toggle escalado INTEGER/LETTERBOX/STRETCH (solo F3)

Modos de Aplicación

Tecla Acción
D Toggle DEMO Mode (auto-play completo)
Shift+D Toggle DEMO LITE Mode (auto-play solo física)
K Toggle LOGO Mode (easter egg con logo 3D)

Temas de Colores

Tecla Acción
B Ciclar temas (adelante)
Shift+B Ciclar temas (atrás)
Numpad Enter Cambiar página de temas (Página 1 ↔ Página 2)
Numpad 1-9, 0 Acceso directo al tema de la página activa
P Pausar/Reanudar animación de temas dinámicos

Sprites y Escenarios

Tecla Acción
N Cambiar sprite (tiny → small → normal → big)
1 10 pelotas
2 50 pelotas
3 100 pelotas
4 500 pelotas
5 1,000 pelotas
6 5,000 pelotas
7 10,000 pelotas
8 50,000 pelotas

Física y Gravedad

Tecla Acción
ESPACIO Impulsar todas las pelotas hacia arriba
G Toggle gravedad ON/OFF (sale de figuras SIN gravedad)
Gravedad hacia ARRIBA (sale de figuras CON gravedad)
Gravedad hacia ABAJO (sale de figuras CON gravedad)
Gravedad hacia IZQUIERDA (sale de figuras CON gravedad)
Gravedad hacia DERECHA (sale de figuras CON gravedad)

Figuras 3D

Tecla Acción
F Toggle modo PHYSICS ↔ última FIGURA activa
Q SPHERE (Esfera Fibonacci rotante)
W LISSAJOUS (Curva paramétrica 3D ondeante)
E HELIX (Espiral helicoidal)
R TORUS (Toroide/donut rotante)
T CUBE (Cubo rotante triple XYZ)
Y CYLINDER (Cilindro rotante)
U ICOSAHEDRON (Icosaedro D20)
I ATOM (Núcleo + órbitas electrónicas)
O PNG_SHAPE (Logo 3D desde PNG)
Numpad + Aumentar escala de figura (+10%)
Numpad - Reducir escala de figura (-10%)
Numpad * Reset escala a 100%
Numpad / Toggle zoom profundidad (perspectiva 3D ON/OFF)

Modo BOIDS

Tecla Acción
C Toggle BOIDS Mode (comportamiento de enjambre)

🎨 Sistema de Temas (15 Temas - 2 Páginas)

ViBe3 Physics incluye 15 temas visuales organizados en 2 páginas (9 estáticos + 1 dinámico en Página 1, 5 dinámicos en Página 2). Los temas dinámicos tienen animación de colores en tiempo real.

Controles de Temas

  • B: Ciclar entre TODOS los temas (adelante)
  • Shift+B: Ciclar entre TODOS los temas (atrás)
  • Numpad Enter: Cambiar entre Página 1 y Página 2
  • Numpad 1-9, 0: Acceso directo al tema según página activa
  • P: Pausar/reanudar animación de temas dinámicos

Página 1 (Temas Estáticos + 1 Dinámico)

Tecla Tema Tipo Descripción
Numpad 1 ATARDECER Estático Naranjas, rojos, amarillos, rosas
Numpad 2 OCÉANO Estático Azules, turquesas, blancos
Numpad 3 NEÓN Estático Cian, magenta, verde lima, amarillo vibrante
Numpad 4 BOSQUE Estático Verdes, marrones, amarillos otoño
Numpad 5 RGB Estático Círculo cromático 24 colores (fondo blanco)
Numpad 6 MONOCROMO Estático Fondo negro degradado, sprites blancos
Numpad 7 LAVANDA Estático Degradado violeta-azul, pelotas amarillo dorado
Numpad 8 CARMESÍ Estático Fondo negro-rojo, pelotas rojas uniformes
Numpad 9 ESMERALDA Estático Fondo negro-verde, pelotas verdes uniformes
Numpad 0 AMANECER Dinámico Noche → Alba → Día (loop 12s)

Página 2 (Temas Dinámicos Animados)

Tecla Tema Tipo Descripción
Numpad 1 OLAS OCEÁNICAS Dinámico Azul oscuro ↔ Turquesa (loop 8s)
Numpad 2 PULSO NEÓN Dinámico Negro ↔ Neón brillante (ping-pong 3s)
Numpad 3 FUEGO Dinámico Brasas → Llamas → Inferno (loop 10s)
Numpad 4 AURORA Dinámico Verde → Violeta → Cian (loop 14s)
Numpad 5 VOLCÁN Dinámico Ceniza → Erupción → Lava (loop 12s)
Numpad 6-9, 0 (sin asignar) - Sin función en Página 2

Características Técnicas

  • Transiciones LERP: Interpolación suave (0.5s) entre temas
  • Fondos degradados: 2 colores interpolados verticalmente
  • Paletas por tema: 8-24 colores (RGB tiene 24, resto 8)
  • Sin pérdida de estado: Mantiene física, posiciones, velocidades
  • Compatible: Con todos los modos y escenarios

🔷 Sistema de Figuras 3D (9 Figuras)

Sistema polimórfico que convierte pelotas en formas geométricas 3D proyectadas en 2D.

Figuras Disponibles

🌐 SPHERE (Tecla Q)

  • Algoritmo: Fibonacci Sphere (distribución uniforme de puntos)
  • Rotación: Dual (ejes X e Y)
  • Efecto: Esfera rotante clásica estilo demoscene

🌊 LISSAJOUS (Tecla W)

  • Algoritmo: Curva paramétrica 3D (frecuencias 3:2:1)
  • Animación: Fase oscilante + rotación global
  • Efecto: Malla ondeante compleja

🧬 HELIX (Tecla E)

  • Algoritmo: Espiral helicoidal paramétrica (3 vueltas)
  • Animación: Rotación en eje Y + fase vertical
  • Efecto: DNA/hélice rotante

🍩 TORUS (Tecla R)

  • Algoritmo: Toroide paramétrico (radio mayor + menor)
  • Rotación: Triple eje (X, Y, Z) con velocidades diferentes
  • Efecto: Donut flotante estilo demoscene

🎲 CUBE (Tecla T)

  • Distribución inteligente:
    • 1-8 pelotas: Solo vértices (8 puntos)
    • 9-26 pelotas: Vértices + caras + aristas (26 puntos)
    • 27+ pelotas: Grid volumétrico 3D uniforme
  • Rotación: Triple (X, Y, Z simultáneos)
  • Efecto: Cubo Rubik rotante

🏛️ CYLINDER (Tecla Y)

  • Algoritmo: Cilindro con tapas circulares
  • Rotación: Eje Y (spin horizontal)
  • Efecto: Columna griega rotante

⚛️ ICOSAHEDRON (Tecla U)

  • Algoritmo: Poliedro regular de 20 caras (12 vértices)
  • Geometría: Proporción áurea
  • Rotación: Triple eje caótico
  • Efecto: Dado D20 flotante

⚛️ ATOM (Tecla I)

  • Estructura: Núcleo central + 3 órbitas elípticas
  • Animación: Electrones en movimiento orbital
  • Rotación: Órbitas perpendiculares entre sí
  • Efecto: Átomo de Bohr animado

🖼️ PNG_SHAPE (Tecla O)

  • Algoritmo: Carga imagen PNG 1-bit y extrude a volumen 3D
  • Animación: Rotación "legible" (flip ocasional cada 2-4s)
  • Profundidad: 15 capas de extrusión
  • Efecto: Logo 3D con volteretas
  • Uso: Modo LOGO carga data/logo/logo.png automáticamente

Características Físicas

  • Sistema spring-damper: Transición suave con Ley de Hooke
  • Profundidad Z simulada: Color modulado (oscuro=fondo, brillante=frente)
  • Z-sorting: Painter's Algorithm para oclusión correcta
  • Zoom por profundidad: Perspectiva 3D (50%-150% según Z)
  • Escala dinámica: Control manual Numpad +/- (30%-300%)
  • Protección clipping: Límites automáticos según resolución

Parámetros Configurables (defines.h)

// Física compartida (spring-damper)
SHAPE_SPRING_K = 800.0f;          // Rigidez resorte (N/m)
SHAPE_DAMPING_BASE = 60.0f;       // Amortiguación base
SHAPE_DAMPING_NEAR = 150.0f;      // Absorción cerca del punto

// Control manual de escala
SHAPE_SCALE_MIN = 0.3f;           // Mínimo 30%
SHAPE_SCALE_MAX = 3.0f;           // Máximo 300%
SHAPE_SCALE_STEP = 0.1f;          // Incremento 10%

🐦 Modo BOIDS (Comportamiento de Enjambre)

Sistema de inteligencia de enjambre basado en 3 reglas de Reynolds:

Reglas de Comportamiento

  1. Separación: Evitar colisiones con vecinos cercanos
  2. Alineación: Seguir dirección promedio del grupo
  3. Cohesión: Moverse hacia el centro del grupo local

Características

  • Toggle: Tecla C (alterna BOIDS ↔ último modo)
  • Bordes como obstáculos: Evitan bordes de pantalla
  • Time-based: Física independiente del framerate
  • Compatible: Con temas, escenarios (1-100,000 boids)
  • Gravedad OFF: Desactiva gravedad automáticamente

Parámetros Ajustables (defines.h)

// Velocidades
BOIDS_MAX_SPEED = 200.0f;         // Velocidad máxima (px/s)
BOIDS_MAX_FORCE = 400.0f;         // Fuerza máxima (px/s²)

// Pesos de comportamiento
BOIDS_SEPARATION_WEIGHT = 1.5f;   // Peso separación
BOIDS_ALIGNMENT_WEIGHT = 1.0f;    // Peso alineación
BOIDS_COHESION_WEIGHT = 1.0f;     // Peso cohesión

// Radios de detección
BOIDS_SEPARATION_RADIUS = 25.0f;  // Radio separación (px)
BOIDS_NEIGHBOR_RADIUS = 50.0f;    // Radio vecindad (px)

🖼️ Sistema AppLogo (Logo Periódico)

Logo animado que aparece periódicamente en modos DEMO, DEMO_LITE y LOGO. No aparece en modo SANDBOX.

Características

  • Intervalo: Cada 5 segundos (configurable)
  • Duración visible: 10 segundos (configurable)
  • Animación entrada/salida: 2 segundos con fade lineal
  • 4 tipos de animación aleatoria:
    • ZOOM_ONLY: Zoom simple de 120% → 100%
    • ELASTIC_STICK: Efecto elástico tipo pegatina
    • ROTATE_SPIRAL: Rotación en espiral de 0% → 100%
    • BOUNCE_SQUASH: Rebote con squash & stretch
  • Sistema dual logo: Dos logos superpuestos con animación sincronizada
  • Retraso Logo 2: 0.25s detrás de Logo 1 (efecto echo)
  • Posición: Esquina inferior derecha con padding 10%
  • Tamaño: 40% de altura de pantalla
  • Pre-escalado: 2 versiones (base + resolución nativa) para calidad óptima

Configuración (defines.h)

APPLOGO_DISPLAY_INTERVAL = 5.0f;     // Intervalo entre apariciones (s)
APPLOGO_DISPLAY_DURATION = 10.0f;    // Duración visible (s)
APPLOGO_ANIMATION_DURATION = 2.0f;   // Duración fade entrada/salida (s)
APPLOGO_HEIGHT_PERCENT = 0.4f;       // Altura = 40% pantalla
APPLOGO_PADDING_PERCENT = 0.1f;      // Padding = 10% desde bordes
APPLOGO_LOGO2_DELAY = 0.25f;         // Retraso Logo 2 (s)

⚙️ Parámetros de Línea de Comandos

ViBe3 Physics acepta parámetros CLI para configurar resolución, zoom, fullscreen y modo inicial.

Sintaxis

vibe3_physics [opciones]

Opciones Disponibles

Parámetro Descripción Default Ejemplo
-w, --width <px> Ancho de resolución 320 -w 1920
-h, --height <px> Alto de resolución 240 -h 1080
-z, --zoom <n> Zoom de ventana 3 (auto si -w/-h) -z 2
-f, --fullscreen Fullscreen letterbox (F3) OFF -f
-F, --real-fullscreen Fullscreen nativo (F4) OFF -F
-m, --mode <mode> Modo inicial sandbox -m demo
--help Mostrar ayuda - --help

Modos Disponibles

  • sandbox: Modo manual (default)
  • demo: Auto-play completo (aleatoriza todo al iniciar)
  • demo-lite: Auto-play solo física (aleatoriza física al iniciar)
  • logo: Easter egg (configura tema, PNG_SHAPE, 5000 pelotas)

Ejemplos de Uso

# Resolución default (320x240 zoom 3)
./vibe3_physics

# 1080p en ventana 1x
./vibe3_physics -w 1920 -h 1080

# 640x480 zoom 2 (ventana 1280x960)
./vibe3_physics -w 640 -h 480 -z 2

# Fullscreen letterbox (mantiene aspecto)
./vibe3_physics -f

# Fullscreen nativo (resolución de monitor)
./vibe3_physics -F

# Iniciar directamente en modo DEMO
./vibe3_physics -m demo

# Fullscreen + modo LOGO
./vibe3_physics -F --mode logo

Validaciones

  • Ancho mínimo: 640px
  • Alto mínimo: 480px
  • Zoom automático: Si resolución > pantalla, usa default
  • Zoom máximo: Ajustado según pantalla disponible

📊 Información en Pantalla

Display Normal

  • Esquina superior derecha: Contador FPS en tiempo real (amarillo)

Debug Display (Tecla H)

Cuando se activa con H, muestra información técnica detallada:

  • Línea 1 (sup. izq.): Estado V-Sync (VSYNC ON/OFF en cian)
  • Línea 2 (sup. der.): Contador FPS (amarillo)
  • Líneas 3-5: Valores física primera pelota (magenta):
    • GRAV - Magnitud gravedad (px/s²)
    • VY - Velocidad vertical (px/s)
    • SURFACE - En superficie (YES/NO)
    • LOSS - Coeficiente rebote (0.30-0.95)
  • Línea 6: Dirección gravedad (GRAVITY UP/DOWN/LEFT/RIGHT en amarillo)
  • Línea 7: Tema activo (THEME SUNSET/OCEAN/... en amarillo claro)
  • Línea 8: Modo simulación (MODE PHYSICS/SHAPE/BOIDS en verde claro)

Notificaciones Temporales

Sistema de notificaciones superior centrado con animación slide + fade:

  • Cambio de tema: "TEMA: ATARDECER" (2s)
  • Cambio de sprite: "SPRITE: SMALL" (2s)
  • Cambio de escenario: "ESCENARIO: 5000 PELOTAS" (2s)
  • Cambio de modo: "MODO DEMO" / "MODO SANDBOX" (2s)

🏗️ Estructura del Proyecto

vibe3_physics/
├── source/
│   ├── main.cpp                    # Entry point y parseo CLI
│   ├── engine.h/cpp                # Motor principal con loop y rendering
│   ├── ball.h/cpp                  # Clase Ball - física de pelotas
│   ├── defines.h                   # Constantes y configuración global
│   ├── app_logo.h/cpp              # Sistema de logo periódico
│   ├── logo_scaler.h/cpp           # Pre-escalado de logos (stb_image_resize2)
│   ├── theme_manager.h/cpp         # Gestión de temas y transiciones LERP
│   ├── spatial_grid.h/cpp          # Grid espacial para optimización BOIDS
│   │
│   ├── boids_mgr/
│   │   └── boid_manager.h/cpp      # Gestor de comportamiento BOIDS
│   │
│   ├── input/
│   │   └── input_handler.h/cpp     # Manejo de teclado y eventos SDL
│   │
│   ├── scene/
│   │   └── scene_manager.h/cpp     # Gestión de pelotas y escenarios
│   │
│   ├── shapes/                     # Sistema polimórfico de figuras 3D
│   │   ├── shape.h                     # Interfaz abstracta Shape
│   │   ├── sphere_shape.h/cpp          # Fibonacci Sphere
│   │   ├── cube_shape.h/cpp            # Cubo rotante triple
│   │   ├── helix_shape.h/cpp           # Espiral helicoidal
│   │   ├── torus_shape.h/cpp           # Toroide/donut
│   │   ├── lissajous_shape.h/cpp       # Curva paramétrica 3D
│   │   ├── cylinder_shape.h/cpp        # Cilindro rotante
│   │   ├── icosahedron_shape.h/cpp     # Icosaedro D20
│   │   ├── atom_shape.h/cpp            # Átomo con órbitas
│   │   └── png_shape.h/cpp             # Logo 3D desde PNG
│   │
│   ├── shapes_mgr/
│   │   └── shape_manager.h/cpp     # Gestor de figuras 3D
│   │
│   ├── state/
│   │   └── state_manager.h/cpp     # Gestor de modos (DEMO/LOGO/SANDBOX)
│   │
│   ├── themes/
│   │   ├── static_theme.h/cpp      # Temas estáticos
│   │   └── dynamic_theme.h/cpp     # Temas dinámicos animados
│   │
│   ├── ui/
│   │   ├── ui_manager.h/cpp        # Gestor de UI (HUD, FPS, debug)
│   │   ├── notifier.h/cpp          # Sistema de notificaciones temporales
│   │   └── help_overlay.h/cpp      # Overlay de ayuda (no implementado)
│   │
│   └── external/                   # Utilidades externas
│       ├── sprite.h/cpp                # Renderizado de sprites
│       ├── texture.h/cpp               # Gestión de texturas (con pack)
│       ├── dbgtxt.h                    # Sistema de debug text
│       ├── mouse.h                     # Utilidades de mouse
│       ├── stb_image.h                 # Carga de imágenes (stb)
│       └── stb_image_resize2.h         # Resize de imágenes (stb)
│
├── data/                           # Recursos del juego
│   ├── balls/                          # Texturas de pelotas
│   │   ├── tiny.png                        # 4x4 píxeles
│   │   ├── small.png                       # 6x6 píxeles
│   │   ├── normal.png                      # 10x10 píxeles
│   │   └── big.png                         # 16x16 píxeles
│   ├── logo/                           # Logos para AppLogo
│   │   ├── logo.png                        # Logo principal (PNG 1-bit)
│   │   └── logo2.png                       # Logo secundario
│   └── fonts/
│       └── determination.ttf           # Fuente para texto
│
├── CMakeLists.txt                  # Configuración CMake
├── Makefile                        # Configuración Make
├── CLAUDE.md                       # Seguimiento de desarrollo
├── README.md                       # Este archivo
└── .gitignore                      # Archivos ignorados por Git

🔧 Requisitos del Sistema

  • SDL3 (Simple DirectMedia Layer 3)
  • C++20 compatible compiler (GCC 10+, Clang 12+, MSVC 2019+)
  • CMake 3.20+ o Make
  • Plataforma: Windows, Linux, macOS

Instalación de SDL3

Windows (MinGW)

# Usando vcpkg
vcpkg install sdl3

# O compilar desde fuente
git clone https://github.com/libsdl-org/SDL
cd SDL
mkdir build && cd build
cmake ..
make
sudo make install

Linux (Ubuntu/Debian)

sudo apt update
sudo apt install libsdl3-dev

# Si no está disponible, compilar desde fuente

Linux (Arch)

sudo pacman -S sdl3

macOS

brew install sdl3

🚀 Compilación

Opción 1: CMake (Recomendado)

mkdir -p build && cd build
cmake ..
cmake --build .

Opción 2: Make directo

make

▶️ Ejecución

Ejecución Basic

# Linux/macOS
./vibe3_physics

# Windows
./vibe3_physics.exe

Ejemplos con Parámetros

# 1080p fullscreen + modo DEMO
./vibe3_physics -w 1920 -h 1080 -F -m demo

# 720p zoom 2 + modo LOGO
./vibe3_physics -w 1280 -h 720 -z 2 -m logo

# Default con fullscreen letterbox
./vibe3_physics -f

📊 Detalles Técnicos

Configuración Default

  • Resolución: 320x240 píxeles (escalado x3 = 960x720 ventana)
  • Sistema de timing: Delta time independiente del framerate
  • Física: Gravedad 720 px/s², rebotes con pérdida 0.30-0.95
  • Tamaño de pelota: Dinámico (4, 6, 10, 16 según sprite)
  • V-Sync: Activado por defecto, controlable dinámicamente
  • Temas: 15 temas (9 estáticos + 6 dinámicos)
  • Figuras 3D: 9 figuras completas con física spring-damper

Arquitectura del Código

El engine sigue una arquitectura component-based con separación de responsabilidades:

  1. Engine: Bucle principal (delta time, update, events, render)
  2. SceneManager: Gestión de pelotas y escenarios
  3. ShapeManager: Gestión de figuras 3D
  4. BoidManager: Comportamiento de enjambre
  5. StateManager: Control de modos (DEMO/LOGO/SANDBOX)
  6. ThemeManager: Temas y transiciones LERP
  7. UIManager: HUD, FPS, debug, notificaciones
  8. InputHandler: Procesamiento de teclado
  9. AppLogo: Sistema de logo periódico

Sistema de Delta Time

Conversión de unidades (frame-based → time-based):

Parámetro Frame-Based Time-Based Conversión
Velocidad px/frame px/segundo ×60
Gravedad px/frame² px/segundo² ×3600 (60²)
Física Cada 16.67ms Cada delta_time Proporcional

Beneficios:

  • Velocidad consistente entre 60Hz, 75Hz, 144Hz+
  • V-Sync independiente (misma velocidad ON/OFF)
  • Física precisa y predecible
  • Escalable a cualquier framerate

Batch Rendering

Rendimiento conseguido:

  • 50,000 pelotas: >75 FPS (mejora de 750% vs rendering individual)
  • 100,000 pelotas: Fluido y jugable
  • Una sola llamada SDL_RenderGeometry por frame
  • Overhead mínimo: Acumulación de vértices e índices en vectores

🛠️ Desarrollo

Para contribuir al proyecto:

  1. Fork del repositorio
  2. Crear rama de feature (git checkout -b feature/nueva-caracteristica)
  3. Commit de cambios (git commit -am 'Añadir nueva característica')
  4. Push a la rama (git push origin feature/nueva-caracteristica)
  5. Crear Pull Request

📝 Notas Técnicas

  • Smart pointers: unique_ptr, shared_ptr para gestión de memoria
  • RAII: Para recursos SDL (window, renderer, texturas)
  • Separación de responsabilidades: Arquitectura component-based
  • Configuración multiplataforma: Windows, Linux, macOS
  • Filtro nearest neighbor: Texturas pixel-perfect
  • Sistema de métricas: FPS, V-Sync, física en tiempo real
  • Resource pack: Sistema de empaquetado de recursos (opcional)

🐛 Problemas Conocidos

Ninguno conocido. El sistema está completamente funcional con delta time, batch rendering, temas, figuras 3D, BOIDS y modos de aplicación implementados.


📸 Capturas de Pantalla

(Pendiente de añadir capturas de pantalla)


Proyecto desarrollado como base para experimentación con game loops, física en tiempo real, comportamientos emergentes y efectos demoscene usando SDL3.

ViBe3 Physics - JailDesigner 2025

Description
Simulador experimental de física avanzada con 100,000+ pelotas en tiempo real usando SDL3. Implementa delta time independiente del framerate, 5 temas visuales, zoom dinámico, fullscreen y gravedad multidireccional.
Readme 33 MiB
2025-10-25 11:05:33 +02:00
Languages
C 91.1%
C++ 8.7%
Makefile 0.2%