maya mel uf8_对于学习MAYA MEL必须收藏的一篇文章

对于学习MAYA MEL必须收藏的一篇文章

(2009-04-16 22:51:26)

标签:

it

我经常需要打开这个文本看,推荐LZ也保存成文本,没事翻翻,碰到不懂的也翻翻,当然你若有一定英语基础及C语言基础那更好了

转帖:

mel语言基础知识

1:学maya并不是一定要让你学mel语言,就像建模,材质,动画,你不会mel语言一样可以把软件发挥的淋漓尽致。只能说会mel语言会给你带来很多便捷。像动力学就会涉及到很多mel语言的表达式等等,不过你放心你学maya没必要担心mel语言,因为他本身并没有那么可怕,作为一个初中级者,mel语言很少用到。所以现在别考虑mel语言的事件,因为mel语言本身就是maya的一部分,就像你学maya就不会问学建模是不是很难,学材质会不会很难等等。

2:于C语言,汇编语言有一点联系,会C语言对你学习mel语言帮助很大,但没有学过C语言或汇编语言的也不会妨碍你去学习mel语言。你说你学的不好,证明你还学过,还有点基础,那学mel问题应该不大了。像我们学maya时根本不知道mel语言是什么,还有mel语言这回事。所以你就放心吧,你学mel语言肯定会比别上手更快。

3:mel语言本身就是maya的一部分,不过在你学maya的模型 材质

动画时都不会设计到mel的知识,不过在你学习动力学时,老师会专门花上一段时间来给你们讲解mel语言是怎么一回事。因为动力学涉及到很多表达式的东西。

mel语言是maya自己内部的一套编程语言,mel是maya的灵魂,是maya执行命令的语言。稍有编程基础的话,可以很容易掌握它。我们可以看到除了maya的插件(maya内部很多组件也都是以插件形式存在的)以外,所有的操作都可以在script

editor窗口中有相应的mel语言与之对应。

*表达式的作用:

1,使属性与时间建立关系,来产生动画效果。

2,建立属性与属性的联系,来达到用一个属性控制另一个属性的目的。

/

一:MAYA中的预定义变量(时间)

1,"time"是一个变量,单位“秒”。

2,"frame"是一个变量,单位“贞”。

(*注意*属性的名称一定要写完整,并在写完后加终止符“;”)

例如:nurbsSphere1.translateX = time;

(*注意*属性名称是分大小写的,"aa Aa AA "是三个完全不同的名称)

(其中“=”相当于赋值操作符,顺序是自右向左先计算等号右侧,再把 结果赋给左侧。)

*数学运算符;

“+”(加);“-”(减);“*”(乘);“/”(除);“%”(取余,相当于一个数被另一个数整除后的余数)

二:MAYA中的自定义变量

作用:用来存储表达式中用到的临时结果。

类型:1;浮点型变量:(就是带有小数点的变量)

声明符为“float”;

例如:float $aa = 3.14159;

(*注意* a,所有变量名称前必须加“$”。

b,变量的名称必须以英文字母开头。

c,变量名称中不准许出现特殊符号,例如

“!,@,#,%,^,&,*"但可以出现下划线和数字”float $aa_1"。

d, 变量名称严格区分大小写,例如:“$aa,$Aa”是两 个完全不同的变量。)

2;整数型变量;

声明符为“int”;

例如:int $bb = 10;

3;字符串变量;

声明符为“string";

例如:string $cc = "maya7.0";

4;矢量变量;

声明符为“vector ”;

例如:vector $dd =

<<3.3,4,-5.5>>;

三;MAYA中的语句和运算符

1,条件语句

if (条件)//(“如果”的意思)

{

语句1;

语句2;

}

例如;if (time < 3)

(*注意*条件语句后不能加“;”)

也可以同“else”(当“否则”讲)配合使用;

例如;

if (time < 3)

ball.tx = -6;

else if (time >= 3

&& time <= 6)

ball.tx = 0;

else

ball.tx = 6;

或者不嵌套写,并列写也可以。

if (time < 3)

ball.tx = -6;

if (time >= 3 &&

time <= 6)

ball.tx = 0;

if (time > 6)

ball.tx = 6;

(*注意*多重并列时条件不能冲突,不可同时满足两个以上的条件 。)

2,关系运算符

“〈”(小于)//“〉”(大于)//“〈=”(小于等于)//“〉=”

