2011-09-09 11 views
5

XNA è le ginocchia dell'ape ma non riesco ancora a coprire completamente le condutture dei contenuti personalizzati.Conduttura di contenuti personalizzati in XNA, come impostare manualmente le trame diffuse?

Alcuni esempi di base come l'esempio di mappa normale di MSDN mostrano come assegnare normali chiavi di mappa da dati opachi da un file .fbx alle trame di mappe normali appropriate da caricare. Non so nemmeno come sapessero quale dovrebbe essere il nome della chiave, cosa sono effettivamente i dati opachi, se è definita nel file .fbx o meno.

La cosa interessante è che non c'è il codice nella pipeline di contenuti che dice come le texture diffuse sono SET- sembra implicare che si utilizza un parametro ombra denominato "Texture" e ottengono impostare automaticamente. Ma se rinominare il parametro in qualcos'altro, i modelli vengono caricati senza trame.

Come fa implicitamente a caricare trame diffuse, e come posso, ad esempio, caricare trame diffuse da leggere con un parametro shader con nome diverso e caricare un file di trama neutro-bianco predefinito se non esiste uno?

Se è per questo, esiste un esempio di "ciao mondo" per imparare a caricare modelli personalizzati con la pipeline di contenuti?

Nota che non sto cercando di sovrascrivere i riferimenti di trama esistenti nei modelli .fbx impostando una trama nella finestra delle proprietà.

risposta

3

La prima cosa da capire è che XNA consente di creare due elementi di pipeline di contenuti personalizzati separati: uno è un importatore e l'altro è un processore.

Quando si scrive un importatore, si analizza qualsiasi file come si desidera e si memorizzano le informazioni desiderate in qualsiasi classe (oggetto) specificata. Puoi scrivere tu stesso la classe O usare certe classi all'interno di XNA. In questo modo è possibile scrivere semplicemente un importatore che preleva i dati dal proprio file e, utilizzando il ModelProcessor incorporato, lo trasforma in un oggetto di classe Modello XNA.

Ecco un esempio di un modello personalizzato importatore:

http://create.msdn.com/en-US/education/catalog/sample/custom_model_importer

Se avete bisogno di qualche altro oggetto di un modello, scrivere un processore personalizzato:

Un processore prende l'oggetto di classe specificato da l'importatore e lo converte in un'altra classe (dal momento che la stai scrivendo, qualsiasi classe e in qualsiasi modo tu specifichi). Questa classe viene utilizzata per generare un file .xnb (binario XNA), che viene letto in fase di esecuzione dal gioco. Tutto questo, quindi, viene eseguito solo durante la compilazione, nel tentativo di darti un controllo migliore dei contenuti del tuo gioco.

Questo è un buon collegamento per iniziare:

http://msdn.microsoft.com/en-us/library/bb447754(v=xnagamestudio.20).aspx

Per il vostro caso suona come non si è soddisfatti del comportamento dell'importatore di default FBX. Se questo è il caso, molto probabilmente dovresti scrivere il tuo. Molto probabilmente non è necessario scrivere il proprio processore; specificare ModelProcessor come predefinito, proprio come ha fatto il progetto nel mio primo collegamento.

+0

Grazie per questa risposta. Mi stavo chiedendo la stessa cosa dal momento che sembrava che molti degli esempi che stavo vedendo facessero solo la metà di quello che sembrava essere necessario - ora so perché. Questo mi ha fatto risparmiare un po 'di tempo per la ricerca. –

+0

Immagino che questo significhi anche acquisire familiarità con le classi base su cui si estendono le classi di importatore/processore personalizzati.Ho guardato il primo link, quell'esempio è semplice, soprattutto perché in passato ho già scritto un importatore OBJ (suppongo che il formato FBX sia la sfida). L'ho persino migliorato in modo che possa convertire qualsiasi quad in triangoli. –