# Capitolo 1: Introduzione al Progetto ## Cos'è Questo Progetto? Il **Generatore di Terreni Isometrici** è un'applicazione che crea paesaggi tridimensionali casuali visualizzati con una particolare prospettiva chiamata "isometrica". Pensa a videogiochi classici come RollerCoaster Tycoon, SimCity 2000, o Age of Empires II: tutti utilizzano questa prospettiva per mostrare il mondo di gioco. ## Cosa Fa l'Applicazione? Quando avvii il programma, vedrai: 1. **Una griglia di terreno 3D** composta da 20×20 tessere (chiamate "tile") 2. **Variazioni di altezza** che creano colline, valli e montagne 3. **Diversi colori** che rappresentano biomi (acqua, sabbia, erba, roccia, neve) 4. **Linee nere** che delimitano ogni tessera, creando un effetto griglia 5. **Una vista dall'alto** con un angolo di 45 gradi (vista isometrica) ### Interattività Puoi interagire con il terreno usando la tastiera: - **Freccia SU/GIÙ**: Zoom avanti/indietro - **Freccia SINISTRA/DESTRA**: Alza/abbassa la camera - **Tasto R**: Genera un nuovo terreno casuale - **ESC**: Chiudi l'applicazione ## A Cosa Serve? Questo progetto è: 1. **Educativo**: Impara come funziona la grafica 3D, il rendering e la generazione procedurale 2. **Base per giochi**: Può essere esteso per creare giochi strategici o simulazioni 3. **Tool artistico**: Genera paesaggi casuali per ispirazione o materiale di riferimento 4. **Esempio di codice**: Dimostra buone pratiche di programmazione e architettura ## Come Funziona (Panoramica Semplice)? Immagina di dover creare un paesaggio: ### 1. Generazione del Terreno ``` ┌─────────────────────────────────────┐ │ 1. Crea una griglia 20×20 │ │ (400 punti totali) │ │ │ │ 2. Per ogni punto, calcola │ │ un'altezza usando Perlin Noise │ │ │ │ 3. Ottieni una "mappa di altezza" │ │ (heightmap) │ └─────────────────────────────────────┘ ``` Esempio di heightmap (vista dall'alto): ``` 10 12 15 18 20 <- Altezze 8 10 13 16 18 5 7 10 13 15 3 5 8 11 13 2 3 5 8 10 ``` ### 2. Assegnazione dei Colori Ogni altezza corrisponde a un bioma: ``` Altezza 0-10 → Blu (Acqua) 🌊 Altezza 10-20 → Beige (Sabbia) 🏖️ Altezza 20-30 → Verde chiaro (Erba bassa) 🌿 Altezza 30-45 → Verde medio (Erba media) 🌲 Altezza 45-60 → Verde scuro (Erba alta) 🌳 Altezza 60-70 → Grigio (Roccia) ⛰️ Altezza 70+ → Bianco (Neve) 🏔️ ``` ### 3. Rendering 3D Il computer disegna ogni tessera come un quadrato in 3D: ``` Vista dall'alto: Vista isometrica: ┌──┬──┐ ◇──◇ │ │ │ ╱│ ╱│ ├──┼──┤ → ◇──◇ │ │ │ │ │ ╱│ ╱ └──┴──┘ ◇──◇ ``` Ogni quadrato (quad) è disegnato con: - Una **faccia superiore** (quella che vediamo) - **Facce laterali** (per mostrare l'altezza) - **Colore** basato sull'altezza - **Ombreggiatura** per dare profondità ## Risultati Visivi ### Cosa Vedrai Quando avvii l'applicazione, vedrai qualcosa del genere: ``` 🏔️ ⛰️ ⛰️ ⛰️ ⛰️ 🌲 🌲 🌳 🌲 🌲 🌿 🌿 🌿 🌿 🌿 🏖️ 🏖️ 🏖️ 🏖️ 🌊 🌊 🌊 ``` Con: - **Linee nere** che separano ogni tessera - **Ombreggiatura** sui lati delle tessere per creare profondità - **Prospettiva isometrica** che rende tutto chiaro e leggibile - **Colori vivaci** ispirati ai giochi classici ## Tecnologie Utilizzate ### Python Il linguaggio di programmazione usato per scrivere tutto il codice. ### Pygame Una libreria per creare giochi e applicazioni grafiche. Gestisce: - La finestra dell'applicazione - L'input da tastiera - Il loop principale del gioco ### PyOpenGL Le "binding" Python per OpenGL. Permette di: - Disegnare geometria 3D - Applicare illuminazione - Gestire trasformazioni 3D ### NumPy Libreria per calcoli matematici veloci, usata per: - Gestire la heightmap (array 2D) - Operazioni matematiche efficienti ### Noise (Perlin Noise) Libreria che implementa l'algoritmo Perlin Noise per: - Generare valori pseudo-casuali naturali - Creare terreni realistici ## Struttura del Progetto Il progetto è organizzato in moduli separati: ``` shader/ ├── config/ │ └── settings.py → Tutte le impostazioni ├── src/ │ ├── app.py → Applicazione principale │ ├── camera/ │ │ └── camera.py → Controllo della camera │ ├── terrain/ │ │ └── generator.py → Generazione del terreno │ └── rendering/ │ └── terrain_renderer.py → Disegno del terreno └── main.py → Punto di ingresso ``` ## Caratteristiche Principali ### ✅ Generazione Procedurale Il terreno è generato automaticamente usando algoritmi matematici. Ogni volta che premi R, ottieni un paesaggio completamente diverso! ### ✅ Configurabilità Tutto è personalizzabile tramite il file `config/settings.py`: - Dimensioni della griglia - Altezza delle montagne - Colori dei biomi - Velocità della camera - E molto altro! ### ✅ Interattività in Tempo Reale Puoi muovere la camera e rigenerare il terreno istantaneamente, senza riavviare l'applicazione. ### ✅ Codice Pulito e Modulare Il codice è organizzato in modo logico, facile da leggere e da modificare. ## Casi d'Uso ### Apprendimento - Impara la grafica 3D - Comprendi OpenGL - Studia algoritmi di generazione procedurale - Pratica l'architettura software ### Prototipazione - Crea rapidamente paesaggi per giochi - Testa diverse configurazioni di terreno - Genera mappe per progetti ### Estensione - Aggiungi personaggi o oggetti - Implementa gameplay (gioco strategico) - Crea un editor di mappe - Esporta terreni in altri formati ## Performance Il progetto è ottimizzato per: - **400 tessere** (20×20 griglia) - **60 FPS** (aggiornamenti al secondo) - **Generazione istantanea** del terreno Con hardware moderno, l'applicazione gira fluidamente anche su computer datati. ## Limitazioni Attuali Il progetto base ha alcune limitazioni: - ❌ Non c'è salvataggio/caricamento delle mappe - ❌ Non puoi modificare il terreno interattivamente - ❌ La griglia è fissa a 20×20 (modificabile nel config) - ❌ Non ci sono texture, solo colori solidi - ❌ Nessun sistema di gameplay Queste sono tutte cose che puoi aggiungere estendendo il progetto! ## Prossimi Passi Ora che sai cosa fa il progetto, nei prossimi capitoli scoprirai: - **Capitolo 2**: Come funziona la grafica 3D in generale - **Capitolo 3**: Cos'è OpenGL e come disegna le cose - **Capitolo 4**: L'algoritmo Perlin Noise per terreni naturali - **Capitoli 5-7**: Come è implementato nel codice - **Capitolo 8**: Come personalizzare tutto ## Riepilogo 🎯 **Cosa Ricordare**: 1. Il progetto genera **terreni 3D casuali** con vista isometrica 2. Usa **Perlin Noise** per creare altezze naturali 3. I colori rappresentano **biomi diversi** (acqua, erba, montagna, neve) 4. È completamente **interattivo e configurabile** 5. È un ottimo **punto di partenza** per progetti più complessi --- **Prossimo Capitolo**: [Concetti Base di Grafica 3D →](02-concetti-base.md) [← Torna all'indice](README.md)