IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XNA/Monogame Discussion :

Texture2D animée sur objet 3D


Sujet :

XNA/Monogame

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Texture2D animée sur objet 3D
    Bonjour,

    J'essaye de programmer une texture animée sur un objet 3d pour afficher un instrument en 3d sur un Windows Phone 7, comme une montre, dont les chiffres sont ma 1ère texture2D et l'aiguille ma deuxième texture2D.
    J'utilise pour ça 2 textures (128 X 128).

    La technique je pense c'est dans un premier temps de déclarer dans loadContent() = 3 textures 2D, mon objet 3D, un objet RenderTarget2D et un objet SpriteBatch, puis dans Draw()= j'utilise le RenderTarget2D comme buffer, j'affiche avec SpriteBatch ma première texture (=le fond de ma montre) puis je fais tourner ma deuxième texture (= l'aiguille), puis je quitte Spritebatch., je libère le Buffer et j'affiche dans ma 3 ème texture le contenu du RenderTarget 2D.

    mais ça ne marche pas !!

    la texture de mon objet ne change pas, je joins la partie du code décrit plus haut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);
     
        GraphicsDevice.SetRenderTarget(renderTarget);
     
        GraphicsDevice.Clear(Color.Transparent);
     
        spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
     
        spriteBatch.Draw(Base_Text, new Rectangle(0, 0, 128, 128),  Base_Text.Bounds, Color.White);
     
        spriteBatch.Draw(second_Text, new Rectangle(0, 0, 128, 128), second_Text.Bounds, Color.White, 0.3f, new Vector2(64, 64), SpriteEffects.None, 1);
     
        spriteBatch.End();
     
        GraphicsDevice.SetRenderTarget(null);
     
        final_Text = renderTexture;
     
        DrawModel();
     
        base.Draw(gameTime);
    }
    Je n'ai pas trouvé grand chose sur le sujet sur le Net et dans la littérature spécialisée, d'autant que s'agissant d'un dévelopement sur Windows phone je ne peux pas utiliser les Shaders.

    Je vous remercie de votre aide si vous avez une idée, bonne après midi.

    Jeangil

  2. #2
    Membre actif Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Points : 248
    Points
    248
    Par défaut
    Bonjour,

    Question peut-être hors sujet mais pourquoi ne pas séparer le dessin de chacune des textures comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
    spriteBatch.Draw(Base_Text, new Rectangle(0, 0, 128, 128), Base_Text.Bounds, Color.White);
    spriteBatch.End();
     
    spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
    spriteBatch.Draw(second_Text, new Rectangle(0, 0, 128, 128), second_Text.Bounds, Color.White, 0.3f, new Vector2(64, 64), SpriteEffects.None, 1);
    spriteBatch.End();
    Peut-être est-ce une première explication à ton problème.
    Deuxième question : je ne vois nulle part l'utilisation de gameTime pour faire tourner le sprite d'affichage de l'aiguille, est-ce normal ?

    En espérant ne pas répondre hors-sujet…

    PS : pense à utiliser la balise CODE pour écrire du code source.
    Chen norris
    C/C++, C#, Java, PHP & SQL coder
    Web developer

  3. #3
    Membre actif Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Points : 248
    Points
    248
    Par défaut
    Bonjour,

    Retour sur mon post précédent, où il est finalement tout à fait possible de lancer 2 SpriteBatch.Draw à la suite. Par contre, ayant été confronté aux rotations de sprite pour afficher des lignes 2D, je suis tombé sur ce bout de code qui fonctionne à merveille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void DrawLine(SpriteBatch sprBatch, Texture2D spr, Vector2 a, Vector2 b, Color col) {
    	Vector2 Origin = new Vector2(0.5f, 0.0f);
    	Vector2 diff =  b - a;
    	float angle;
    	Vector2 Scale = new Vector2(1.0f, diff.Length()/spr.Height);
    	angle = (float)(Math.Atan2(diff.Y, diff.X));
    	sprBatch.Draw(spr, a, null, col, angle, Origin, Scale, SpriteEffects.None, 1.0f);
    }
    À toi de l'adapter en mettant par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    angle = gameTime.ElapsedGameTime.TotalSeconds
    Pour la gestion des différentes textures, pense à les charger dans des objets Texture2D différents (s'il s'agit du même objet, possible que ton problème vienne de là).
    Chen norris
    C/C++, C#, Java, PHP & SQL coder
    Web developer

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Merci pour tes réponses j'avais un peu mis ce pb de côté, je vais me remettre dessus avec ce nouvel éclairage,
    Je te tiens au courant.
    Encore merci

    Jean-Gilbert

  5. #5
    Nouveau membre du Club Avatar de Léonard Labat
    Homme Profil pro
    Consultant .NET
    Inscrit en
    Juillet 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .NET
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2010
    Messages : 17
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Le plus simple c'est de charger une seule texture qui contient en fait les différentes images de ton animation. Ensuite, il faut faire varier les coordonnées de textures appliquées aux différentes vertex de ton objet 3D selon le status de l'animation.

    Exemple :
    Si la texture contient deux étapes de l'animation et que la forme 3D est un simple plane,
    - la première seconde les texels seront du type (0;0),(0;1),(0,5;0) et (0,5;1)
    - la deuxième seconde, on décale et les texels deviennent (0,5;0),(0,5;1),(1;0) et (1;1)

Discussions similaires

  1. [PPT-2010] Activer une animation sur un nouvel objet en cours de présentation
    Par Harry Covair dans le forum VBA PowerPoint
    Réponses: 0
    Dernier message: 11/12/2013, 09h51
  2. Animation d'objet sur Powerpoint
    Par Ethan50 dans le forum Powerpoint
    Réponses: 1
    Dernier message: 02/09/2013, 01h17
  3. comment peut on animer un objet sur delphi?
    Par tchimou dans le forum Delphi
    Réponses: 5
    Dernier message: 11/05/2007, 23h53
  4. Evenement sur objet dynamique
    Par CanardJM dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 19/11/2004, 13h56
  5. [Debutant VC++.net] Obtenir un pointeur sur objet
    Par SteelBox dans le forum MFC
    Réponses: 6
    Dernier message: 17/06/2004, 18h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo