ON-BLOG

CGのこと、あれこれ書いてます。

XSIユーザーから観たMELスクリプトについて 其の四

では次。
キーフレームについて。
これは私には重要な所ですね。



MAYAでキーフレームは

setKeyframe -at "ry" $name[0];

こんな感じでキー設定します。

「-at」で以下のアトリビュートにキーを打つって感じらしいです。
コードにすると、

global proc circleAnimation1(float $rad,int $frame)
{
        int $i;
        float $r = 0.0;
        string $name[];
        
        $name = `sphere`;
        setAttr($name[0] + ".tx") $rad;
        setAttr($name[0] + ".rotatePivotX") (-$rad);
        for($i = 0 ; $i < $frame ; $i++)
                {
                currentTime $i;
                setAttr($name[0] + ".ry") $r;
                setKeyframe -at "ry" $name[0];
                $r += 10.0;
                }
}

これを実行すると円運動がキーフレームされてます。
f:id:tommy_on:20130614005703p:plain
ちょっと気持ち悪いです。。
何故か?

setKeyframe -at "ry" $name[0];

このコードだけ、キー打つことは行けますが、
フレームを指定できない所です。
多分他のやり方でできるんだろうとは思いますが、
どうしても気になる。。。。
あ、コードは省きますが、
こんな事もできます。
f:id:tommy_on:20130614005911p:plain
一個前の記事でやった螺旋のアニメーション版です。


さておき

SIだと、

circleAnimation1(10.0,100);
function circleAnimation1(rad,frame)
{
        var r = 0.0;
        var Sphere = CreatePrim("Sphere", "NurbsSurface");
        SetValue(Sphere+".sphere.radius", 1);
        SetValue(Sphere+".kine.local.posx", rad, null);
        TranslatePivot(Sphere,0,0,0);
        for(var i = 0 ; i < frame ; i++)
                {
                Rotate(Sphere, 0, r, 0 , siRelative, siGlobal, siObj, siXYZ, null, null, null, null, null, null, null, 0, null);
                SaveKey(Sphere+".kine.local.roty",i);
                r += 10.0;
                }
                
}

f:id:tommy_on:20130614010140j:plain
ほぼ一緒な気がしますね。


こんな感じで、キー設定自体は
そこまでな気がしました。

問題はここからの応用ですね。。
それはこれから長い道のりが待ってます汗



では…