Pipelines de contenu personnalisés dans XNA, comment définir manuellement des textures diffuses?

StackOverflow https://stackoverflow.com/questions/7365588

  •  28-10-2019
  •  | 
  •  

Question

XNA est les genoux de l'abeille, mais je ne peux toujours pas m'envelopper complètement autour des pipelines de contenu personnalisés.

Certains exemples de base comme l'exemple de carte normal de MSDN vous montrent comment affecter des clés de carte normales à partir de données opaques d'un fichier .fbx aux textures de carte normales appropriées à charger. Je ne sais même pas comment ils savaient comment nommer la clé, quelles sont les données opaques, si elles sont définies dans le fichier .fbx ou non.

Ce qui est intéressant, c'est qu'il n'y a pas de code dans le pipeline de contenu qui indique comment les textures diffuses sont définies - cela semble impliquer que vous utilisez un paramètre d'ombre nommé "Texture" et qu'elles sont automatiquement définies. Mais si je renomme le paramètre en autre chose, les modèles se chargent sans textures.

Comment sait-il implicitement charger des textures diffuses, et comment puis-je, par exemple, charger des textures diffuses à lire avec un paramètre de shader nommé différemment et charger un fichier de texture blanc neutre par défaut s'il n'en existe pas?

D'ailleurs, existe-t-il un exemple «bonjour le monde» pour apprendre à personnaliser les modèles de chargement avec le pipeline de contenu?

Notez que je ne cherche pas à remplacer les références de texture existantes dans les modèles .fbx en définissant une texture dans la fenêtre des propriétés.

Était-ce utile?

La solution

La première chose à comprendre est que XNA permet de créer deux éléments de pipeline de contenu personnalisés distincts: l'un est un importateur et l'autre est un processeur.

Lorsque vous écrivez un importateur, vous analysez n'importe quel fichier comme vous le souhaitez et stockez les informations souhaitées dans n'importe quelle classe (objet) que vous spécifiez. Vous pouvez écrire la classe vous-même OU utiliser certaines classes dans XNA. De cette façon, vous pouvez simplement écrire un importateur qui prend les données de votre fichier et, en utilisant le ModelProcessor intégré, en fait un objet de classe XNA Model.

Voici un exemple d'importateur de modèle personnalisé:

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

Si vous avez besoin d'un autre objet qu'un modèle, écrivez un processeur personnalisé:

Un processeur prend l'objet de classe spécifié par l'importateur et le convertit en une autre classe (puisque vous l'écrivez, n'importe quelle classe et de la manière que vous spécifiez). Cette classe est utilisée pour générer un fichier .xnb (binaire XNA), qui est lu à l'exécution par votre jeu. Tout cela, par conséquent, n'est exécuté que pendant la compilation, dans le but de vous donner un meilleur contrôle du contenu de votre jeu.

Voici un bon lien pour commencer:

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

Dans votre cas, il semble que vous n'êtes pas satisfait du comportement de l'importateur FBX par défaut. Si tel est le cas, vous devrez probablement écrire le vôtre. Vous n'avez probablement pas besoin d'écrire votre propre processeur. spécifiez ModelProcessor par défaut, tout comme le projet dans mon premier lien l'a fait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top