PDA

Voir la version complète : Coffee : répartir des objets sur une spline



clemz
21/01/2010, 16h22
hellololesloulous :odile:

j'ai une question coffee encore ( vi bouuuhouuu la honteuuuu ! )

je voudrais controller la répartition d'objets sur une spline . Ma spline est du type Bspline mode uniforme .

Le problême que j'ai est que si je bouge un point intermédiaire de ma spline , je modifie la position de mes objets .
Hors moi je veux que "15%" en position de la spline reste 15% quoi qu'il arrive aux points intermédiares , on garde cette position relative à la longueur totale de la spline .

voila en gros ce que j'ai utilisé :
...
var MyObjectM = MyObject->GetMg();
var pos = x; // x est une valeur entre 0 et 1 ..définie par le nb d'éléments etc ..
var v = spl->GetSplinePoint( pos, 0 );
MyObjectM->SetV0(v);
MyObject->SetMg(MyObjectM);
......

j'ai donc testé avec les autres fonctions du sdk SplineObject , comme " spline->InitLength(0); " "spline->UniformToNatural(x);" etc
mais rien de change mon pb.

image jointe pour illustrer mon pb .

zavez des idées sur mon chmilblik ?

merci :odile:
clem

tabou
21/01/2010, 16h50
Le tag align to spline utilise justement un pourcentage pour déterminer la position de l'objet sur la spline, peut être qu'il te suffit d'attribuer le tag à chaque plume et d'ajouter dans ton script une boucle qui modifie le pourcentage en fonction du nombre de plumes ?

clemz
21/01/2010, 17h00
Le tag align to spline utilise justement un pourcentage pour déterminer la position de l'objet sur la spline, peut être qu'il te suffit d'attribuer le tag à chaque plume et d'ajouter dans ton script une boucle qui modifie le pourcentage en fonction du nombre de plumes ?



salu Tabou :)

hmm bien en fait je voudrais éviter de rajouter des tags sur les instances ..histoire de ne pas trop alourdir . Et ça me trottine dans la tête ce problême de code :) , j'aimerais bien connaitre l'astuce pour gérer ça en coffee ( si c'est faisable ^^ )

( Je peux aussi utiliser un cloner object pour répartir hein .. mais pareil je veux faire ça à la dure ! :) ..car une fois cette répartition controllée , je lui rajoute du random+multiplier , du bias+multiplier ...et apres random sur les 3 axes HPB pareil etc .. du random en scale de la plume etc )

oli_d
21/01/2010, 17h43
P'tite question à la con, ta spline est bien en interpolation uniforme ?

clemz
21/01/2010, 18h04
ouep :) . Bspline uniforme

edit tient je zieutais ton topic sur les segments d'ailleur Oli_D ( http://www.frenchcinema4d.fr/forum/index.php?topic=21507.msg397926 )

mais question très bête : c'est quoi les segments ? .. je vois que la somme des segments doit être = au nbre de points .. :? à quoi ça sert ces segments ?

Tengaal
21/01/2010, 19h48
voilà un petit script COFFEE qui colle un objet nommé "mon_objet" sur une spline nommée "ma_spline" et cela à une position définie de 0% à 100%
dans l'exemple, la position est définie à 25%

--------------------------------------------------------------------------------------------------

main(doc,op)
{
var objet, spline, matrice,position,bc;
var position_sur_spline;

// on pointe sur la spline
spline=doc->FindObject("ma_spline");

// on pointe sur l'objet à coller sur la spline
objet=doc->FindObject("mon_objet");

// on initialise l'accès à la spline et on en prend sa matrice globale
spline->InitLength(1);
var spline_matrice=spline->GetMg();

// on veut que l'objet soit constamment à 25% de la longueur de la spline
position_sur_spline=25; // valeur entre 0 et 100

position=spline_matrice->GetMulP(spline->GetSplinePoint(spline->UniformToNatural(position_sur_spline*0.01),1));
objet->SetPosition(position);
}

-------------------------------------------------------------------------------

:wink:


EDIT: pour répondre à ta question sur les segments d'un objet spline et bien c'est simplement dans le cas où une spline est composé de plusieurs tracés distincts, chaque "bout" de spline est un segment (ex: la lettre "D" en spline est composée de 2 segments, la forme "D" extérieure et la forme "D" intérieure. ces 2 segments sont distincts.

clemz
21/01/2010, 20h07
voilà un petit script COFFEE qui colle un objet nommé "mon_objet" sur une spline nommée "ma_spline" et cela à une position définie de 0% à 100%
dans l'exemple, la position est définie à 25%

--------------------------------------------------------------------------------------------------

main(doc,op)
{
var objet, spline, matrice,position,bc;
var position_sur_spline;

// on pointe sur la spline
spline=doc->FindObject("ma_spline");

// on pointe sur l'objet à coller sur la spline
objet=doc->FindObject("mon_objet");

// on initialise l'accès à la spline et on en prend sa matrice globale
spline->InitLength(1);
var spline_matrice=spline->GetMg();

// on veut que l'objet soit constamment à 25% de la longueur de la spline
position_sur_spline=25; // valeur entre 0 et 100

position=spline_matrice->GetMulP(spline->GetSplinePoint(spline->UniformToNatural(position_sur_spline*0.01),1));
objet->SetPosition(position);
}

-------------------------------------------------------------------------------

:wink:


EDIT: pour répondre à ta question sur les segments d'un objet spline et bien c'est simplement dans le cas où une spline est composé de plusieurs tracés distincts, chaque "bout" de spline est un segment (ex: la lettre "D" en spline est composée de 2 segments, la forme "D" extérieure et la forme "D" intérieure. ces 2 segments sont distincts.


oh merci Tengaal :)
ok je comprends mieux pour les segments :D

je teste tout ça de souiiite !

merci :odile:

clemz
21/01/2010, 20h35
yeehaa ! :)
marche parfaitement merci :) . Des fois je me demande comment vous faites pour trouver tout ça tout seul sérieux .. sans exemples dans le sdk .. pff :prie:

j'ai aussi rajouté un effet de bias ... ouch c4d pas planté ..ça marche du 1er coup :lol:

petit test vid :
http://kiteclem35.free.fr/3D/C4D/Wing/Spline%20Alignement%20_Bias%20Test.mov

merci
:odile:

Tengaal
21/01/2010, 22h34
bah voilà c'est impeccable ça ! :poucehaut:

Teutch
22/01/2010, 20h57
C'est excellent ça ! pas tout compris (presque rien en fait :roll:), mais c'est génial !

clemz, tu t'es inspiré du pélican de la vidéo avec le mignon nounours ?