ON-BLOG

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

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

とうとう来ました。

そう、MAYAです。
もう進むしかないんです。

ということで、タイトルにある通りMELについて書いて行きたいと思います。

っていっても、基本的にここのコードを目で見て書いてるだけなんですが、、、

あ、SIのコードも比較で書いていきます。


まずはXSIのスクリプトはとても解りやすいです。
なので、便利な関数など色々簡単に扱えます。
ではMAYAはどうでしょうか?


簡単なスクリプトで実践してみましょう。
ではまずはMELから。

global proc makeSphere(int $n)
{
        int $m;
        sphere;
        scale $n $n $n;

        sphere;
        $n -= 1;
        scale $n $n $n;
        $m = 2 * $n +1;
        move $m 0 0;
        
        sphere;
        $n -= 1;
        scale $n $n $n;
        $m += 2 * $n +1;
        move $m 0 0;
}

物としては非常に簡単なものです。
球を作成して、大きさを引数で指定。
さらに球を作成して、一個前に作成した球の横に配置していくものです。
f:id:tommy_on:20130613003845p:plain
簡単に復習してみましょう。

global proc makeSphere(int $n)

プロシージャの宣言になります。
プロシージャとはSIでいう関数です。
引数には型を設定する必要があります。
あと変数も同様で型を宣言しなくてはいけません。
上記でいうと、今回は数値を扱うので、「int $n、int $m」
としています。
文字列なら「string」とかにします。
あと、毎回変数に「$」を付けないといけないのは
本当に面倒ですね。。。


こんな感じでした。
なんとなく理解できました。
まぁ初歩中の初歩なんで。


で、これをXSIで再現しますと、こんな感じになります。

makeSphere(10,9);
function makeSphere(n,num)
{
        var m;
        var posx = 0;
        var Offset = n + 1;
        var Sphere = CreatePrim("Sphere", "NurbsSurface");
        SetValue(Sphere+".sphere.radius", 1);
        Scale(Sphere, n, n, n);
        for(var i = 0; i < num ; i++)
                { 
                Logmessage(i+"個目")
                var Sphere2= CreatePrim("Sphere", "NurbsSurface");
                SetValue(Sphere2+".sphere.radius", 1);
                n -= 1;
                Scale(Sphere2, n, n, n);
                m =  2 * n + 1 + posx ;
                Translate(Sphere2, m, 0, 0, siRelative, siGlobal, siObj, siXYZ, null, null, null, null, null, null, null, null, null, 0, null);
                posx = Sphere2.kinematics.Local.posx.value;
                }
}

SI側ではFORで球を引数で指定できるようにしています。
f:id:tommy_on:20130613005304p:plain
いやぁ。。。
いやぁ。。。。
いやぁ。。。。。
XSIいいっすねぇ~。。。
※後にこの気持ち変わりますw





まぁ始まったばっかりなんで、仕方がないか。。。