crostif
22/08/2005, 13h35
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/index.php?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 :
http://www.cyberlithique.com/docs/robot/pied1.jpg
et le fichier, car ça peut être confu :
http://www.cyberlithique.com/docs/robot/pied.c4d
Y aurait-il un osthéoCINEpathe ? :wink: merci
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/index.php?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 :
http://www.cyberlithique.com/docs/robot/pied1.jpg
et le fichier, car ça peut être confu :
http://www.cyberlithique.com/docs/robot/pied.c4d
Y aurait-il un osthéoCINEpathe ? :wink: merci