Friday, January 11, 2008

Unità di misura

Periodo di cambiamento professionale, come accennato. Passaggi di consegne ed altre scocciature, il tempo per star dietro a Tau Ceti è e sarà poco, purtroppo. Oggi ad esempio in ufficio fino alle 22
Ma non mi pagano per sviluppare videogames quindi pazienza :)
Nel tempo che riesco a ritagliarmi comunque le cose vanno avanti. Una volta riuscito a visualizzare oggetti dotati di texture e propriamente illuminati, è arrivato il tempo di dedicarsi all'unita' di misura.
Directx, come le altre librerie, definiscono un mondo virtuale, dotato ovviamente di un sistema di coordinate, che e' privo di unità di misura. Posso disegnare una sfera alle coordinate (1,2,3), ma non c'e' scritto da nessuna parte che quel punto vada inteso come 1,2,3 millimetri o anni luce.
Va quindi definita una scala, devo decidere quel (1,2,3) come va inteso.
Per decidere ho scelto il nostro sistema solare come riferimento.
La distanza tra il Sole e Plutone è di quasi 40 unità astronomiche.
1 au = 149 597 870,691 chilometri.
Potrei prendere quindi l'au come scala, ma se questa va bene per rappresentare con numeri ragionevoli le distanze tra i pianeti, va molto meno bene per rappresentarne la dimensione.
Prendiamo ad esempio la terra. Ha un raggio di meno di 7.000 km, ovvero dovrei dire a directx di disegnarmi una sfera di raggio = 0,0000047 au, e in virgola mobile usare numeri così piccoli può essere pericoloso quando si devono fare operazioni di precisione, c'è il rischio che si verificano brutti errori di arrotondamento.
Del resto nemmeno utilizzare come unità di misura il kilometro pare essere una scelta azzeccata, visto che per il sole dovrei creare una sfera di raggio 70.000, per non parlare della posizione che avrebbe plutone, ovvero un punto avente come coordinate (5876560000,0,0).
Il compromesso che per ora ho trovato è quello di 1 directX = 10.000 km.
La terra ha raggio 0.7 circa, il sole 70, giove 7, e plutone sta a (587656,0,0), ancora parecchio, ma comunque una cifra che dovrebbe essere gestibile senza grossi problemi in float.
Semmai abbasso a 100.000 km, ma non credo vi sia la necessità.
Prima di concludere un'immagine, realizzata con la scala 10.000 km, che mette a confronto le dimensioni del sole con quelle di giove. Chiaramente per ora l'orbita è ancora del tutto inverosimile, ma le dimensioni dei due corpi celesti rispettano la realtà.
Ho aggiunto anche un abbondante dose di antialiasing, tanto a 800fps ancora me lo posso permettere :)

2 comments:

Unknown said...

Caspita!
Ma i pianeti quanti poligoni hanno? Non si alcuna imprecisione!

Non è che la prossima volta ci permetti di scaricare anche l'eseguibile? :-)

PdG said...

i due pianeti han per ora il massimo dei poligoni, son sfere con 128 longitudini e 128 latitudini, una follia,ma visto che dovevo mostrare solo loro ho esagerato :)
Per l'eseguibile volentieri, e' che ancora e' poco presentabile e richiede librerie specifiche, mi parrebbe male farvi scaricare tutto l'sdk di microsoft per 60 kb di eseguibile