2010-10-27 28 views
1

Comme j'ai étudié jusqu'ici, il y a 2 façons de dessiner dans xna; en utilisant spritebatch ou en mettant des objets sur le monde 3d et ensuite utiliser une caméra pour le rendre.Comment rendre mon Texture2D animé dans le monde 3D dans XNA4.0

Actuellement, je travaille sur mon jeu 2.5D. J'utilise une mécanique qui fait que le sprite plus profond se traduit plus lentement, de sorte qu'il semble qu'il y ait vraiment de la profondeur dans le jeu. Cependant, si l'on considère les effets, c'est-à-dire le post-traitement, cela peut être un problème si je veux rendre cet effet au niveau de profondeur moyen, c'est-à-dire 0.8. Ainsi, je pense à rendre mon jeu dans le monde réel en 3D.

Cependant, depuis que j'ai cherché le moyen de mettre mon sprite et l'animer dans le monde 3d jusqu'à présent, je n'en ai pas trouvé un. (Peut-être parce que je ne connaissais pas les mots-clés corrects.) Les sujets les plus proches que j'ai trouvés sont sur PointSprite, qui est maintenant retiré de XNA4.0, donc je ne pouvais pas l'implémenter de cette façon.

Ma question est, comment pourrais-je rendre mon sprite animé (c'est-à-dire le mouvement de caractère) dans le monde 3D.

Merci, Dome

Répondre

0

L'astuce est exactement ce que vous avez fait jusqu'ici excapt au lieu d'utiliser SpriteBatch pour dessiner « directement » à l'écran, vous dessinez les images 2D sur « feuilles » plats en le monde 3d à la place (avec chaque "feuille" composée de deux triangles pour former un carré).

Je suggère de regarder les échantillons pour construire des quads, des textures et éventuellement des cibles de rendu sur le site create.msdn.com comme point de départ.

0

Nouveau dans XNA 4.0, SpriteBatch peut être utilisé avec BasicEffect.

This blog post explains it. Il fournit également un exemple de code qui imite la fonctionnalité SpriteBatch par défaut via BasicEffect - mais vous pouvez transmettre vos propres matrices pour un monde 3D. Spécifiquement: votre matrice "monde" va décrire la position du plan où les sprites sont dessinés, dans l'espace 3D. La matrice «vue» décrira la vision du monde de votre caméra. Et la matrice "projet" sera une matrice de projection 3D (probablement à partir de Matrix.CreatePerspective). À propos, le nom de l'effet que vous décrivez est "parallaxe". Ce n'est pas la même chose que la vraie 3D (et 2.5D est aussi quelque chose de différent).

Si vous souhaitez appliquer des effets uniquement à certaines couches d'une scène: Vous pouvez appliquer directement l'effet à ces images-objets en transmettant un effet avec un pixel shader à SpriteBatch.Begin. Ou si vos effets sont vraiment sont post-traitement des effets (par exemple: appliquer à l'écran entier) alors vous pouvez utiliser une render render pour rendre ce calque particulier hors écran, puis le rendre à l'écran avec votre effet .