Progetto OpenGL |
Home | Intro | Requisiti Tecnici | Moduli C | Screenshot | Development | To-Do |[ DOWNLOAD ]| Tutorial | Links |
GeoWorld current build : 2.0 |
Il
seguente programma OpenGL era stato sviluppato da me in più di 2 mesi (Aprile -
Giugno 2004) come progetto di Grafica (CdL in Informatica). Successivamente ho esteso
il progetto, usandolo come "laboratorio" di sperimentazioni OpenGL, ed è tuttora in fase di sviluppo.
Si tratta di un generatore casuale di terreni Real-Time con Triangolazione Brute-Force, limitato ad una porzione dello spazio 3D. La scena è quindi sempre diversa, grazie ad un motore random (congruente moltiplicativo) combinato ad alcune funzioni trigonometriche e noise interpolation per rendere al meglio la naturalezza e la geologia del terreno.
Il programma prevede alcuni files di ingresso che inizializzano vari stati OpenGL prima dell'esecuzione dello stesso e alcune variabili globali. Una volta lanciato GeoWorld, la window corrente grazie ad alcune funzioni GLUT, catturerà eventi da tastiera e un click destro del mouse su un punto qualunque della finestra mostrerà un menu con diverse opzioni nidificate.
Con la tastiera è possibile generare alterazioni ("perturbations") random al terreno corrente, per poi effettuare solitamente un "rebuild" dell'intero terreno aggiornando le normali, la colorazione dei vertici, Shadow Casting, Deposition Maps, ecc... sia singolarmente sia in maniera completa (tasto 'F1').
NOTA : Tutte le immagini qui presenti non sono renderizzate ma sono state prese in TEMPO REALE da GeoWorld mentre è in esecuzione (con la camera in movimento) e non hanno subito alcuna miglioria o ritocchi di alcun tipo. |
|||
LAST SCREENSHOTS!! | |||
![]() |
![]() |
![]() |
![]() |
Immagine che esprime molto del potenziale di GeoWorld-Gold (400x400 : 320.000 triangles). Qui è stato applicato un filtro "Canyon" in fase sperimentale. | GeoWorld 2.0: Un terreno modificato nella nuova modalità di Editing. Si nota lo Sky-Environment. | Un altro piccolo esempio di come può essere utilizzato il tool di Editing diretto in gw2.0. | Immagine che mostra in pieno vari effetti di fog e sky environment. Applicato nuovo filtro sperimentale di adattamento poligoni. |
![]() |
![]() |
![]() |
|
Test di Auto-Adattamento Textures su un ambiente nevoso. | Testing del Magnetic Poly-Adaption: i vertici dei poligoni si "spostano" per cercare di aumentare il dettaglio... | Vari mix di parametri con aggiunta di alcune Deposition Map | |
ALTRI SCREENSHOTS (versioni 1.8 / 1.85 / 1.9) | |||
![]() |
![]() |
![]() |
![]() |
Esempio di mix di vari parametri di ambiente con vari script tramite caricamenti sequenziali. Applicata l'ambientazione "Sunset" alla già presente "Snowy". | Ambientazione Grass con Deposition Map dopo aver applicato al terreno un filtro generale EdRidged e poi un Perlin Noise... | Ambientazione Mars con varie Deposition Map, notare le rocce della montagna centrale. | Environment Grass: notare la trasparenza dell'acqua con texture. |
![]() |
![]() |
![]() |
![]() |
Environment "MoonLight". Si nota un nuovo filtro sperimentale di "Auto-Adattamento Texture" del terreno (ver 1.9). Dovrebbe aumentare il realismo delle textures. | Un terreno generato con Perlin Noise e poi ripetute applicazioni del Peak-Erosion filter. | Immagine molto bella, vari Peak-Erosion, Perlin e altro... | Ancora Mars, con nuova tecnica di adattamento delle textures alla luce (GeoWorld 1.9) |
![]() |
|||
Applicato Filtro "EdRidged" di mia invenzione e Filtro ripetuto di "Water Evolution" | |||
XCMODEL NURBS EXPORT (NEW) | |||
![]() |
![]() |
||
Una tra le prime immagini generate da XCrayt (Sistema XCmodel) che mostra il nuovo modulo di GeoWorld per esportare il terreno in superficie NURBS, in formato *.db (tasto F9). Per renderizzare questa scena qui sopra la superficie generata da GeoWorld è terrain.db :
|
Un altro terreno generato da GeoWorld visualizzato con il tool XCsurf di XCmodel.
|
![]() |
Immagine che mostra i riflessi del ghiaccio dopo aver applicato il Sunset Environment. L'interpolazione delle normali al terreno e vari effetti speculari applicati al materiale rendono alcune parti di superficie simili a NURBS, nonostante il basso numero di poligoni. Textures disattivate. |
![]() |
Vista aerea del terreno in tutto il suo "splendore": notare l'azione erosiva
dell'acqua (zone color sabbia) e le Deposition Maps. Perlin Noise + Filtri multipli di erosione acqua + Peak Erosion. Terrain Size = 400x400 (GeoWorld v1.8). |
![]() |
GeoWorld 2.0: La generazione di un terreno con Perlin Noise + vari filtri. Abilitato il terrain box (in verde). |
![]() |
Lo stesso terreno sopra. A destra la classica Height-Map in scala di grigi, a sinistra la Critical-Map che rappresenta una scala di importanza per ogni vertice (ROSSO = max, VERDE = minima). |
Il progetto è stato sviluppato inizialmente in ambiente Windows e compilato con Dev C++ ( Project File : "GeoWorld.dev" ) da cui l'eseguibile "geoworld.exe". Grazie alla adattabilità delle GLUT con vari OS e il sistema windowing ospite, il progetto è stato poi compilato sotto il sistema Linux da cui l'eseguibile "geoworld". In entrambi i casi gli eseguibili devono essere lanciati nella stessa cartella in cui sono presenti i files "gw_*.txt", altrimenti il programma potrebbe non funzionare correttamente.
|
LINUX Scaricare tutti i files contenuti nel .tar.gz nella stessa cartella e lanciare sotto X-Window "geoworld" da console.
|
WINDOWS XP Scaricare tutti i files contenuti nel .zip nella stessa cartella e lanciare "geoworld.exe".
|
GeoWorld allo stato attuale è composto da 19 moduli in linguaggio C (sono soggetti a continue modifiche e ottimizzazioni) per un totale di 6000 righe di codice, tutte rigorosamente "farina del mio sacco" (tranne "geotex.c" per gestire i files *.tga). Qui segue la lista : | |
|
|
In questo periodo GeoWorld ha subito diverse modifiche, nelle ultime versioni lo sviluppo della gestione vegetazione è rimasto fermo per sviluppare altri meccanismi più interessanti legati al terreno e altro. Ora è disponibile in 3 versioni:
Riorganizzo il tutto volta per volta. Questa è la storia di sviluppo in ordine crescente :
VER 0.5 : Prima versione di GeoWorld, nata come progetto del Corso di Grafica (CDL Informatica) |
VER 1.0 : Griglia del
terreno aumentata a 200u x 200v. BackFace Culling. Aggiunta Perturbation
Magnitudo: un fattore moltiplicativo per gestire la "forza" di una
perturbation. Possibilità di aggiungere <n> Height Layers per la colorazione
dei vertici. Nuove opzioni al MENU principale (RMB). ImportScriptMenu (LMB)
totalmente personalizzato dall'utente ("importree.txt") per l'esecuzione di
script definiti dall'utente (lista di comandi sequenziali in un file
testuale parsato da GeoWorld). Personalizzazione di diffuse, ambient e
specular di terreno, acqua e vegetazione. Aggiunta perturbation di test
"NormalHill" (tasto 'y'): simile a HILL ma l'alterazione anzichè lungo l'asse Z, avviene lungo la normale del vertice (u,v) medio della regione di perturbation. Personalizzazione delle aree di crescita vegetazione. Aggiunta al menu "Show" l'opzione "show shadow-rays" che mostra i raggi delle ombre. |
VER 1.2 : Calcolo FPS, Ottimizzazione poligoni (ora TRIANGLE_STRIP), Shadow Casting ora preciso e ottimizzato, Perturbation ottimizzate (non più squadrate ai bordi), Deposition Maps, Funzioni di Noise Interpolation (l'utente può selezionare una WaveLength e interpolare il terreno) e Perlin Noise. |
VER 1.3 : Shadow Casting Buffer con Antialiasing (inoltre è possibile modificare il livello di Blur durante l'esecuzione), nuovi comandi di generation script, Height Filters (tra cui Ridged e altri), Filtri globali al terreno in fase di sviluppo (per il momento è presente il filtro BEACH), varie e piccole ottimizzazioni. |
VER 1.5 :
|
VER 1.6 :
|
VER 1.7 :
|
VER 1.8 :
|
VER 1.8.5
:
|
VER 1.9
:
|
VER 2.0
:
|
BUGS
Notificate alla mia mail bugs e comportamenti strani del programma ovviamente...
Ovvero cosa si dovrebbe sviluppare di GeoWorld:
- Necessita ASSOLUTAMENTE di una interfaccia grafica multi-finestra, menu a tendina, bottoni e via dicendo, senza perdere portabilità sui diversi sistemi e possibilmente usando sempre linguaggio C. |
- Esportazione/Importazione del terreno in formati *.obj e Height-Map (Es. formato *.tga). |
DOWNLOAD |
|
![]() |
(bin) GeoWorld v2.0 (WindowsXP OS) |
![]() |
(bin) GeoWorld v2.0 (Linux OS) |
ADD-ONs |
|
![]() |
TGA Textures (complete package) : Contiene textures *.tga da estrarre nella stessa cartella di GeoWorld. Senza queste GeoWorld funziona comunque, ma senza textures... |