Wednesday, May 14, 2014

Stato avanzamento lavori

Con pazienza e calma sta procedendo il porting di Tau Ceti sulla piattaforma jMonkey che, ora che sto iniziando a conoscerla, devo dire essere davvero strepitosa, e mi sento caldamente di consigliarla a chiunque abbia intenzione, per hobby o per altro, di addentrarsi nei meandri dello sviluppo di videogiochi.

Vi lascio con un breve video: tutto ciò che vedete è stato scritto in java, per ora sfrutta solo un core della cpu, e viaggia su una scheda ATI 7700 a circa 500 fps.


Friday, April 11, 2014

Galaxy Map on jMonkey

Procede l'implementazione della mappa galattica di cui l'altra volta vi ho mostrato alcuni screenshot.

Ho implementato il tutto finalmente usando le api di jMonkey e ho reso persistente l'universo. Le stelle vengono create dinamicamente, con un algoritmo pseudocasuale, ma comunque che permette di avere sempre la medesima galassia con le medesime stelle per tutti i giocatori del pianeta.

Un video:



E finalmente (spero) qualcosa che potete provare anche voi.

Scaricate questo zip, decomprimetelo dove vi pare (meglio in una cartella vuota) e lanciate il file "MyGame.jar"

Vi serve:


  • Un pc con Windows o Linux, oppure un Mac
  • Che abbiate installato Java versione 7
  • Che abbiate le OpenGL installate (con windows lo sono di default, credo anche con Mac e Linux, ma non ne son sicuro)


una volta lanciato il gioco dovrebbe apparirvi una finestra che vi fa scegliere la risoluzione: inserite le opzioni desiderate e dovrebbe apparirvi la galassia.

  • Con Q aumentate lo zoom
  • Con A diminuite lo zoom
  • Con i tasti cursore scrollate la galassia.


Non e' ottimizzato, non aspettatevi prestazioni elevate, in fondo e' una mappa e non richiede grande fluidita', ma se riesco cerchero' di migliorare magari usando le cpu extra che il vostro pc possiede.
Inoltre, scrollando troppo sicuramente il programma crasha. E' normale: non ho messo ancora i controlli.

Fatemi sapere!!!


Tuesday, March 25, 2014

Still alive!

E' passato molto dal mio ultimo post. E son cambiate tantissime cose nella mia vita e nel panorama informatico.
Ma non ho dimenticato il mio hobby.
La faccio breve: il lavoro che ho non mi da modo di dedicare il tempo che avevo prima al mio progetto. Bene da un lato, ovviamente un po' però mi spiaceva aver dovuto mettere in soffitta Tau Ceti. Sicuramente seguendo la strada di Ogre e del C++ non sarei andato da nessuna parte specie con la diminuzione del tempo libero a disposizione: ci vuol troppo impegno, troppe risorse, è già un miracolo quel che son riuscito a fare in passato.
Nel frattempo però la tecnologia è andata avanti, processori e schede video son divenuti più potenti e quindi perché doversi ostinare ad usare strumenti complessi da usare? Mi son guardato attorno e ho scoperto che esiste un motore 3D scritto in Java, completamente open source, e che ha capacità impressionanti. Si chiama jMonkeyEngine e lo trovate qui: Homepage jMonkeyEngine

Il vantaggio di usare Java rispetto a C++ è che rende estremamente più veloce lo sviluppo, non serve star li' a preoccuparsi di risorse da deallocare o cose del genere. Inoltre l'engine mette a disposizione un sacco di strumenti per importare mesh, creare interfacce utente, è persino gestita la fisica, insomma non c'è proprio paragone, con tutto rispetto del team Ogre che sta facendo comunque un ottimo lavoro.

Ad ogni modo: ho voluto ricominciare dall'aspetto procedurale dell'universo, cosa che ho sempre tralasciato troppo distratto com'ero dal 3D.
E son voluto partire dalla creazione della galassia.
Grazie a java è stata un'impresa abbastanza semplice ed ho qualcosa da farvi vedere subito.


Questa è la galassia, in tutto il suo splendore. Proviamo ad ingrandire del doppio


Raddoppiamo ancora lo zoom


La cosa interessante a sto punto è se ingrandisco ancora del doppio:


Notate?Iniziano a vedersi le singole stelle. Ancora un ingrandimento:


Morale: la galassia è formata da un numero immenso di stelle: agli ingrandimenti più bassi non è possibile distinguere le singole stelle, ma ingrandendo sempre di più siamo in grado di scorgerle.
Quante sono le stelle di questa galassia? Attualmente 508 milioni di stelle. Per l'esattezza: 508523328.
Se dovessi realmente salvare ogni singola posizione di quelle stelle mi occorrerebbero almeno 4 gigabytes. 
Invece, usando una tecnica procedurale son riuscito a fare tutto con soli  532 kilobytes. Ovvero 75 mila volte di meno di memoria occupata.
Non male. 







Tuesday, November 6, 2012

Too much work in this time, but....

...i'm here because THE MAN wants to recreate THE GAME.
Not my crap, but the real one!

Elite Dangerous

Please support Braben, he needs our help!

Thursday, July 26, 2012

More precision

Here the last version of the autopilot.. is more precise, it's error is under 1 meter but for now it doesn't work if the object to reach change position while you're approaching to it.