(大于等于)//“==”(等于)//“!=”(不等于)

(*注意*如果条件后要用等号,一定要用双等号“==”)

3,逻辑运算符

“&&”(并且)(相乘的关系,必须两个条件同时成立)

“||”(或者)(相加的关系,有一个条件成立即可)

“!”(非)

4,快捷操作符

“+=”“-=”“*=”“/=”“%=”“++”“--”

(以上均是在自身的基础上进行)

*“print”(“打印”把变量的数值显示在屏幕上)*

四;MAYA中的函数

1,算术函数

a;“abs( )”(绝对值函数)

例如;abs(5) 5

abs(-5.5) 5.5

abs(0) 0

b;“ceil( )” (返回比括号中数大的最小整数)

例如;ceil(4.3) 5

ceil(-2.3) -2

c;“floor( )”(返回比括号中数小的最大整数)

例如;floor(4.3) 4

floor(-5.6) -6

d;“trunc( )”(取得括号中数的整数位)

例如;trunc(10.39) 10

trunc(-3.14) -3

e;“min(x,y)”(取得括号中两数比较后较小的数)

例如;float $a = 6.3;

float $b = 5.6;

float $c = 4.3;

float $min = min($a,$b);

float $min = min($min,$c);

f;“max(x,y)”(取得括号中两数比较后较大的数)

例如;max(2.1,3.5) 3.5

g;“sign( )”(返回括号中的符号,正数返“1”,负数返“-1 ”,零则返回“0”)

例如;sign(5) 1

sign(-5) -1

sign(0) 0

h;“clamp(min,max,parameter)”(求范围,当parameter小于min 时则返回min,当大于

max时则返回max,在min和max之间时则反回 其自身)

例如;clamp(0,1,time);(只取time“0-1”的部分)

2,指数函数

a;“exp( )”(求衰减系数“e”的多少次方)(e = 2.718);

例如;exp(time);(基于时间递增)

b;“pow(x,y)”(求x的y次方)

例如;pow(2,3) 8

pow(8,1.0/3) 2

c;“sqrt( )”(专用开平方)

例如;sqrt(4) 2

d;“log(x)”(求x是e的多少次幂)

例如;log(1) 0

log(2.718) 1

e;“log10(x)”(求x是10的多少次幂)

例如;log(100) 2

log(1) 0

log(1000) 3

f;“hypot(x,y) (勾股定理)

例如;hypot(3,4) 5

3,随机函数

a;”noise( )”(噪音)

例如;noise(time)

noise(frame)

b;“dnoise( ) (噪音,对矢量进行操作)

例如;dnoise(<<2,3,4>>)

c;“rand( )”(随机函数的一种,针对浮点类型)

例如;rand(5) 在0到5之间随机

rand(2,4) 在2到4之间随机

d;“seed ( )”(固定随机函数)

例如;seed(1) 1

e;“sphrand ( )”(针对矢量的球型随机)

例如;sphrand(5)

sphrand(<<5,1,5>>)

4,三角函数

a;“sin ( )”(正弦函数)

例如;sin(1) (表示1弧度的正弦值)1弧度=180/3.14度

b;“cos ( )”(余弦函数)

例如;cos(1) (表示1弧度的余弦值)

5,转换函数

a;“deg_to_rad”(将角度转为弧度)

例如;deg_to_rad(180) 3.14

b;“ hsv_to_rgb”(颜色转换模式)

例如;hsv_to_rgb(<<360,1,1>>)

<<1,0,0>>

6,曲线函数

a ;“linstep(min,max,parameter)”(线性递增函数,返回值永 远是从0到1)

例如;linstep(3,6,time)

b;“hermite( )”(自定义曲线函数,且返回结果也为矢量,用 法较为复杂)

7,矢量函数

a;“mag ( )”(求矢量大小,求得的结果是一个浮点数)

例如;

mag(<<3,4,5>>

-

<<1,2,3>>)

3.464102

b;"angle ()" (求得两矢量之间的加角,单位永远是弧度,永远取小的角 度,永远取正数)

(以上函数只要知道是干什麽用的即可)

maya的局部变量和全局变量

2007年11月09日 星期五 10:56

一、认识局部变量和全局变量

我们知道,一旦声明了一个变量,就可以在定义这个变量的过程中使用它,或者如果在某个mel文件中的过程之外定义了它,就可以在mel文件中的任何地方使用它。如果在脚本编辑器中定义了一个变量,就可以在脚本编辑器中继续使用它直到退出maya。

