- Añadir contador FPS en esquina superior derecha (amarillo) - Implementar control V-Sync con tecla V (ON/OFF) - Mostrar estado V-Sync en esquina superior izquierda (cian) - Aplicar filtro nearest neighbor a texturas de texto - Crear archivo CLAUDE.md para seguimiento de desarrollo - Actualizar README.md con nueva funcionalidad y controles - Corregir codificacion de caracteres en README (eliminar simbolos extraños) - Documentar sistema de metricas en tiempo real 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
ViBe1 Delta - Simulador de Sprites con Fisica
ViBe1 Delta es un programa de demostracion que utiliza SDL3 para mostrar sprites (pelotas) rebotando en pantalla con simulacion de fisica basica. Este proyecto sirve como base para experimentar con bucles de juego, renderizado y fisica en tiempo real.
🎯 Caracteristicas Actuales
- Simulacion de fisica: Gravedad, rebotes y colisiones con perdida de energia
- Multiples escenarios: 8 configuraciones predefinidas (1 a 100,000 pelotas)
- Interactividad: Controles de teclado para modificar el comportamiento
- Renderizado eficiente: Uso de SDL3 con escalado logico
- Colores aleatorios: Cada pelota tiene un color unico generado proceduralmente
- Monitor de rendimiento: Contador FPS en tiempo real
- Control V-Sync: Activacion/desactivacion dinamica del V-Sync
🎮 Controles
| Tecla | Accion |
|---|---|
V |
Alternar V-Sync ON/OFF |
1-8 |
Cambiar numero de pelotas (1, 10, 100, 500, 1K, 10K, 50K, 100K) |
ESPACIO |
Impulsar todas las pelotas hacia arriba |
G |
Alternar direccion de la gravedad |
ESC |
Salir del programa |
📊 Informacion en Pantalla
- Esquina superior izquierda: Estado V-Sync (VSYNC: ON/OFF) en cian
- Esquina superior derecha: Contador FPS en tiempo real en amarillo
- Centro: Numero de pelotas activas en blanco (temporal)
🏗️ Estructura del Proyecto
vibe_delta/
├── source/
│ ├── main.cpp # Bucle principal y logica del juego
│ ├── ball.h/cpp # Clase Ball - logica de las pelotas
│ ├── defines.h # Constantes y configuracion
│ └── external/ # Utilidades y bibliotecas externas
│ ├── sprite.h/cpp # Clase Sprite - renderizado de texturas
│ ├── texture.h/cpp # Clase Texture - gestion de imagenes
│ ├── dbgtxt.h # Sistema de debug para texto en pantalla
│ └── stb_image.h # Biblioteca para cargar imagenes
├── resources/
│ └── ball.png # Textura de la pelota (10x10 pixeles)
├── CMakeLists.txt # Configuracion de CMake
├── Makefile # Configuracion de Make
├── CLAUDE.md # Seguimiento de desarrollo
└── .gitignore # Archivos ignorados por Git
🔧 Requisitos del Sistema
- SDL3 (Simple DirectMedia Layer 3)
- C++20 compatible compiler
- CMake 3.20+ o Make
- Plataforma: Windows, Linux, macOS
Instalacion de SDL3
Windows (MinGW)
# Usando vcpkg o compilar desde fuente
vcpkg install sdl3
Linux
# Ubuntu/Debian
sudo apt install libsdl3-dev
# Arch Linux
sudo pacman -S sdl3
macOS
brew install sdl3
🚀 Compilacion
Opcion 1: CMake (Recomendado)
mkdir build && cd build
cmake ..
make
Opcion 2: Make directo
make
▶️ Ejecucion
# Desde la raiz del proyecto
./vibe1_delta # Linux/macOS
./vibe1_delta.exe # Windows
📊 Detalles Tecnicos
Configuracion Actual
- Resolucion: 320x240 pixeles (escalado x3 = 960x720)
- FPS objetivo: 60 FPS (16.67ms por frame)
- Fisica: Gravedad constante (0.2f), rebotes con perdida de energia
- Tamaño de pelota: 10x10 pixeles
- V-Sync: Activado por defecto, controlable dinamicamente
Arquitectura del Codigo
-
main.cpp: Contiene el bucle principal con tres fases:
update(): Actualiza la logica del juego + calculo FPScheckEvents(): Procesa eventos de entradarender(): Renderiza la escena + overlays informativos
-
Ball: Maneja la fisica de cada pelota individual
-
Sprite: Sistema de renderizado de texturas con filtro nearest neighbor
-
Texture: Gestion de carga y renderizado de imagenes con filtro pixel-perfect
Problema Actual: FPS Dependiente
El sistema actual usa un bucle acoplado donde la logica y renderizado estan sincronizados a 60 FPS fijos:
// En update() - linea 236
if (SDL_GetTicks() - ticks > DEMO_SPEED) { // DEMO_SPEED = 1000/60
// Solo aqui se actualiza la fisica
}
🚧 Mejoras Planificadas
Implementacion de Delta Time
Objetivo: Separar el bucle de proceso del de renderizado usando delta time para conseguir:
- Simulacion independiente del framerate
- Mejor rendimiento en escenarios de alta carga
- Consistencia en diferentes dispositivos
- Preparacion para optimizaciones futuras
Cambios Previstos
- Sistema de timing basado en delta time
- Bucle de juego desacoplado (logica vs renderizado)
- Interpolacion para renderizado suave
- Optimizaciones de rendimiento
🛠️ Desarrollo
Para contribuir al proyecto:
- Fork del repositorio
- Crear rama de feature (
git checkout -b feature/nueva-caracteristica) - Commit de cambios (
git commit -am 'Añadir nueva caracteristica') - Push a la rama (
git push origin feature/nueva-caracteristica) - Crear Pull Request
📝 Notas Tecnicas
- El proyecto usa smart pointers (unique_ptr, shared_ptr) para gestion de memoria
- RAII para recursos SDL
- Separacion de responsabilidades entre clases
- Configuracion multiplataforma (Windows, Linux, macOS)
- Filtro nearest neighbor para texturas pixel-perfect
- Sistema de metricas en tiempo real (FPS, V-Sync)
🐛 Problemas Conocidos
- FPS drops significativos con >10,000 pelotas
- Timing dependiente del framerate (solucion en desarrollo)
- Sin interpolacion en el renderizado
Proyecto desarrollado como base para experimentacion con game loops y fisica en tiempo real usando SDL3.