You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

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:

  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

🎯 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 →

← Torna all'indice