Tuesday, October 28, 2008

Lord Alucard










The extra data management on a .x files is finished.
As seen some days ago, now is possible to insert a cluster of point on a mesh, give to them a special texture name: Tau Ceti will be use it not like standard triangles vertex, but, for example, as strobo light position.
In the pictures you can see the vertex drawned using blender, and the final effect on Tau Ceti, and on the video there's the aspect of the space station with the lights animated.

---

La gestione dei dati speciali nei file .x e' finalmente conclusa.
Come detto qualche giorno fa ora e' possibile inserire un gruppo di punti in una mesh e assegnar loro una texture speciale: Tau Ceti non li interpretera' come classici vertici di triangoli ma, per esempio, come posizioni delle luci stroboscopiche.
Nelle figure che ho pubblicato potete appunto vedere i vertici disegnati tramite Blender, e l'effetto finale in Tau Ceti. Il video poi altri non e' che una dimostrazione di come le luci animate appaiano nella stazione spaziale.

Friday, October 24, 2008

Christmas tree

As wrote yesterday, i'm working on mesh.. the objective is to use blender, the 3d editor, for create the objects like the space station, but also to add, easily, some points of interest that will not be drawed but used like reference instead.
For example to represent the points on a starship hull where i can attach or detach my weapons.
Or to represent the strobo lights positions on the space station.
To do this i've used a trick: when i want to add for example the strobo lights on the space station, i add a cluster of points using blender: each point represent a strobo light.
Then, i assign a special texture to the cluster and export.
When i read the data from Tau Ceti, i scan the mesh, and when i find the "special" texure, i don't draw the cluster but i read each point of it and use it to display a light on the corresponding position.
Look for this example: i've assumed that ALL the space station are made of special points.. the results looks like an christmas tree :)

---

Come vi ho detto ieri sto lavorando sulle mesh, in particolar modo sto cercando un modo comodo per aggiungere delle posizioni "speciali" all'interno degli oggetti 3D, un'insieme di coordinate che rappresentano non i soliti vertici dei triangoli ma bensi' delle posizioni da utilizzare per altri scopi. Per esempio in un'astronave i punti di aggancio nello scafo per le varie armi. Oppure nella stazione spaziale i punti nei quali devono apparire le luci stroboscopiche.
Il metodo piu' comodo e' senz'altro quello di usare blender stesso per posizionare i punti di interesse in maniera visuale mentre disegno la mesh. Il trucco sta nel assegnare poi ai punti speciali una texture particolare, anche totalmente nera, ma che mi permette poi da programma di riconoscere il gruppo di punti dal normale insieme di triangoli che compone l'oggetto.
I punti speciali non li disegno ma utilizzo le loro coordinate per attaccare le armi, visualizzare le luci stroboscopiche eccetera.

Vi lascio con un esempio: ho preso la stazione spaziale e ho provato a marcare tutti i vertici come posizione di una luce stroboscopica.
L'effetto finale e' l'albero di natale che vedete qui sotto :)


Thursday, October 23, 2008

Patience

Some issue at work, some issue at home... but i'm still working on tau ceti, on mesh support.

---

Un po' di problemi al lavoro, un po' a casa, e il tempo (ma anche la voglia) per scrivere codice e' poco.
Ma non sono fermo, sto lavorando sulle mesh, vi raccontero' appena ho qualcosa di pubblicabile

Thursday, October 9, 2008

Target reached!

Another little step for Tau Ceti, another big satisfaction for me!
Finally the autopilot is able to reach the destination!
Yesterday you've read the procedure i've used to implement the set of steps to emulate an autopilot.
Today i've finished the coding and now the starship can reach the space staton from every point of the space.
There's a lot to thing to do, (the autopilot for now is not able to avoid collisions with other object) but it's a good starting point!

--

Un altro piccolo ma importante passo per Tau Ceti, e un'altra (lasciatemelo dire) soddisfazione per me!
Ieri vi ho raccontato tutta la procedura che ho deciso di seguire per implementare l'insieme di passi necessari alla realizzazione di un pilota automatico.
Oggi finalmente ho concluso la realizzazione di questi passi e ora l'astronave e' in grado di raggiungere la stazione spaziale da qualsiasi punto dello spazio.
Ci sono ancora molte cose da fare (ad esempio far si' che vengano evitate le collisioni con altri oggetti) ma e un buon punto di partenza!

Wednesday, October 8, 2008

The autopilot is growing... now i've implemented a state machine, to manage the set of different behaviours that an autopilot must have.. If you're moving into a direction, but your orientation is different, and you want to go to a new target position, the autopilot first of all has to correct your orientation, and align it with your direction, then decelerate ship until 0, turn the ship to point the target, accelerate the ship and travel until your destination.
A state machine is pefect to manage similar situations.. there are some "states" that represents the phases of the voyage, and the program promote o demote from a state to another when some condition are reached.. if you're aligned with the speed position, you can be promoted to the "decelerate the ship" phase, if, during the deceleration, some error occours (i.e. round errors), the state will be demote to the "align the ship" phase, the orientation will be correct and the state will be promoted again to the "decelerate the ship" phase.
When the speed will reach 0, another promotion to "Align with target destination", and so on..

The movie you can see is a demostration of all above.

---

L'autopilota pian pianino cresce, e le complessita da gestire crescono con esso.
La procedura di navigazione da un punto all'altro dello spazio e' tutt'alto che banale, ed e' comunque suddivisibile in tante fasi che si susseguono. Per gestire le fasi ho deciso di implementare una "macchina a stati", ovvero una sorta di flow chart che in base a quel che stiamo facendo ci dice quale sara' la cosa che dovremo fare dopo.
Facciamo un esempio. Vogliamo andare in un particolare punto dello spazio, e in questo momento pero' abbiamo l'astronave che gia' si muove verso un'altra direzione, ed e' pure orientata in maniera sbagliata.
Cosa deve fare l'autopilota?
Cominciamo a dividere il problema in passi:

1) Deve inanzitutto orientare l'astronave in modo che sia allineata con la direzione che sta attualmente seguendo. (Immaginate un carro armato, mentre cammina il cannone ruota per puntare ad un nemico.. avremo quindi il carro armato che si muove verso una direzione, ed il cannone che invece ne punta un'altra.. quel che vogliamo fare e' riportare il cannone allineato in modo che punti nella stessa direzione di marcia).
2) Una volta che e' orientata, occorre fermarla. In questo caso e' semplice: basta accendere i retrorazzi e tenerli accesi fino a quando la velocita' raggiunge lo zero.
3) Da ferma, l'astronave va ruotata fino a farla puntare verso la direzione della destinazione
4) Una volta puntata, si accelera e si inizia il viaggio vero e proprio.
5) Quando si arriva a destinazione, bisogna rallentare fino a quando l'astronave si ferma.

