对于学习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

赠金笔

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

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

发评论

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

昵   称:

评论并转载此博文

发评论

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

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

  1. maya mel uf8_新手入门Maya mel要注意的 8个细节

    脚本之前先说几个注意点, 1 把maya环境改成英文的,虽说中文没问题,但是总觉得不习惯 如果安装后是中文的,要改成英文的 x:\Program Files\Autodesk\Maya2014\res ...

  2. 教你如何能够从小白快速入门MAYA,刚开始学习MAYA必看

    现在CG行业慢慢发展,很多学校开设三维影视动画相关专业,也让喜欢影视的学生也能够好好去学习学习影视动画,但是,学校一开始教就是直接让你建模渲染动画等.但是很多学生就会遇到很多的问题,本身刚开始学习MA ...

  3. 深度学习之对象检测_深度学习时代您应该阅读的12篇文章,以了解对象检测

    深度学习之对象检测 前言 (Foreword) As the second article in the "Papers You Should Read" series, we a ...

  4. 再说深度学习是黑匣子,就把这篇文章糊 Ta 脸上

    导语:可视化不只是画画那么简单,它或许是我们理解神经网络的世界的方法.PS:标题是作者说的,不是我说的,要打,就打他(逃 昨天,Google Brain 推了一篇十分有趣的 paper --<T ...

  5. 「代码家」的学习过程和学习经验分享(挺好的一篇文章,转载侵删)

    转自:https://kb.cnblogs.com/page/554260/ 感悟:多写多练,抓住灵感. 每天,都会有人在微博上私信我,问我关于学习和成长的问题.这种问题我一般都不会回复某个j,毕竟每 ...

  6. 万字心得,PMP学习考试那些事儿,看这篇文章就够了

    声明:文章为原创,首发于知乎,链接:万字长文!PMP考试那些事儿,看这篇文章就够了 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/524966002 以下内 ...

  7. 30岁开始学python和liunx_学习python了,看完这篇文章,你的Linux基础就差不多了

    前言 这篇文章基于传智播客的2016年的gitbook资料和视频资料,同时也融合了2018年的视频和课件资料中的一些内容,即以2016年的资料为蓝本,2018年的资料为辅助编写的. 提醒:本文稍微过长 ...

  8. 关于深度学习中的注意力机制,这篇文章从实例到原理都帮你参透了(很系统,重点看)

    最近两年,注意力模型(Attention Model)被广泛使用在自然语言处理.图像识别及语音识别等各种不同类型的深度学习任务中,是深度学习技术中最值得关注与深入了解的核心技术之一. 本文以机器翻译为 ...

  9. maya mel uf8_如何在maya中创建uv 的mel语言

    mel语言是maya自己的一套编程语言,是比较偏底层的东西.所有的操作都可以在script editor窗口中有相应的MEL语言与之对应.通过mel,我们可以很方便快捷的运用maya. 比如在制作uv ...

  10. 深度学习 图像分类_深度学习时代您应该阅读的10篇文章了解图像分类

    深度学习 图像分类 前言 (Foreword) Computer vision is a subject to convert images and videos into machine-under ...

最新文章

  1. Windows Server应用之32位系统如何安装64位打印机驱动
  2. yii2.0框架中自定义接口,实现类的多继承
  3. 服务器搬迁方案_数据中心机房改造搬迁IDC机房工程建设
  4. 云炬60s看世界20211122
  5. 构造器初始化(三):巧用Static方法和base关键字
  6. 影响数百万人的21个经典全英文演讲,看完英语水平暴增!赶紧收藏
  7. python实例 69,70
  8. Part1: Specification of Required Functions
  9. HDU 1255 覆盖的面积(线段树+扫描线)
  10. 汇编语言寄存器相关知识(AX/BX/CX/DX+mov/add+物理地址+段+CS/IP+jmp)
  11. 无线定位服务器,[浅谈无线定位技术] 无线定位技术有哪些
  12. 3850x5服务器装系统,System x 3850 X5 系统安装测试报告
  13. Project免费视频教程来了
  14. 学会演讲必看的五本书籍推荐
  15. js简易版歌单播放,可切换下一首
  16. 利用BibTeX批量导入参考文献
  17. Swagelok SS-62TF4-31C-GC
  18. 软件全家桶-持续收录中(个人常用软件)
  19. 支持服务器系统什么意思,服务器系统支持
  20. 《Long-term Recurrent Convolutional Networks for Visual Recognition and Description》论文翻译

热门文章

  1. STM32——串口通信及实验
  2. 计算机环模实验报告,误差配套实验报告
  3. oracle startup open ora 03113,Oracle 11g startup时报ORA-03113通信通道的文件结尾
  4. javascript中的逻辑运算符优先级
  5. 年终工作总结汇报和述职报告ppt模板,内含范文可参考,精选20套可下载
  6. 免费WEB打印控件(插件)——打天下
  7. php 生僻字 拼音,php 汉字转拼音 [包含20902个基本汉字+5059生僻字]
  8. 【项目篇- 项目团队部分怎么写、如何作图?(两千字图文总结建议)】创新创业竞赛项目计划书、新苗国创(大创)申报书、挑战杯创业计划竞赛
  9. typra + picgo + 腾讯云 配合使用编辑微信公众号内容
  10. cydia多开微信_微信及陌陌多开教程:多开+分别推送消息+一键隐藏方法