Gabriel
10/07/2004, 19h47
Bonjour
Je fais l'ésai d'articuler une épaule de manière réaliste avec plusieurs os pilotés par l'os du bras en utilisant inhérited rotation. C'est assez encourageant mais il faudrait que la rotation se fasse d'une manière indépendante sur les 3 axes pour pouvoir appliquer des coéfficients différents sur chacun des 3 axes.
J'ai écris une expression COFFEE en me basant sur le tutorial de Maxon sur l'utilisation des matrices et j'ai pondu ça :
main(doc,op)
{
var a = 1.00;
var b = 1.00;
var c = 1.00;
var tg = doc->FindObject("Os bras G"); if(!tg) return;
var mo = op->GetMg();//position globale de l'os tagué
var mt = tg->GetMg();//position globale de l'os pilote
var Roto = mt->GetHPB();//rotation globale de l'os pilote
var xo = Roto->GetRotX();
var yo = Roto->GetRotY();
var zo = Roto->GetRotZ();
var Rot1 = mt->GetHPB();//rotation globale de l'os tagué
var x1 = Rot1->GetRotX();
var y1 = Rot1->GetRotY();
var z1 = Rot1->GetRotZ();
var pos = mo->GetV0();
var scale = vector(vlen(mo->GetV1()),
vlen(mo->GetV2()),
vlen(mo->GetV3()));
mo->SetRotX(xo * a);
mo->SetRotY(yo * b);
mo->SetRotZ(zo * c);
mo->SetV0(pos);
mo->SetV1(vnorm(mo->GetV1()) * scale.x);
mo->SetV2(vnorm(mo->GetV2()) * scale.y);
mo->SetV3(vnorm(mo->GetV3()) * scale.z);
op->SetMg(mo);
return;
}
Je n'ai pas d'erreur de compilation mais ça ne fait strictement aucun effet, l'os reste inerte. Mes capacités de programmeur sont limitées. J'ai beau chercher je ne comprend pas pourquoi, où est l'erreur?
Gabriel
Je fais l'ésai d'articuler une épaule de manière réaliste avec plusieurs os pilotés par l'os du bras en utilisant inhérited rotation. C'est assez encourageant mais il faudrait que la rotation se fasse d'une manière indépendante sur les 3 axes pour pouvoir appliquer des coéfficients différents sur chacun des 3 axes.
J'ai écris une expression COFFEE en me basant sur le tutorial de Maxon sur l'utilisation des matrices et j'ai pondu ça :
main(doc,op)
{
var a = 1.00;
var b = 1.00;
var c = 1.00;
var tg = doc->FindObject("Os bras G"); if(!tg) return;
var mo = op->GetMg();//position globale de l'os tagué
var mt = tg->GetMg();//position globale de l'os pilote
var Roto = mt->GetHPB();//rotation globale de l'os pilote
var xo = Roto->GetRotX();
var yo = Roto->GetRotY();
var zo = Roto->GetRotZ();
var Rot1 = mt->GetHPB();//rotation globale de l'os tagué
var x1 = Rot1->GetRotX();
var y1 = Rot1->GetRotY();
var z1 = Rot1->GetRotZ();
var pos = mo->GetV0();
var scale = vector(vlen(mo->GetV1()),
vlen(mo->GetV2()),
vlen(mo->GetV3()));
mo->SetRotX(xo * a);
mo->SetRotY(yo * b);
mo->SetRotZ(zo * c);
mo->SetV0(pos);
mo->SetV1(vnorm(mo->GetV1()) * scale.x);
mo->SetV2(vnorm(mo->GetV2()) * scale.y);
mo->SetV3(vnorm(mo->GetV3()) * scale.z);
op->SetMg(mo);
return;
}
Je n'ai pas d'erreur de compilation mais ça ne fait strictement aucun effet, l'os reste inerte. Mes capacités de programmeur sont limitées. J'ai beau chercher je ne comprend pas pourquoi, où est l'erreur?
Gabriel