La macchina a stati non fa altro che dirci, ad esempio "siamo nello stato 3? la rotazione e' terminata? Ok, vai nello stato 4".
La possibilita' poi di promuovere uno stato da uno stato precedente da' la possibilita' anche di "bocciare" uno stato, facendo quindi retrocedere il flow chart.
Questa possibilita' e' estremamente utile quando si devono operare correzioni di rotta dovute ad errori di arrotondamento.
Mi spiego: se io decido di puntare un obiettivo che si trova a un milione di km di distanza, per quanto io sia preciso, e' ovvio che anche un errore di pochissimi decimi di grado mi portera' a mancarlo di migliaia di km.
Con la possibilita' di "bocciare" uno stato, ad esempio, quando mi trovo nel punto 2, dove sto decelerando l'astronave, se mi accorgo che man mano che mi avvicino l'astonave si disallinea, posso dire che se l'errore supera una certa soglia, lo stato deve essere bocciato al punto 1. Quindi al punto 1 l'astronave nuovamente si riallinea con la traiettoria giusta, e riprende il punto due. Se ancora una volta dovesse col tempo disallinearsi troppo, nuovamente ritorna al punto 1, corregge lo sbandamento, e riprende la sua frenata.

Il video che segue illustra proprio i punti 1,2 e 3. Sono abbastanza evidenti le correzioni che avvengono un paio di volte, man mano che l'astronave si avvicina alla velocita' nulla.

Ci tengo a precisare che, a partire dalla prima virata che vedere (che mi serve solo a disallineare la direzione dell'astronave da quella di movimento, cosi' da mettermi nella peggiore situazione possibile) e fino alla fine del filmato, l'astronave e' totalmente pilotata dal computer.

Monday, October 6, 2008

Shopping

Just few words to annunce that i've just bought a Fraps licence, the tool that i use to make the videos you can see on Youtube.
What does it means?
That from now i'll be able to publish videos longer than 30 secs.

---

Solo due parole per annunciarvi che ho preso una licenza per Fraps, l'utility che uso per creare i video che poi pubblico su Youtube.
Questo che significa?
Che finalmente i video che pubblicherò non avranno più l'odioso limite di 30 secondi.

Wednesday, October 1, 2008

Little steps..

The pointing routine that we have seen yesterday has a beauty side effect: you can use it to point the ship to the speed direction.
With the inertial behaviour, the ship orientation is not always also the ship direction: if you point to North, and accelerate until a speed of 1000km/h, then rotate and point to West, the ship will move always to North. Now if you accelerate, you don't move in East direction, but into a new direction that will be the vectorial sum of old speed and new speed.
Again, if you're moving and you want to stop, first of all you must point to the speed direction, then decelerate until the ship stops. If you only decelerate, you'll never be able to stop!
So, for the autopilot, but also for manual navigation, it's very useful to have an "utility" that align your ship with the speed direction. And the utility is the same of the autopilot.. the autopilot "points" to a target, but the same routine can be used to align with any vector.
I've also added an indicator in the hud that shows the effective direction of the ship, so you can try to align the ship manually: first of all move the indicator to the center of the screen. Now you're aligned and you can use the retro burner to stop.

---

L'algoritmo di riallineamento che ho implementato ieri ha un gradevole effetto collaterale, ovvero puo' essere utilizzata anche per riallineare l'astronave lungo la direzione di movimento.
Nel moto inerziale non sempre (anzi quasi mai) la direzione di puntamento coincidono con quella di spostamento.
Se accelero un'astronave fino a 1000 km/h in direzione Nord, e poi la ruoto in modo che punti verso Est, questa continua comunque a spostarsi verso Nord.
Non solo: se a questo punto aziono i motori, l'astronave non si muovera' verso Ovest (non e' un'automobile), ma si spostera' lungo una direzione che e' la risultate della somma vettoriale tra la velocita' precedente ed il nuovo "impulso" verso Ovest.
Pertanto: se vi state muovendo e volete rallentarvi fino a fermarvi dovete prima di tutto orientare la nave nella direzione verso la quale si sta spostando, solo a questo punto usando i retrorazzi potrete rallentare fino allo stop completo.
In tal ottica quindi un'utilita' che permetta all'astronave di riallinearsi con la propria direzione di spostamento viene molto comoda quando si vuole semplicemente accelerare o decelerare. La routine e' la medesima dell'autopilota, quindi e' venuta pressoche' "gratis".
Ho inoltre aggiunto un indicatore nell'hud che mostra costantemente la direzione di spostamento. Con questo e' possibile eseguire l'allineamento anche manualmente.. bastera' portare l'indicatore a centro schermo e l'astronave sara' allineata.