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

Développement 2D, 3D et Jeux Discussion :

undo / redo dans un soft 3D


Sujet :

Développement 2D, 3D et Jeux

  1. #21
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par epsilon68 Voir le message
    j'ai un modele de plusieurs millions de points, penses-tu que je dois appliquer la transformation sur chaque point? pas de perte de precision lorsque je ferais la transformation inverse dans le undo?
    Le problème du undo/redo est un problème récurrent dès qu'on souhaite réaliser un logiciel un peu poussé. De fait, les solutions existent.

    Dans ton problème, la manière de procéder semble être de créer un snapshot de l'état de l'application avant d'appliquer la modification, et de ne conserver dans le snapshoot que ce qui est modifié - si tu modifie un vertex, tu sauve ce vertex. Si tu modifie une matrice, tu sauves la matrice. Si tu modifie une association modèle/texture, tu sauve la valeur précédente. etc.

    Si l'utilisateur veut défaire ce qu'il a fait, tu récupères l'état précédent et tu l'appliques. Si il souhaite refaire ses modifications défaites, tu descends dans la liste des sauvegardes d'état et tu les appliques.

    Un exemple vaut mieux qu'un long discours :
    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
    26
    27
     
    init: 
      liste_etats <-- nouvelle liste<ETAT>
     
    change_matrice:
      etat_prec <-- nouvel_etat_matrice(matrice_précédente)
      etat_courant <-- nouvel_etat_matrice(nouvelle_matrice)
      liste_etat.supprimer_dernier_et_suivant
      liste_etat.ajoute(etat_prec)
      liste_etat.ajoute(etat_courant)
      pointeur_liste_etat <-- liste_etat.dernier
     
    change_vertex:
      etat_prec <-- nouvel_etat_vertex(vertex_avant_modif)
      etat_courant <-- nouvel_etat_vertex(vertex_après_modif)
      liste_etat.supprimer_dernier_et_suivant
      liste_etat.ajoute(etat_prec)
      liste_etat.ajoute(etat_courant)
      pointeur_liste_etat <-- liste_etat.dernier
     
    undo:
      pointeur_liste_etat <-- pointeur_liste_etat.précédent
      applique_etat(pointeur_liste_etat.etat)
     
    redo:
      pointeur_liste_etat <-- pointeur_liste_etat.suivant
      applique_etat(pointeur_liste_etat.etat)
    L'idée est de ne sauvegarder vraiment que ce qui change et qui ne peut pas être recalculé avec les données de l'état courant, afin de minimiser la mémoire prise par le système et le temps de stockage. Tout ce qui est fait par la carte graphique ne fait pas partie de l'état courant (c'est le résultat d'un calcul). Par contre, toutes les entrées de la carte graphique font partie de l'état courant.

    Il est illusoire de vouloir créer des transformations inverses - elles ne seront jamais assez précises, sauf dans certains cas chanceux (le cas ou une transformation ET son inverse peuvent être représentés sans perte, que ce soit sur un float ou un double (qui sont, je le rappelle, soumis au même restrictions)).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  2. #22
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    Merci beaucoup pour ton aide

    mais tu sauverais la liste entiere de vertex ou bien tu utiliserais les matrices pour avoir un repere local et donc stoker toutes les transformations?

Discussions similaires

  1. [VB6] Copier, Coller, Couper, Undo, Redo
    Par Jihnn dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 15/08/2006, 15h22
  2. Probleme avec Undo Redo
    Par issou dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 06/04/2006, 00h06
  3. Undo / Redo. Peut-on enregistrer que certaines actions ?
    Par Peewee dans le forum Général Java
    Réponses: 2
    Dernier message: 03/04/2006, 11h33
  4. Réponses: 5
    Dernier message: 31/03/2006, 18h12
  5. Undo-Redo (Ctrl-Z, Ctrl-Y) : comment le gérer ?
    Par MiJack dans le forum Langage
    Réponses: 6
    Dernier message: 13/01/2006, 13h26

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