举个例子,尝试输入以下的代码:

proc demo_aaa(){

int $aaa=10;

}

print ($aaa);

将它放入脚本编辑器中执行,发现什么?maya告诉你:// Error: "$aaa" is an undeclared

variable. //;

这是为什么呢?通常在一个过程中定义的变量在该过程外是不可见的。大家可以看到,我们上段代码中定义的$aaa是定义在proc

demo_aaa()这个函数的函数体内的,而print则是在它之外的,那么就会出现错误。

这是因为,变量能够被使用的范围被称为它的“作用域”。而不在其作用域中将不被执行。我们再来看一段代码:

int $bbb=34;

proc print_bbb(){

print($bbb);

}

print print_bbb();

我们还会得到同样的错误:// Error: "$aaa" is an undeclared variable. //;

归咎其原因,就是因为这些函数只是“局部变量”,它们只能在声明它们的过程或者脚本中使用,也就是只能在自己的“作用域”中起作用。

我们假设一下,如果你从互联网的某个地方下载了一个maya的mel语言插件,而它定义的变量是“局部变量”,那么我们又怎么能拿来使用呢,唯一的好处就是让人大可不必担心会和自己所定义的变量冲突,因为它们根本“涉及”不到那里。

那么如果想要将自己的成果与别人一起分享,或者同伴之间要共享一个mel资源又该如何呢?聪明的朋友一定已经可以理解为什么会提出“全局变量”这个概念了吧。它最大的优点就是能“共享”。

那么我想办法把上面的那段错误的代码纠正吧:

global int $bbb=34;

proc print_bbb(){

print ($bbb);

}

print print_bbb();

放入脚本代码中,看到了什么?依然不对!那么这又是为什么呢?正如本例所揭示的那样,声明全局变量一次是不够的,事实上,不得不在每一个使用该变量的脚本或过程中声明它。而所有的声明就数据来说也必须是一致的;就本例来说,因为在过程外定义的变量对过程内的代码是不可见的(这些代码不在过程的作用域中),所以在过程内和过程外都需要定义该变量。那么我们再次来修改一下我们的这个例子:

global int $bbb=34;

proc print_bbb(){

global int $bbb;

print ($bbb);

}

print print_bbb();

这样就maya就不会报错了。哈哈~~~因为它在过程内外都可以找到我们定义的这个$bbb。

这时大家就会问了,为什么maya要如此麻烦的要求在每一个变量的作用域中都要重新声明一次呢?我们先不做解释,看一下下面这个例子:

global int $my_int=25;

proc assign_four(){

$my_int=4;

}

assign_four();

print($my_int);

我们来看看输出结果:25!这很让人惊讶,尽管我们已经在函数体中设置$my_int的值为4,但是输出的结果却是25。这是因为,在assign_four()的函数体中,并没有引入$my_int这个我们起先创建的“全局变量”,而是自己重新创建了一个$my_int的“局部变量”,而当执行完这个函数体的时候,这个$my_int的“局部变量”就消失了,我们赋予的值也是赋给了这个函数体中的“局部变量”$my_int。因此,当在函数体外(即过程外)执行输出命令时,当然显示的是我们以前定义过的“全局变量”$my_int,因为它看不到函数体内的$my_int。这样解释,不知道大家是否就能理解为什么maya要如此麻烦的要求在每一个变量的作用域中都要重新声明一次。

二、使用策略

有了上面的认识以后,我想大家可能会问,我们把所有变量都设成全局变量就可以相互调用,而没有这么多的麻烦了。其实这么说是不正确的:

1、因为忘记了声明的全局变量有时就意味着所更改的是错误的数据,正如例子中所看到的:使用局部变量通常会更安全。

2、可以查看那些使用局部变量,并且总是使用参数将数值调入、调出的过程。并准确的知道他们改变了什么。而这时如果使用的是全局变量,该过程就很可能由

于脚本中引入的错误从而错误地更改了数据,而这种错误通常是很难被发现的。

3、很多mel的脚本和函数会有命名相似的变量,在大多数情况下,这些脚本和函数并不要和其他脚本或函数共享这些信息,而只是他们唯一的属于它们的函数。

所以究竟要怎样使用全局变量和局部变量就要自己多多揣摩,在实践中体会了,我就不罗嗦了。

分享:

喜欢

0

赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值