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

Discussion: Y'a un os dans mon pied ! Je Recherche un osthéoCINEpathe !

  1. #1
    Timide
    Date d'inscription
    février 2003
    Messages
    119

    Y'a un os dans mon pied ! Je Recherche un osthéoCINEpathe !

    bonjour,

    j'ai un problème en coffee (version c4d 6) ; j'ai beau croiser mon code avec d'autres, je ne comprends pas d'où il vient.
    Je vous l'expose :

    je travaille sur un robot ( WIP : http://www.frenchcinema4d.com/forum/...?topic=13299.0). Je cherche à animer automatiquement le pied de la façon suivante : Le pied est constitué de 3 appuis tournant autour du même axe. Lorsque le pied atteint le sol, les 3 appuis touchent le sol et ont une rotation de 0 ; lorsque le pied décolle, les 3 appuis peuvent aller jusqu'à 55° mais jamais plus, et cela est proportionnel à la hauteur par rapport au sol.

    J'ai donc établi le code suivant :

    main(doc,op)
    {

    var pos=doc->FindObject("CubePied1")->GetPosition();* * * //CubePied1 est un des 3 appuis
    if(!pos)return;
    pos=pos.y;

    var pos_sol=doc->FindObject("Sol")->GetPosition();
    if(!pos_sol)return;
    pos_sol=pos_sol.y;


    var the_Relation = (pos - pos_sol) / 40;
    var rot;

    if (the_Relation <= -55) rot = -55;
    if (the_Relation > -55) rot = the_Relation;
    if (the_Relation >= 0) rot = 0;

    var la_rotation = vector(0,-rot,0);

    op->SetRotation(la_rotation);

    op->Message(MSG_UPDATE);

    }
    Deux problèmes se posent alors :
    1- la rotation s'effectue uniquement lorsque le sol est déplacé. Je veux l'inverse.
    2- les limitations ne marchent pas, et l'appui tourne tout autour de l'axe.

    voici la capture de la hiérarchie :


    et le fichier, car ça peut être confu :
    http://www.cyberlithique.com/docs/robot/pied.c4d


    Y aurait-il un osthéoCINEpathe ? :wink: merci

  2. #2
    Timide
    Date d'inscription
    février 2003
    Messages
    119

    Re: Y'a un os dans mon pied ! Je Recherche un osthéoCINEpathe !

    bon, j'ai résolu une partie du problème seulement : tout fonctionne acec le code suivant, sauf la limité max. Si le pied est trop haut, je veux que la rotation ne dépasse pas 40°. Or, si la limité inférieure fonctionne (au niveau du sol), ça ne marche pas en hauteur.

    main(doc,op)
    {

    var pos=doc->FindObject("CubePied1")->GetMg()->GetV0();
    if(!pos)return;
    pos=pos.y;

    var pos_sol=doc->FindObject("Sol")->GetMg()->GetV0();
    if(!pos_sol)return;
    pos_sol=pos_sol.y;

    var the_Relation = (pos - pos_sol) / 300;
    var la_rotation;
    var limite = 40;
    var limite_sol = 0;

    if (the_Relation < limite)
    la_rotation = the_Relation;
    else la_rotation = limite;
    if (the_Relation <= 0) la_rotation = limite_sol;

    var rot = vector(0,-la_rotation,0);

    op->SetRotation(rot);

    op->Message(MSG_UPDATE);

    }

    voici une petite vidéo qui montre l'erreur :

    http://www.cyberlithique.com/docs/robot/pied.mov

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