7.5 KiB
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:
- Una griglia di terreno 3D composta da 20×20 tessere (chiamate "tile")
- Variazioni di altezza che creano colline, valli e montagne
- Diversi colori che rappresentano biomi (acqua, sabbia, erba, roccia, neve)
- Linee nere che delimitano ogni tessera, creando un effetto griglia
- 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 è:
- Educativo: Impara come funziona la grafica 3D, il rendering e la generazione procedurale
- Base per giochi: Può essere esteso per creare giochi strategici o simulazioni
- Tool artistico: Genera paesaggi casuali per ispirazione o materiale di riferimento
- 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:
- Il progetto genera terreni 3D casuali con vista isometrica
- Usa Perlin Noise per creare altezze naturali
- I colori rappresentano biomi diversi (acqua, erba, montagna, neve)
- È completamente interattivo e configurabile
- È un ottimo punto di partenza per progetti più complessi
Prossimo Capitolo: Concetti Base di Grafica 3D →