- 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>
178 lines
5.6 KiB
Markdown
178 lines
5.6 KiB
Markdown
# 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)
|
|
```bash
|
|
# Usando vcpkg o compilar desde fuente
|
|
vcpkg install sdl3
|
|
```
|
|
|
|
#### Linux
|
|
```bash
|
|
# Ubuntu/Debian
|
|
sudo apt install libsdl3-dev
|
|
# Arch Linux
|
|
sudo pacman -S sdl3
|
|
```
|
|
|
|
#### macOS
|
|
```bash
|
|
brew install sdl3
|
|
```
|
|
|
|
## 🚀 Compilacion
|
|
|
|
### Opcion 1: CMake (Recomendado)
|
|
```bash
|
|
mkdir build && cd build
|
|
cmake ..
|
|
make
|
|
```
|
|
|
|
### Opcion 2: Make directo
|
|
```bash
|
|
make
|
|
```
|
|
|
|
## ▶️ Ejecucion
|
|
|
|
```bash
|
|
# 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
|
|
|
|
1. **main.cpp**: Contiene el bucle principal con tres fases:
|
|
- `update()`: Actualiza la logica del juego + calculo FPS
|
|
- `checkEvents()`: Procesa eventos de entrada
|
|
- `render()`: Renderiza la escena + overlays informativos
|
|
|
|
2. **Ball**: Maneja la fisica de cada pelota individual
|
|
3. **Sprite**: Sistema de renderizado de texturas con filtro nearest neighbor
|
|
4. **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:
|
|
|
|
```cpp
|
|
// 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
|
|
|
|
1. **Sistema de timing basado en delta time**
|
|
2. **Bucle de juego desacoplado** (logica vs renderizado)
|
|
3. **Interpolacion** para renderizado suave
|
|
4. **Optimizaciones de rendimiento**
|
|
|
|
## 🛠️ 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 caracteristica'`)
|
|
4. Push a la rama (`git push origin feature/nueva-caracteristica`)
|
|
5. 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.* |