Eccovi un filmato che dimostra come funziona ora l'autopilota dopo tutte le elucubrazioni matematiche che ho dovuto compiere.
 Non riuscendo (per ora) ad eseguire una accelerazione ed una frenata precisa in modo che l'astronave si fermi esattamente nel punto di arrivo, ho dovuto operare per approssimazioni successive. La funzione e' piu' o meno cosi'




  1. Ferma l'astronave se si muove 
  2. Allinea l'astronave verso la destinazione 
  3. Accelera fino a quando hai compiuto meta' della distanza 
  4. Rimani a velocita' costante fino a distanza pari a velocita*(1-exp(-5*t))/3; 
  5. Rallenta fino a raggiungere una velocita' di 2 m/s: se a sto punto la distanza e' maggiore di 50 metri allora riparti da capo, altrimenti:
  6. Rvanza lentamente fino alla destinazione
  7. Rallenta fino a fermarti 




Nel video una dimostrazione: l'astronave e' molto lontana dalla stazione spaziale, voglio portarla fino all'ingresso del "tunnel". Per complicare le cose punto il muso dell'astronave in una direzione casuale ed accelero in modo da muovermi da tutt'altra parte. Puo' essere interessante qualche numerino che vedete: in alto a destra, in bianco, con la label S: viene indicata la velocita' attuale.
A destra pos x, y e z indicano la posizione attuale, state indica in quale degli stati (elencati sopra) di autopilota attualmente sta operando l'astronave, ed infine dist e' la distanza dalla destinazione.


Questo algoritmo purtroppo non funziona se l'oggetto destinazione si muove nel frattempo che l'astronave cerca di raggiungerlo. A questo devo ancora lavorare


 

Wednesday, July 25, 2012

Still Alive

I'm not dead, i'm just working hard on autopilot :)

Non sono morto, e' che sto lavorando intensamente per rendere l'autopilota preciso. Sembra una banalita' ma la semplice sequenza Allineati, Accelera, aspetta, decelera fino a fermarti e' estremamente complessa, o meglio lo e' riuscire far si' che sia sufficientemente precisa, specie quando a priori non sono noti i frames al secondo.


Se devo andare da A a B in un sistema 3D, fatta ipotesi pure che inizialmente io sia fermo, devo:


- Ruotare fino a puntare B- Accelerare diciamo fino a meta' strada- Frenare.Il primo punto l'ho realizzato e funziona bene.Anche il secondo, che e' piuttosto banale.Il difficile e' proprio il frenare. Cioe': nel caso dell'accelerazione costante, detto t il tempo che e' intercorso tra un frame all'altro la velocita' nuova e' banalmente v2=v1+a*t dove v1 era la velocita' precedente.Ma per la decelerazione? non va bene semplicemente considerare a "negativo" perche' non trattasi di frenata ma bensi' di accelerazione nel verso opposto. Una formula migliore e' v2=v1*e^(-f*t). I guai iniziano pero' non appena inizio a calcolare lo spazio di frenata con una simile equazione. integrando ottengo una formula che va bene sul continuo, il gioco pero' funziona per intervalli discreti, ovvero gli intervalli di tempo tra un frame e l'altro, e pertanto la formula matematica che ottengo mi da un risultato approssimato, tanto piu' approssimato tanto piu' gli fps sono bassi. Col rischio che su un pc buono l'algoritmo funzioni bene, su un pc obsoleto l'algoritmo addirittura non faccia a tempo a frenare.


Stay Tuned..

Wednesday, May 30, 2012

Ladies and Gentlemen....

...the radar is finished!
And is time to summarize the situation about the work in progress.. on following video you'll see the radar behaviour and the latest update i've done to the engine.

Ho finito di implementare il radar e... funziona!
Graficamente non e' un granche', ma come ben sapete ho deciso di lasciare la fase di abbellimento grafico solo al termine (se mai ci sara') dello sviluppo software.. e' inutile perderci ore a fare una bella mesh o per trovare una texture come si deve se comunque la probabilita' di finire il lavoro e' prossima allo zero. Tanto vale concentrarsi sull'engine vero e proprio, e poi, se il destino vorra', pensero' a fare fiorellini e decori.
Ad ogni modo, come anticipato la volta precedente, la realizzazione del radar e' stata fatta utilizzando un secondo "universo", dove ho riscalato di un migliaio di volte la posizione degli oggetti presenti nello spazio, dopo averne convertito la posizione da quella assoluta a quella "rispetto all'astronave".
In sostanza ogni oggetti (pianeti, stazioni, navi ecc..) e' rappresentata da un pallino giallo: il centro della bussola circolare rappresenta la vostra posizione, pertanto in base a dove vedete il pallino giallo siete in grado di capire se l'oggetto vi sta davanti, dietro, sinistra o destra.
Ma siamo in tre dimensioni, ed esiste quindi anche un "alto" e "basso". Percio' al pallino e' attaccata una gambetta, se il pallino e' sopra la gambetta vuol dire che l'oggetto vi sta sopra, viceversa se la gambetta e' sotto, l'oggetto ovviamente si trova in basso. Inoltre piu' lunga e' la gambetta e piu' e' la distanza dell'oggetto dal piano che contiene la vostra astronave.

Eccovi una breve dimostrazione che vi consiglio di vedere a tutto schermo in quanto il radar e' un po' piccolino. Ne ho approfittato anche per fare il punto della situazione, e nel filmato ho cercato di mettere un po' tutte le novita' alle quali ho lavorato ultimamente.