venerdì 4 febbraio 2011

OpenGL SecondProject - Texture sui modelli!

Vedere una casa tutta bianca e senza luci né ombre è certo un bel passo in avanti, ma ad ogni passo ne deve seguire un altro. Per questo ho dato ai modelli le loro texture. Anzi la loro texture. Sì, perchè un modello tridimensionale per coprirsi di colore può usare o più file o uno solo, equivalente ai "più file" opportunamente ruotati per stare tutti in un'unica immagine, e per ora ho dato ad ogni modello solo una texture.
Sono partito con l'idea di usare tutte le texture, per dare la possibilitá a modelli con texture multiple di entrare nel mondo in construzione, ma sono incappato in un problema: in un 3ds, da quello che vedo grazie alla libreria lib3ds, per ogni mesh sono elencati in array tutti i vertici e tutti i triangoli, ognuno con i 3 indici dei vertici che lo compongono e l'indice del materiale di cui è fatto. Ogni materiale ha 2 texture, e tante altre cose, come normalMaps, ecc. Le informazioni sulla posizione della texture per i vertici cono messe in un bell'array di coppie UV, il che mi fa pensare che vi sia una coppia UV per ogni vertice, peccato che se così fosse potrebbe funzionare solo con una sola texture poichè, in caso di texture multiple, ad un vertice dovrebbero corrispondere diverse coordinate UV a seconda di quale triangolo si sta considerando. Ho cercato un po' online, ma non ho trovato gran che (se qualcuno avesse trovato qualcosa mi farebbe un favore facendomelo sapere :D), così ho deciso di caricare solo la texture del primo materiale che incontro e di usarla per tutto il modello. Che poi pensandoci bene avere una texture sola per un singolo modello dovrebbe aumentare le prestazioni rispetto a dover caricare più texture. Certo si perde il vantaggio di poter riusare texture base per comporre texture più complesse (ad esempio una texture per il cemento usata su diversi modelli di edificio), ma si può ovviare a questo creando asset componibili, ovvero non modellare un edificio intero, ma le sue parti separatamente, il che porta anche il vantaggio del riutilizzo dei modelli oltre che delle texture.

Usando solo la prima texture i modelli con più texture appaiono corretti solo nelle parti originariamente coperte dalla texture usata.

il modello della casa dovrebe avere anche altre texture...

Mentre modelli con una sola texture appaiono corretti al cento percento!

il modell del carretto ha una sola texture, quindi è visualizzato correttamente

Implementando questa nuova caratteristica di base ho anche introdotto un gestore di texture, ceh permette di non caricare più volte una stessa texture. Ho scelto di implementarlo con metodi statici, invece di ricorrere ad una variabile globale, ma si può sempre cambiare.

Per caricare le texture dei modelli nella loro cartella ho incluso la libreria Boost FileSystem, perfettamente portabile, per poter usare la cartella del modello come base per il path della sua texture.

Dovrò poi capire come usare normal-maps, reflection-maps e compagnia bella.
Per qualsiasi cosa commentate!

Nessun commento:

Posta un commento

Related Posts Plugin for WordPress, Blogger...