请教一个问题:按照曲线创建骨骼

对MEL基本不懂,有想学的欲望
现在在工作当中遇到一些问题,想请教一下
就是我想先创建一条曲线,然后在创建几段骨骼并吸附到曲线上,并且可以自定义骨骼的数目,也就是按照曲线的弧长来平分骨骼之间的距离
想请问,用MEL怎么实现,大概的一个原理是什么,谢谢
第一次上这个网站发问题

作者: hmaya

developer!

看完不过瘾?点此向作者提问

《请教一个问题:按照曲线创建骨骼》有4个想法

  1. 我的想法是这样的:
    根据NURBS曲线的U参数,获得曲线上的任意一点的坐标,就可以在此创建骨骼了。
    不过一般NURBS曲线的U向参数并没有归一化,骨骼并不会根据弧长均匀分布。
    所以如果想要骨骼均匀沿着曲线分布,最好把NURBS曲线Rebuild一下,就可以解决问题了。
    具体代码如下,希望可以对你有所启发。
    核心命令有两个,pointOnCurve和joint
    ////////////////////////////////////////////////////////////
    //created by hmaya at May24 2008
    //MEL Command: Curve2Joints(int $pSpan, string $CurveName)
    //Usage:
    //1在脚本编辑器中执行该代码
    //2指定骨骼段数和NURBS曲线名称
    //例如:输入Curve2Joints(6,"curve2")并运行
    //注意:为了获得更好的效果,建议运行该MEL之前,把BURBS曲线Rebuild一下
    //////////////////////////////////////////////////////////////////
    proc Curve2Joints(int $pSpan, string $CurveName){
    if($pSpan < 0){ error "Please reassign the number of joints, it should be positive!"; } float $u; if($pSpan <= 0) $u = 0; if($pSpan > 0)
    $u = 1.0/$pSpan;
    int $i;
    for($i = 0; $i <= $pSpan; $i++){ float $parameter = $i*$u; float $pos[] = `pointOnCurve -top 1 -pr $parameter -p $CurveName`; joint -p $pos[0] $pos[1] $pos[2]; } }

  2. 可以改进一下用两个快捷按钮实现这个操作
    创建窗口
    string $myWindow = `window`;
    columnLayout;
    string $CVIntSilderGrp = `intSliderGrp -min 0
    -max 1000
    -label
    "Number of UV:"
    -field true`;
    string $JTIntSilderGrp = `intSliderGrp -min 0
    -max 1000
    -label
    "Number of joints:"
    -field true`;
    showWindow $myWindow;

  3. 建立骨骼
    $SLcurve = `ls -sl`;
    float $CB = `intSliderGrp -q -value $CVIntSilderGrp`;
    float $JB = `intSliderGrp -q -value $JTIntSilderGrp`;
    rebuildCurve -ch 1 -rpo 1 -rt 0 -end 1 -kr 0 -kcp 0 -kep 1 -kt 0 -s $CB -d 3 -tol 0.01 $SLcurve;
    if($JB < 0){ error "Please reassign the number of joints, it should be positive!"; } float $u; if($JB <= 0) $u = 0; if($JB > 0)
    $u = 1.0/$JB;
    int $i;
    for($i = 0; $i <= $JB; $i++){ float $parameter = $i*$u; float $pos[] = `pointOnCurve -top 1 -pr $parameter -p $SLcurve`; joint -p $pos[0] $pos[1] $pos[2]; 两个mel按钮先点第一个按钮创建出一个窗口输入重建曲线的spans数目以及将要建立的骨骼数 输入完毕后 选择所要操作的对象曲线按下第二的按钮 结束

发表评论

邮箱地址不会被公开。 必填项已用*标注