Wednesday, December 19, 2007

Scrivere

Uno dei problemi da affrontare, arrivati a questo punto, è la visualizzazione del nome della stella, accanto al corrispondente "pallino".
Detta così sembra una cosa piuttosto banale, si tratta pur sempre dell'antichissimo "print", ma quando si lavora in 3D nulla è scontato.
Inanzitutto cosa usare? Sprites? Qualche altra funzione che ancora non conosco?
Per ora ho intrapreso la strada degli sprites, che però si stanno dimostrando inaspettatamente avidi di risorse. O sbaglio qualcosa io oppure, un pc che comunque riesce a far girare bene half life 2, entra in crisi non appena il numero di sprites super qualche centinaio. Ci dovrò studiare: siamo d'accordo che comunque il tutto viaggia ancora abbondantemente sopra i 100fps (la soglia di allarme e' a 30 fps), ma si tratta pur sempre di linee e pallini, non di Crysis.
In ogni caso, una volta scelta la strada degli sprites rimane un secondo problema: gli sprites lavorano in 3D, hanno la loro brava terna x,y,z, e subiscono il comportamento di tutti gli oggetti tridimensionali, in particolare uno sprites lontano apparirà piccolo, mentre uno sprite vicino sarà molto piu' grande.
Ora, se questo va bene per i pallini, non va affatto bene per le scritte. Probabilmente avere una stella vicina con pallino molto grande e relativo nome stampato bello grande avrà anche un suo bel impatto drammatico, ma risulta poco pratico, anche perchè, viceversa, le stelle lontane avranno un pallino piccolo, ed un nome microscopico, di difficile lettura. E questa è una mappa, non un rendering fotorealistico.
Non va bene.. ma per fortuna directx sono corse in mio aiuto: esiste una funzione in grado di trasformare una coordinata tridimensionale in bidimensionale, ovvero dato un punto x,y,z dello spazio virtuale, mi restituisce l'ascissa e l'ordinata dello schermo ove apparirà il punto, così richiamandola per ogni stella, mi restituisce il punto esatto dello schermo dove dovrei mettere il nome corrispondete.
A sto punto diventa finalmente un banale print, o meglio un "print at", se qualcuno si ricorda il basic.

Il risultato lo potete vedere qui sotto (click sull'immagine per ingrandire). Non ho ancora implementato la generazione dei nomi delle stelle, quindi per ora tutte si chiamano allo stesso modo. Però funziona, e ruotare la mappa finalmente comincia ad essere quantomeno gradevole.

Ma 200 fps non vanno bene, occorre capire cosa si mangia tutto quel tempo.

No comments: