Boutique Cinema 4D
Affichage des résultats 1 à 2 sur 2

Discussion: Position et rotation globale en COFFEE

  1. #1
    Pilier
    Date d'inscription
    juillet 2002
    C4D version
    Autre
    Messages
    939

    Position et rotation globale en COFFEE

    Alors voilà la nouvelle enigme ;-)
    je voudrais déplacé un objet en fonction d'un autre en C.O.F.F.E.E. avec le classique code du style

    main (Document,op)
    {

    var Objet = Document->FindObject ( "MonObjet" );
    var Cible = Document->FindObject ( "Move" );

    var Position = Cible->GetPosition ( );

    Objet->SetPosition ( Position );

    }
    Sauf que je ne voudrai pas qu'il le fasse en tenan compte de sa position sur la liste des objets parents, mais de sa position dans la scene, c'est-à-dire exactement comme la variable Position Globale en XPresso, sauf que là c'est du COFFEE :-)
    bref ! en gros, il reste collé à un objet cible externe tout en étant dans une hiérarchie d'objet parent

    Bien sûr, je pourai faire des calculs ( vectoriel super complexe, suis fort ;-) ) comme ceci qui marche très bien

    main (Document,op)
    {

    var Objet = Document->FindObject ( "MonObjet" );
    var Cible = Document->FindObject ( "Move" );
    var pr1 = Document->FindObject ( "Parent1" );
    var pr2 = Document->FindObject ( "Parent2" );

    var Pos = Cible->GetPosition ( );
    var Position1 = pr1->GetPosition ( );
    var Position2 = pr2->GetPosition ( );

    var Position = Pos-(Position1+Position2);

    Objet->SetPosition ( Position );

    }
    Mais dans mon cas, je ne suis pas toujours sensé savoir à quel niveau de la liste des objets il se trouve, et même si ce serait le cas, si je dois me taper tous les objets, ce n'est pas top !

  2. #2
    Invité
    Date d'inscription
    juin 2002
    C4D version
    R16 Studio
    OS
    Win 7 Pro
    Messages
    4 252

    Position et rotation globale en COFFEE

    Le réponse est dans la Matrice....

    Non, ce n'est pas une citation de la célèbre trilogie, mais la solution à ton problème ! :wink:
    En effet pour connaitre les position/echelle/rotation d'un objet, les fonctions GetPosition()/GetScale()/GetRotation() donnent les coordonnées par rapport à l'axe de l'objet parent.
    Maintenant pour avoir des coordonnées par rapport à l'axe du monde, et ce, quelque soit l'emplacement de l'objet dans les hiérarchies du projet il faut passer par la Matrice Globale:
    var matrice=objet->GetMg();

    Ensuite on peut accéder à la position partir de "matrice": var pos=matrice->GetV0();

    Donc, pour l'exemple, on créé un cube dans le quel on place une sphère "enfant" en la décalant du cube dans l'espace, puis on ajoute à celle-ci l'expression COFFEE suivante:
    main(doc,op)
    {
    // position par rapport à l'axe de l'objet parent
    println("Position relative :");
    println(op->GetPosition());

    //position par rapport à l'axe du monde
    println("Position dans le monde:");
    println(op->GetMg()->GetV0());
    }
    Enfin, en ouvrant la fenêtre "Console" de C4D, on obtient 2 vecteurs (x, y, z) affichés, qui correspondent à la position de la sphère par rapport au cube, et à la position de la sphère par rapport au monde. :wink:

    Pour plus d'info, aller voir dans la doc COFFEE, et chercher "matrix".

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  
Mediaworks - Logiciels 3D | Design Internet - Creation site internet