Visualizza OpenCity.info in tedescoVisualizza OpenCity.info in franceseVisualizza OpenCity.info in italianoVisualizza OpenCity.info in inglese
OpenCity header image
NoPatent logoOpenSource logoOpenGL logoSourceForge.net logoValid CSS!Valid XHTML 1.0 Strict

Dietro le quinte

Piano di sviluppo per OpenCity 0.0.6

	Use less triangles to render water    (done)
	Improve alpha display                 (done)
	Improve culling calculation           (done)
	Remove unused OCM model               (done)
	Remove OCM code                       (done)
	Add 1 state button                    (done)
	Add new query icons                   (done)
	Improved query circle                 (done)
	Improved selection calculation        (done)
	Improved selection hot zone           (done)
	Add heightmap into the release        (done)
	Fix string save format                (done)
	Save file version check               (done)
	Fix vehicle display bug on restart    (done)
	Remove std namespace from header      (done)
	Improve OpenGL extension handling     (done)
	Remove DOS window on launch           (done)
	Simplify video setup code             (done)
	Add SDL accelerated visual            (done)
	Fix full-screen and gl-version order  (done)
	Fix full-screen resolution detection  (done)
	Improve texture class                 (done)
	Reference counting texture cache      (done)

Progettazione

Questo è il diagramma UML attuale delle classi. Tutto ciò che è in verde non è ancora stato implementato, tutte le classi in giallo sono state più o meno implementate mentre i rettangoli rosa rappresentano le interfacce. Per un più completo e aggiornato grafico UML, scarica il file UML.xmi dal repository dei sorgenti. Il diagramma è stato fatto con Umbrello, un programma Open Source per diagrammi UML che puoi scaricare qui. È da tener presente che il diagramma non è precisissimo ma può aiutare a comprendere il codice. Qui puoi trovare lo schema delle interazioni di quando avvii il programma mentre questo si riferisce a quando la classe city mostra un layer.

I diagrammi sono stati fatti per la progettazione e, giustamente, non dovrebbero esserci "const", "&" o altre parole chiave specifiche di un linguaggio. Il motivo è che inizialmente ho usato il generatore di codice built-in di Umbrello. Per ottenere un codice funzionante direttamente dal diagramma delle classi UML ho usato delle parole chiave del C++ in modo assolutamente rigoroso, in modo tale da ricordarmi come andranno implementate successivamente nel codice.

Di solito, lavoro sui diagrammi delle classi prima di scriverle nel codice e uso la Standard Template Library (STL) ovunque possibile. Comunque, in alcuni casi, la STL è troppo lenta per OpenCity e per questo preferisco il semplice array stile C ai vettori di oggetti. Nel prossimo futuro ogni classe sarà completamente documentata (emm... non l'ho ancora fatto per tutte ;-)). Siccome OpenCity è un simulatore sviluppato sotto Linux, funzionerà sulla maggior parte delle distribuzioni ma è stato scritto in modo da essere facilmente (spero) portabile ad altri sistemi operativi. Attualmente OpenCity può funzionare su Win32 senza alcun problema.

Le seguenti classi STL sono attualmente utilizzate nel codice:

std::vector std::map std::pair std::deque

3D

Ho molta poca esperienza con OpenGL e lo sto studiando on the fly. Man mano che lo sviluppo proseguirà verranno utilizzate funzioni più avanzate per velocizzare il rendering e per avere una grafica migliore. Per il momento, OpenCity usa delle primitive OpenGL basilari come:

GL_POLYGON GL_LINES GL_TRIANGLE_STRIP ...

Tutto il terreno è disegnato come un unico GL_TRIANGLE_STRIP per ottimizzarne la velocità. L'algoritmo utilizzato è veloce ma sporco. Per ulteriori informazioni puoi leggere i commenti scritti nel codice.

La vecchia versione 0.0.3beta usava il metodo della colorazione degli oggetti per selezionare i modelli. Questo metodo è descritto nell'"OpenGL Programming Guide" o "Red Book". Quando il giocatore clicca nella finestra, viene assegnata una diversa combinazione RGB ad ogni oggetto nel back-buffer, poi vengono letti i valori RGB del pixel che è sotto il cursore del mouse per determinare quale oggetto è stato selezionato dal giocatore. Questo metodo è abbastanza semplice da implementare ed è molto veloce. Per di più, siccome è usato con un controllo della profondità, non hai bisogno di preoccuparti della distanza degli oggetti perché può essere selezionato solo il più vicino. I limiti di questo metodo sono il numero di bit disponibili per pixer (32bpp) e il double-buffering, entrambi richiesti proprio per questo metodo di selezione.

Nella nuova 0.0.3stable, OpenCity usa la modalità GL_SELECT per selezionare gli oggetti, per cui le modalità video 32bpp o 24bpp non sono più richieste.

Stile di programmazione

A volte, potresti vedere "//TOKILL" nel mio codice. Come puoi facilmente indovinare il suo significato è l'opposto di "//TODO" :-D Il codice che segue un "tokill" potrebbe funzionare perfettamente ma non è più usato nella versione corrente di OpenCity e verrà "ucciso" nel prossimo futuro; è stato lasciato lì solo come riferimento. In ogni caso, il gioco non verrà rallententato perché è tutto codice commentato.

Ogni variabile è preceduta dal suo tipo, per esempio "uiCityWidth" è una variabile di tipo "unsigned int". Per ulteriori dettagli consulta il documento sul design, "OpenCity_Design.sxw", e i files "CodingStyle.*" che puoi scaricare dal repository SVN.

Altri simulatori di città

Ho cercato su Internet altri simulatori di città e ce ne sono molti, ovviamente, a partire dal famoso Simcity, dall'1 al 4 e Societies, ma anche giochi simili per Linux. Questi, contrariamente a SimCity, sono liberi e in alcuni casi anche abbandonati... eccetto tre:LinCity,PocketCity, eSimutrans.Se ti stai chidendo quali sono gli altri, questa è la lista:TheCity,TransitExecutive,FreeReign,LCitySim e SimBlob.

Mi piacerebbe prendere alcune linee di codice da LinCity-NG che è una versione aggiornata del vecchio LinCity con una nuova grafica, guarda il sito ufficiale suBerlios.

Tutti gli altri progetti sono eccezionali e mi fanno sognare un'immensa ambizione: integrare i migliori aspetti di tutti in OpenCity.

SDL OpenGL Ogre3D STL Boost xhtmlCopyright (C) by Duong Khang NGUYEN - Tutti i diritti riservati