Ieri ho sentito la necessità di conoscere gli FPS dell'applicazione che sta nascendo, così ho aggiunto un semplice contatore di FPS (semplicemente contando il tempo che passa tra un ciclo e l'altro e dividere "1 secondo" per quel tempo, niente medie o cose simili per ora). Unico problema: come visualizzare gli FPS? Stampandoli sullo schermo, sì, ok, ma OpenGL e SDL non ci sanno alcun supporto per la stampa di testo (GLUT ha qualcosa di essenziale, ma lavorando per un gioco non si può usare GLUT :D ), quindi bisogna provvedere da sè o trovare qualche libreria. Qualche libreria c'è, come google vi potrà mostrare, ma questa volta ho preferito fare da solo. Ho ricevuto un grande aiuto dal codice di Lugaru, dal quale ho preso l'idea di usare le liste di OpenGL (praticamente una serie di azioni memorizzata e associata ad un Id, richiamabile a necessità) e una texture per i caratteri (praticamente tutto il necessario :D).
Oh, guarda! "Texture"! Bisogna aggiungere il caricamento delle texture! FreeImage, la conoscete? È una famosa libreria che permette di leggere e scrivere immagini in tantissimi formati rilasciata con due licenze: GNU GPL e FIPL. La seconda è quella che mi interessa: ne permette l'uso a fini commerciali.
Per riuscire a caricare correttamente le immagini ho perso un sacco di tempo. Per memorizzare delle texture con OpenGL serve un array contenente i dati di tutti i pixel, in questo caso texel. Per capire come ottenere il suddetto array ci ho messo un po'; la luce mi è stata portata da questo tutorial. inizialmente ho usato il wrapper a oggetti FreeImagePlus, ma seguendo il tutorial, che non ne fa uso, ho capito come usare la libreria classica e lo ho abbandonato.
Per i primi test ho fatto un'immagine con GIMP e la penna del mio TabletPC alla veloce, quindi alcuni caratteri escono un po' dal loro riquadro e fanno capolino in quello di qualcun altro (vedi lo spazio); inoltre sono a risoluzione molto bassa. Ho scoperto che posso usare l'UbuntuFont e credo che farò una texture con quello, dato che lo trovo fantastico. Ora i due quadrati hanno una texture!
Quello grande ha una texture rettangolare (scelta rettangolare per vedere come si comportava): una foto che ho fatto ad un concerto degli Ulver.
Quello piccolo porta su di sé la texture del font.
Ho aggiunto il test sullo Z-buffer e sull'alpha per poter "non-vedere" correttamente gli oggetti coperti da altri e per avere la trasparenza con la texture del font. Una delle cose che ho aggiunto ha portato un bug, che è lo stesso che ho in Minecraft, e per questo credo potrebbe essere causato dalla mia scheda grafica: da certi poligoni partono triangoli con un vertice al punto di fuga. Credo accada solo con poligoni senza texture. Vedrò di indagare.
Ho fatto anche qualche ricerca sulle proporzioni del campo visivo umano, per avere una visione il più possibile completa e realistica, e ho scoperto che abbiano all'incirca un'apertura orizzontale di 160º e verticale di 120º, il che vuol dire 4/3. Sconvolgente eh? E i 16/9? non dovrebbero essere le proporzioni che più si avvicinano a quelle della nostra visuale? Beh, tutti quei gradi comprendono tutto quello che vediamo, ma se consideriamo la zona ad alta risoluzione ecco che i 4/3 scompaiono e compare una zona ellissoidale, più simile ai 16/9, anche se la zona con massima risoluzione è in realtà di circa 2º (º-º poco, no?). Pero ora le immagini che vedete sono 640*480(4/3) e con un FOV orizzontale di 120º. Avrò tempo per riflettere su questi aspetti.
Non ho postato codice, ma se avete dubbi o curiosità, anche non relative al codice, non esitate a commentare e chiedere!
mercoledì 2 febbraio 2011
OpenGL SecondProject - Texture!
Etichette:
font,
FOV,
game development,
informatica,
linux,
mac,
OpenGL SecondProject,
pc,
testo in OpenGL,
textures,
visuale umana
Iscriviti a:
Commenti sul post (Atom)
Nessun commento:
Posta un commento