ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:26.47KB ,
资源ID:8818064      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8818064.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(maya中mel语言初级教程.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

maya中mel语言初级教程.docx

1、maya中mel语言初级教程MEL 语言初级教程(一)作者:佚名 文章来源:网上收集 点击数:436 更新时间:2005-5-26【字体:小 大】首先,我们不讲枯燥的语法,来点实在的。打开Maya的脚本编辑器(Window-General Editors-Script Editor),脚本编辑器分为上下两栏,上栏为历史栏,显示的是曾经操作的命令及其结果以及错误、警告等。下一栏是命令输入栏,我们可以在其中输入相关命令。请试着输入如下语句:window -vis true;然后按下Ctrl+Enter键,是不是立即弹出了一个标题为window1的窗口?那么这句话是什么意思呢?window是一个命令

2、,表示我们要创建或修改一个窗口。vis是visible的缩写,即“可见”,-vis是window命令的一个开关,true则是该开关的参数,意为“是”。连起来说就是:创建一个窗口并使它可见。于是我们就得到了一个缺省的窗口,它的标题栏为window1,名称也为window1,但注意名称我们看不见,但从历史栏的最后一栏我们可以得知。下面我们更改该窗口的标题,在输入栏中输入:window -e -t ChinaDV window1;按下Ctrl+Enter键执行命令。我们看到,窗口的标题变成了ChinaDV。这句话又是什么意思呢?e是指edit,t是指title,表示我们要编辑名称为window1的窗

3、口,把它的标题栏改为ChinaDv。当然,我们也可以用一条语句在生成窗口的同时指定窗口的标题、名称、长宽等属性。试着输入:window -w 450 -h 600 -vis true -t Goomoo Studio myFirstWindow;并执行之。这次我们得到了一个更大的窗口,它的宽度为450象素,高为600象素,标题为Goomoo Studio,名称为myFirstWindow。关闭标题为ChinaDV的那个窗口,将窗口Goomoo Studio调小些(怎么调?用鼠标呗!),使之不挡住主网格。再在命令栏中输入:sphere;并执行,看到了什么?视图的中间出现了一个nurbs球体。所以

4、,sphere命令用来生成nurbs球体。下面我们要实现这样一个目的:在窗口Goomoo Studio上生成一个按钮,每单击一次该按钮,在视图的随机位置创建一个半径随机且小于1的nurbs球体。请输入以下两行:columnLayout;button -l Create Random Sphere -c sphere -p (rand(-12.0,12.0) (rand(-12.0,12.0) (rand(-12.0,12.0) -r (rand(1.0);输入时请注意大小写和括号、分号和引号,不要输错。执行完后,我们发现,窗口Goomoo Studio上出现了一个标题为Create Rando

5、m Sphere的按钮。那么,这两句话又是什么意思呢?欲知详情,请听下回分解。下课!作业:单击Create Random Sphere按钮1000次,体会mel语言带来的乐趣!MEL 语言初级教程(二)作者:佚名 文章来源:网上收集 点击数:487 更新时间:2005-5-26【字体:小 大】上节课的作业完成得怎样?要单击1000次才能生成1000个随机的球,太累!今天我们的目标是只单击一次就生成1000个随机的球,让我们为了此目标而奋斗吧!先解决上节课悬而未决的问题。在上节课中,我们看到了一个很长的命令:button -l Create Random Sphere -c sphere -p

6、(rand(-12.0,12.0) (rand(-12.0,12.0) (rand(-12.0,12.0) -r (rand(1.0);这里,button表示要创建一个按钮,l即label,也就是要指定按钮上面的文字,而“Create Random Sphere”则是该开关的参数;c是command,表示单击该按钮后所要执行的命令。注意:这些命令要用双引号括起来。这里,我们要执行的命令是:sphere -p (rand(-12.0,12.0) (rand(-12.0,12.0) (rand(-12.0,12.0) -r (rand(1.0);p即position,指定球的位置,用三个浮点数(即

7、实数)分别表示它的x,y,z坐标,这里x,y,z的值全为rand(-12.0,12.0),这是什么意思呢?rand()是一个数学函数,它可以带一个或两个参数。当他带一个参数的时候,比如rand(10.0),表示从0到10.0中间随机取一个值,这个值可能是3.14159,也可能是2.71828,当然也可能是7.88414(吃点88试一试,:));当他带两个参数的时候,比如rand(-12.0,12.0),表示从-12到12之间取一个随机的实数,因此有可能是-9.600,3.245,12.0等。你可以在脚本编辑器中试着输入下列命令来体会rand()函数:print(rand(10);print(r

8、and(-10,10);命令的结果将显示在命令历史栏中。r即radius,表示球的半径。我们再在命令栏中输入下面一段:window -vis true;columnLayout;button -l Create Random Sphere -c int $i;for($i=0;$i1000;$i+)sphere -p (rand(-12.0,12.0) (rand(-12.0,12.0) (rand(-12.0,12.0) -r (rand(1.0); 按数字键盘上的Enter键执行之,然后单击窗口上的“Create Random Sphere”按钮。*严正声明*:死机了可别怪我!哎呀!我要上

9、班了,明天再写。下课!MEL 语言初级教程(三)作者:佚名 文章来源:网上收集 点击数:534 更新时间:2005-5-26【字体:小 大】执行完上次的命令后,你的机器死过去了吗?没有?那好,这样的机器才有做三维的资格啊。在上节课的那个更长的命令中,我们看到了三个陌生的东西:“int”、“for(;)”和“$i”。先从简单的讲起。$i是一个自定义的变量,它和物体的自定义属性差不多。变量名只能由字母、数字和下划线组成。那么如何理解变量呢?你可以把一个变量想像成一个盒子,这个盒子里可以存放各种数据,包括整数、实数、字符串、矢量等。“int”即“integer”是一个定义符,“int $i”指明了代

10、号为$i这个盒子里只能存放整数,此外比较常用的有:float(实数),string(字符串)等。注意:在mel中,所有的变量前都需要加一个“$”符号。为什么要这样呢?我想有两个方面的原因:一是与Maya系统所定义的变量区分开来,以免发生冲突;二是A|W公司可能缺钱花,这样规定之后呢,看着mel脚本上满眼的美元,心里那个爽啊!哈哈!for(;)语法可就有点难了,大家要可要认真学罗。还是用实例来讲解吧,输入:int $i,$sum;$sum=0;for($i=1;$i1001;$i+)$sum=$sum+$i;print($sum);执行完后,我们看到了结果:500500。这就是从1加到1000的

11、和(是否想起了高斯?)。第一句定义了两个整型变量:$i和$sum,$i用来控制循环,$sum用来存放相加的结果。第二句首先将结果置零。下面就是for循环了,for循环首先执行第一条语句:$i=1,它将变量$i赋值为1;然后执行第二句:$i1001,判断$i的值是否小于1001,如果是,就执行$sum=$sum+$i;显然,这条语句马上被执行了,所以,$sum=0+1=1;(否则,就跳出循环,执行print($sum);这条语句)然后才执行$i+,这是什么意思呢?这表示变量$i的值自加1,即$i=$i+1,所以$i=1+1=2,然后再次进行判断$i的值是否小于1001,如果是,则再次执行$sum

12、=$sum+$i;显然,这次又执行了,$sum的值由1增为2.如此循环不已,直至$i的值大于1000为止,所以这个循环一共执行了1000次,$sum的值也就从1加到1000。说了这么多,不知大家听懂了没有,如果还没懂,看看附图吧。另外要注意,如果循环体有多条语句,这些语句要用花括号括起来,比如:float $i,$sum,$multi;$sum=0;$multi=1;for($i=1;$i51;$i+)$sum+=$i;$multi*=$i;print($sum);print(n);print($multi);显示结果:1275304140932017133760000000000000000

13、00000000000000000000000000000000这段程序用来计算1加到50的和与1乘到50的积。Maya可真是厉害,这么大的数都算得出来,比微软的计算器可强多了!这里“$sum+=$i;”和“$multi*=$i;”是mel的简写法,它们分别等同于“$sum=$sum+$i;”和“$multi=$multi*$i;”此外,for语句还有许多变异的写法,这里暂时就不涉及了。以上全是枯燥的语法,下面来点实用的东西。请在脚本编辑器中输入:window myWindow;columnLayout;intSliderGrp -l Number Of Spheres: -field tru

14、e -min 1 -max 1000 -v 50 slider;button -l Create Random Sphere -c int $k=0;int $n=intSliderGrp -q -v slider;for(;$k$n;$k+)sphere -p (rand(-12.0,12.0) (rand(-12.0,12.0) (rand(-12.0,12.0) -r (rand(1.0);showWindow myWindow;执行完后,得到了一个有滑动条和按钮的窗口,这样我们就可以通过滑块来控制生成的球体的数目了。今天埃了老板K,心情不太好,写出来的东西乱糟糟的,大家不要扔鸡蛋罗。下

15、课!MEL 语言初级教程(四)作者:佚名 文章来源:网上收集 点击数:365 更新时间:2005-5-26【字体:小 大】执行上节课的最后一段后,我们的程序终于有了人机交互功能,可以由用户来控制生成的球体数目了。我先来逐句讲解上段程序的意思。第一句,window myWindow;,创建一个名称为myWindow的窗口,但并不立即显示出来。第二句,columnLayout;,设置窗口的控件布局为列布局。第三句,intSliderGrp -l Number Of Spheres: -field true -min 1 -max 1000 -v 50 slider;,在该窗口上创建一个整数滑动条,

16、其标题文字为Number Of Spheres:;field true 表示显示数值输入框,默认状态为不显示;-min 1 -max 1000 -v 50表示该控件的最小值为1,最大值为1000,默认值为50。连起来说就是:创建一个标题为Number Of Spheres:,最小值为1,最大值为1000,默认值为50,名称为slider的整数滑条,并显示其数字输入框。第四句,很长啊,我只讲解-c后面的命令序列。int $k=0;,定义一个整型变量$k,并将其值设为0;int$n=intSliderGrp -q -v slider;,这个命令有点难理解,定义一个整型变量$n,并将其值设为intS

17、liderGrp -q -vslider,*注意*这句两端并不是单引号,而是“左手单引号”,也就是“Esc”键下、“Tab”键上、“1”键左的那个按键,用得很少的一个按键啦,A|W公司思想创新,令该键发挥奇效。该键用来括住一个命令,并捕获该命令执行的结果。有点难理解,还是举个例子来说吧,输入:string $mySphere=sphere;执行之,我们看到视图的中间生成了一个球体。这里,我们定义了一个字符串数组,字符串数组可以用来存放多个字符串。再输入:print($mySphere);执行之,得到结果:nurbsSphere1makeNurbSphere1这和历史栏中显示的/result:后

18、显示的结果是一样的。更进一步,在视图的空白处单击,取消对球体的选取,然后输入:move -a 5 0 0 $mySphere0;执行之,该球被移到了世界坐标的(5,0,0)处,可以看到,我们既没有选择该球,也不知道该球的名字,但我们仍然能够通过程序控制它,怎么样,看到“左单引号”的威力了吧!这里,move是移动命令,a即absolute,表示绝对坐标。再把思路跳回去,那么intSliderGrp -q -v slider执行的结果是什么呢?q表示query,即“查询”,v表示value,即“值”,这句话表示我们要查询名称为“slider”的控件的值,并将查询的结果存入变量$n中。 剩下的就好理

19、解了,for(;$k$n1;$k+),这是for循环的一个变种,它的括号中的第一条语句省略了,因为我们前面已将$k的值指定为0;for循环中的第二句把1001改为了$n,这样,这个循环就执行$n次,所以生成了$n个球,也就是用户输入的球体的数目。第五句,showWindow myWindow;,这句话用来显示第一句创建的窗口。至此,大功告成。不知我讲的你们是否都懂了。如有不懂,尽管发问,我有问必答。几天没布置作业了,很高兴吧,今天出个难题。今天的作业:在该窗体上再添加一个滑条,用以控制生成球体的最大半径。下课!MEL 语言初级教程(五)作者:佚名 文章来源:网上收集 点击数:441 更新时间:

20、2005-5-26【字体:小 大】上节课布置的作业完成的怎么样啊?没完成的可是要打手心的哟!以下是上节课练习的解答。window myWindow;columnLayout -adj true;floatSliderGrp -l max Radius: -field true -min 0.1 -max 10.0 -v 1.0 rSlider;intSliderGrp -l Number of Spheres: -field true -min 1 -max 1000 -v 50 nSlider;button -l Create Ramdom Sphers -c int $n=intSlide

21、rGrp -q -v nSlider;float $r=floatSliderGrp -q -v rSlider;int $i=0;for(;$i=$b)return $a;elsereturn $b;执行之。咦?怎么一点反应都没有?反应是有的,只是我们看不见,我们已经定义了一个名为zjsMax的函数存到maya的内存中去了(不知这样说准不准确?),下面我们再输入:zjsMax(147.258,258.369);执行之。咳!有反应了!历史栏中显示出:/ Result: 258.369 /。这表示我们的第一个函数编写成功!下面我们来剖析这个函数。proc即procedure,意为“函数”、“过程

22、”,告诉Maya下面我们要定义一个函数了。float,前面讲过,意为“浮点数”、“实数”,表示这个函数的返回值是一个实数。zjsMax,这是函数名。函数名必须由字母、数字和下划线组成,第一个字符不能为数字,前不用加美元符号。float $a,float $b,表示这个函数需要两个参数,而且都是浮点数。参数必须用圆括号括起来。最后不要加分号。下面是函数体,函数体由多条语句组成,这些语句必须用花括号括起来。if,意为“如果”,后面是条件。条件语句后不要带分号。($a=$b),$a大于或等于$b。此外还有(大于)、(小于)、=(小于或等于)、!=(不等于)、=(等于)。return,返回;else,

23、否则。这段函数体翻译成中文就是:如果$a大于或等于$b,就返回$a ,否则,返回$b。所以,它返回的是较大的那个实数。下面我们再编写一个函数,它需要两个参数,一个表示球体的最大半径,另一个表示球体的数目。请输入:proc zjsRandomSphere(float $r,int $n) int $i=0;for(;$i$n;$i+) sphere -p (rand(-12.0,12.0) (rand(-12.0,12.0) (rand(-12.0,12.0) -r $r; 执行之,照旧没反应。不过我们已有心理准备啦。再输入:zjsRandomSphere(1,100);视图中立即出现了100个

24、最大半径为1的球体。哈哈,连前面的界面都不用了。这个函数没有声明返回的数据类型,也没有任何返回值。这样,我们上节课的练习答案可以改成:proc zjsRandomSphere(float $r,int $n) int $i=0;for(;$i$n;$i+) sphere -p (rand(-12.0,12.0) (rand(-12.0,12.0) (rand(-12.0,12.0) -r $r;window myWindow;columnLayout -adj true;floatSliderGrp -l max Radius: -field true -min 0.1 -max 10.0 -

25、v 1.0 rSlider;intSliderGrp -l Number of Spheres: -field true -min 1 -max 1000 -v 50 nSlider;button -l Create Ramdom Sphers -c int $n=intSliderGrp -q -v nSlider;float $r=floatSliderGrp -q -v rSlider;zjsRandomSphere($r,$n);showWindow myWindow;这段程序看上去比前面那段更长,但更易于阅读和修改。你有这样的感觉吗?如果没有,那是你还没有习惯,等习惯了就好了。今天的

26、作业:写一个函数,它需要3个参数,返回这三个数中最大的那一个。-*附:为响应米侬朋友的要求,下面讲一下全局变量。*-以下只是我个人对全局变量的理解,也许不够准确,但希望能够释疑。全局变量可以认为是多个函数共同享用的变量。如何理解呢?请看例子:global float $gVar=12345;proc asignValue(float $value)global float $gVar; /全局变量$gVar=$value;proc outPut()global float $gVar; /全局变量print($gVar);proc outPut1()float $gVar; /局部变量prin

27、t($gVar);执行之。这里定义了一个全局变量$gVar和三个函数asignValue(float)、outPut()和outPut1()。按照书写约定,全局变量的前面要加一个g字母。任何一个函数在使用全局变量前都必须先声明该变量。在函数asignValue和函数outPut中,使用的是全局变量$gVar,而在函数outPut1中,使用的是局部变量$gVar,他们的变量名相同,下面我们来看看他们有什么差别:输入outPut();并执行之,结果:12345;输入outPut1();并执行之,结果:0。再输入:asignValue(-1000);并执行之。输入:outPut();并执行之,结果:-1000;输入outPut1();并执行之,结果:0,不变。MEL 语言初级教程(六)作者:佚名 文章来源:网上收集 点击数:446 更新时间:2005-5-26【字体:小 大】这是上节课的习题解答:proc float zjsMax(float $a,float $b,float $c)float $t; /定义一个

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1