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.


 

Thursday, May 17, 2012

Compass

The little mesh i've used inside the radar as "compass" now works (well: it seems :) )

L'ultima volta vi ho fatto vedere come poter usare una seconda viewport per aggiungere il radar alla strumentazione di bordo.
Con oggi vi faccio vedere il radar che finalmente inizia a funzionare.
Per ora si limita ad indicare la direzione come fosse una bussola (il nord e' indicato dalla punta), il prossimo passo consisterà nel aggiungere i marker per gli altri oggetti nei pressi della nostra posizione.

Consiglio di vedere il video non dico a tutto schermo ma comunque con una buona definizione in quanto la mesh della bussola e' piuttosto piccolina e su youtube tende a notarsi poco.


Wednesday, May 9, 2012

Working on radar

It's time to working on radar.. new approach now: multiple viewport to render it.

Post un po' lungo e tecnico, ma penso sia interessante specie per chi come me si sta avventurando nel mondo del rendering 3D in tempo reale.

Terminata la mappa del settore (per ora va bene cosi'), ho deciso di reintrodurre il vecchio radar che mesi e mesi fa avevo iniziato a sviluppare.
E mi son reso conto che, complice probabilmente l'inesperienza, stavo seguendo una strada del tutto sbagliata e certamente inutilmente complicata.
Ricapitoliamo: correva l'anno 2008 quando tentavo di mettere in piedi un prototipo di radar. Allora la strada che avevo deciso di seguire era: prendo uno sprite ovoidale per dare l'illusione di una circonferenza in prospettiva, che mi rappresenta il piano ove poggia la mia astronave, ed, esattamente come avveniva con Elite/Frontier, tiro delle linee perpendicolari alla circonferenza per rappresentare la posizione degli altri oggetti rispetto alla mia astronave che sta al centro del radar.
Bene. L'idea e' anche giusta (L'ha avuta Braben, mica io ;) ), la realizzazione assolutamente no, per i seguenti motivi:

  1. un ellisse NON E' uguale ad un cerchio messo in prospettiva.
  2. dover calcolarsi per ogni oggetto la posizione relativa all'astronave e la corrispondente proiezione sul cerchio in coordinate bidimensionali e', per omaggiare quei pochissimi (se ce ne sono ancora) stranieri che leggono, "a pain in the ass".
La soluzione alla fine e' sorprendentemente più semplice di quanto pensassi: ho un motore 3D che si occupa di tutti questi impicci? Beh, perché non usarlo anche per il radar?
Quindi:

  • Con Blender mi disegno una specie di "rosa dei venti" che mi rappresenta il mio cerchio visto in precedenza. E' semplice: basta un rettangolino ed un modifier "array" col quale replico e ruoto ciascun segnaposto. Ne ho fatti 24, ma posso metterne quanti ne voglio:


  • Esporto la mesh e la importo su  Ogre3D 
  • Su Ogre3D mi creo un secondo universo, dove anziché mettere astronavi, pianeti e quant'altro, metto solo la "rosa dei venti", ed una serie di segnaposti che occupano la stessa posizione degli oggetti rispetto alla mia astronave, ovviamente scalati. Per avere la posizione relativa esistono già dei metodi "worldToLocal" e "localToWorld" che mi permettono agevolmente di ottenere la posizione 3D di un qualsiasi oggetto quando l'origine e' impostata solidale alla astronave anziché al sole.
  • Da queste posizioni tiro una riga perpendicolare al piano che contiene la rosa dei venti. E' un universo in 3d, l'operazione e' banale, non devo effettuare nessuna proiezione, basta disegnare una linea da (x,y,z) a (x,0,z)
  • Posiziono una telecamera poco dietro la rosa dei venti, un po' in alto, e la faccio puntare ovviamente verso la mesh
  • Dico a Ogre di fare il rendering di tutto cio' in un secondo viewport che con un po' di accortezza vado a posizionare proprio dentro lo spazio dedicato al radar.


Il risultato? Eccolo. Per ora c'e' solo la mesh, ma basta per darvi l'idea di quello che sara' l'effetto finale.


Alla prossima!


Tuesday, April 24, 2012

The GUI is growing...



Added tab and system map to the nav computer. Continua il lavoro sul computer di bordo. Ho incorporato (non senza faticare) la mappa del settore all'interno del computer, l'idea e' quella di usare il computer di bordo per tutte le funzioni quali mappa, inventario, comunicazioni, commercio, statistiche ecc.. Per far si' che apparisse la mappa dentro il riquadro del monitor ho dovuto utilizzare una tecnica chiamata Render to Texture, la quale permette di far si' che il risultato del rendering tridimensionale, anziche' apparire come nella finestra, finisca in una texture, che poi uso al centro della cornice del monitor che vedete, per dar vita alla scena. La mappa funziona in tempo reale, lo potete notare dal fatto che l'indicatore di posizione si sposta quando la vostra astronave si sta muovendo. Oltre alla mia posizione, a quella dei pianeti e delle stazioni, devo aggiungere anche quella delle navi comandate dalla AI, lo vedrete probabilmente nel prossimo video che pubblichero'.

Aggiornamento: il monitor mi piaceva poco, cosi' ho sistemato un po' di luce e ho messo anche il led di accensione.