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

ActionScript 3 Discussion :

Redimensionner un "Os" ou "Segment"


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Par défaut Redimensionner un "Os" ou "Segment"
    Bonjour,

    Pour un projet particulier j'ai construit un personnage que je souhaite faire croître et grossir/maigrir. Avec Tween, je réussis facilement à redimensionner toutes les parties du corps de mon personnage, cependant je n'ai toujours pas réussi à faire suivre son squelette.

    Selon ce que j'ai pu trouver un peu partout sur internet, il est simple de déplacer une jointure au bout d'un os pour créer un mouvement mais qu'en est-il d'allonger un segment?

    Quelqu'un pourrait m'aider?

    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
    28
    29
    30
    31
    32
    33
     
    import fl.transitions.*;
    import fl.transitions.easing.*;
    import fl.ik.*;
     
    var squelette:IKArmature = IKManager.getArmatureByName("Bonhomme");
    var os_bras_gauche:IKBone = squelette.getBoneByName("os_bras_gauche");
     
    trace(os_bras_gauche.hasOwnProperty("length")); //false
     
    var el1:Tween = new Tween(bras_gauche, "scaleX", Regular.easeIn, 1, 2, 2, true);
    var el2:Tween = new Tween(bras_gauche, "scaleY", Regular.easeIn, 1, 2, 2, true);
     
    el2.addEventListener(TweenEvent.MOTION_FINISH, scaling_finished);
     
    function scaling_finished(evt:TweenEvent):void {
        resize_bone(os_bras_gauche, 2);
    }
     
    function resize_bone(bone, ratio) {
        var hj:IKJoint = bone.headJoint;
        var tj:IKJoint = bone.tailJoint;
        var pos_head : Point = hj.position;
        var pos_tail : Point = tj.position;
     
        var tail_mover:IKMover = new IKMover(tj, pos_tail);
        pos_tail.x = pos_head.x + ((pos_tail.x - pos_head.x) * ratio); 
        pos_tail.y = pos_head.y + ((pos_tail.y - pos_head.y) * ratio); 
        tail_mover.moveTo(pos_tail); //Crée un déplacement
     
        var bone_length = Math.sqrt(Math.pow(pos_head.x = pos_tail.x, 2) + Math.pow(pos_head.y = pos_tail.y, 2));
        trace(bone_length);
    }
    je souhaiterais que ma jointure "tail" s'éloigne de ma jointure "head" mais cela ne correspond pas au principe de Cinématique Inverse qui cherche à tout prix à tout faire suivre.

  2. #2
    Membre éclairé Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Par défaut
    J'ai bien réfléchi car j'envisage que CS5 ne permet peut-être pas encore (on ne permettra jamais) de redimensionner un segment. Alors j'ai envisagé deux autres pistes de solutions, selon-vous laquelle pourrait le plus logiquement et proprement régler mon problème si je ne peux pas directement redimensionner un segment?

    1. Placer un segment dans chaque Clip représentant une partie du corps. Logiquement, l'os se redimensionnerait alors avec mon dessin car c'est en fait le clip qui est redimensionné. Le problème est que cela doit donc créer autant d'armatures qu'il y a de clips et je ne sais pas si il sera possible de les faire fonctionner ensemble par la suite.
    2. Oublier les armatures et les segments et tout gérer manuellement avec du code et (au besoin) utiliser une armature invisible comme référence pour bénéficier du calcul des angles en cas de mouvement.

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