1.6.2 关系运算
所谓的关系运算,是指对两个操作数的值进行比较,得出它们的关系是否与关系运算符表示的关系一致,比较的双方可以是变量值或属性值。
下图所示为Maya认可的关系运算符。
关系运算的结果经常会用作一段程序是 否执行的条件。
1.6.3 逻辑运算
上文中提到的关系运算实际上是一 些简单的判断,这些判断都是单个条件,这是比较简单的一种用法。很多时候可能需要同时满足多个条件,或是满足多个条件中的一个就可以了,这时就需要用到逻辑运算。下图所示为常用的逻辑运算符。
逻辑运算主要有两个:“与” 运算和“或”运算。
“与”运算
“与”运算表示同时满足两个条件,即A符合条件1和条件2。
“或”运算
“或”运算表示只需要满足给出的两个条件中的一-个就可以,即A符合条件1或条件2。
例如:
if (time> 5) && (time< 10))
Ball.scaleZ = time;
表示当时间在第5~ 10秒之间时,Ball的scaleZ (缩放Z)属性等于时间。使用的逻辑运算为“与”运算,即时间必须同时满足大于5小于10的条件,Ball的scaleZ (缩放Z)属性才等于时间,当时间小于5秒或者超过10秒后,Ball的scaleZ (缩放Z)属性不再与时间保持致。
试想一下:如果将此条件语句中的“与”运算(&&)换成“或”运算(),会发生什么情况?因为任何时候时间都一定会符合“大于5”或者“小于10”两个条件中的一个,所以Ball的scaleZ属性总是等于时间。
虽然在条件语句中逻辑运算符连接的是两个或两个以上的关系运算,但还是要一起放在if后的小括号中,以表明一起构成一一个判断条件。
1.7 条件语句
在任何一种编程语言中,都有根据逻辑判断的结果选择不同的程序运行过程的结构,这种结构叫做条件语句,也叫条件分支语句、判断语句或选择语句。条件语句的执行过程为先对某一条件进行判断,例如两个数是否相等,某数是否大于另一一个数或小于另一个数,根据判断结果正确与否执行不同的程序段,即当判断结果为“真”时执行一段程序,当判断结果为“假”时执行另一段程序。条件语句的流程如下图所示。
条件语句包括: if和switch两种语句。
if语句
常用的if语句有以下3种形式。
●形式1:
if(条件)进程1
如下图所示。
●形式2:
if(条件)进程1
else进程2;
如下图所示。
形式3:
if(条件1)进程1
else if (条件2)进程2;
else if (条件3)进程3;
……
else进程n;
如下图所示。
形式1主要用于表达式运行过程中可能出现的某一特殊情况, 需要进行特殊处理。例如用表达式控制小球从高处落下,并在地面上弹跳的运动过程,整个过程中小球都受到重力的影响,所以重力对小球速度变化的影响是始终存在并且恒定的,即“当前帧小球速度=上一帧小球速度-9.8x单帧时间”始终成立,当小球与地面碰撞时小球会受弹力作用,速度发生反转,也就是说只有这一个时间点小球的速度要进行反向处理,即“小球的速度= -小球速度”(注意,这里的“=”不是数学中的“等于”,而是计算机语言中的赋值)。
将它们一并写成类似计算机语言的形式如下。
if (小球中心距地面小于小球半径且小球速度向下)小球的速度= -小球速度;
小球速度=小球速度-9.8/ 帧率;
形式2主要用于两种并行情况,还以从高处下落的小球为例。在释放小球的前一刻为计时零点,这一刻小球同时受手的握力与重力,而且二者平衡,所以这刻可以视为小球不受力, 即速度为0,加速度为0,除此之外的任何时刻,加速度等于重力加速度。小球运动速度的变化符合规律“当前帧小球速度=上一帧小球速度-9.8x单帧时间”, 将它写成类似计算机语言的形式如下。
if ( time为零)小球的速度=0;
else小球速度=小球速度-9.8/帧率;
形式3主要用于有3种或3种以上的并行情况。
1.8 循环语句
在工作中经常会遇到这样一些任务: 总是对同一个物体重复同项操作,或对不同的物体重复同一项操作,这种情况下可以将所有发生的操作罗列出来,也可以使用循环语句来缩短代码。
循环语句的基本功能是根据预先设置的条件反复执行相同的操作,其中被反复执行的操作称为循环体。
1.8.1 循环语句的基本形式
在大多数计算机语言中,循环语句有两种基本形式: while循环和for循环。
while循环又称为当型循环,其基本结构为:当条件为“真"时重复执行循环体中的指令。根据循环体与循环条件的先后关系,while循环又有两种具体形式: while和do-while。
for循环是较为常用的一种循环语句形式,for循环也有 两种具体形式: for和for-in。 本教程主要介绍for循环和for-in循环。
1.8.2 for循环
For循环的格式
For (设定循环初值;循环条件判定;改变循环变量)
循环体;
实例7: For循环计算
for($t= -5;$t <0;$t=$t+ 1)
{
print("t minus"+ (-$t) + " seconds and counting.\n");
}
print("Houston, we have lift-off!\n");
运行结果如下:
t minus 5 seconds and counting.
t minus 4 seconds and counting.
t minus 3 seconds and counting.
t minus 2 seconds and counting.
t minus 1 seconds and counting.
Houston, we have lift-off!
1.8.3 for -in循环
for-in循环是由for循环派生出来的一种形式,这种形式专门用于阵列(数组)。for-in循环只需要一个元素,在循环过程中它依次指向阵列(数组)中的每个成员,由此确定循环过程。
实例8: For in循环计算
string $car;
string $cars[3] = {'n NSX",”Porsche", 'n Acura];
for ($car in $cars)
print("Ihavea + $car + ".n");
运行结果如下:
I have an NSX.
I have a Porsche.
I have an Acura.
这个例子也可以写成for循环的形式。
int $carIndex;
string $cars[3] = {n NSX", " Porsche', 'n Acura};
for ($carIndex = O; $carindex < size($cars); $carIndex++)
print("I have a' + $cars[$carIndex] + "\n");
1.9 MEL命令
MEL脚本的基础就是MEL命令,接下来介绍MEL命令的一般形式和几个最常用的MEL命令。
1.9.1 MEL命令的一般形式
几乎所有的MEL命令在使用时都会以下面的形式出现。
command [-修饰词[参数] ]物体名;
command:任意条MEL命令。
[-修饰词[参数]]:用来规定命令操作中的.些具体细节,如操作方式,参数项等。
物体名:用来指定命令的操作对象。它可能是场景中的一一个节点名,也可能是一一个节点的属性或者是一个文件名,有一些命令不需要指定操作对象。
除了以上提到的这3部分以外,MEL命令的格式中还有一项重 要内容是必不可少的,即命令结束符“;”分号。所有的命令都必须以分号结束,对于中国用户来说,还必须注意分号不能是全角分号,而必须是单字节的英文分号。
实例9:张开曲面
(1)在命令行中输入并执行下列命令。
sphere -n mySpmod;
场景原点位置新生成一个轴向与世界坐标系x轴平行的NURBS球体,球体半径为1,如下图所示。
(2)在命令行中输入并执行下列命令。
sphere -q -ax mySpmod;
执行结果:
//Result: 100//球体轴向。
(3)在命令行中输入并执行下列命令。
sphere -e -esw 300 mySpmod;
执行结果:球体由闭口状态变为张口状态。
1.9.2 MEL命令的修饰词
在上例中-q、-e、-esw和-ax都是sphere命令的修饰词,它还包含-p、-SSw、 -r、-d、-ut、-tol、 -S、-nsp和-ch等修饰词。
修饰词-q表明当前命令为询问操作,-e表 明当前命令为编辑操作,这两个修饰词指定命令的操作方式。其他的修饰词控制命令操作对象NURBS小球的参数,-p:小球的位置,-ax: 轴向,-ssw:包裹范围的起始角,-esw: 包裹范围的终止角,一r:半径,-d:小球的光滑级别,-s: 径向分段数,-nsp: 纬向分段数,-ch: 是否保留历史等。
不同的命令有完全不同的命令参数修饰词。
1.9.3 Is命令
格式
Is <修饰词> <物体名>
返回值
字符串组
命令说明
该命令会列出场景中各种不同的节点(或物体)名,具体由命令所带的修饰词决定。
1.9.4 select命令
格式
select <修饰词> <物体名>
返回值
字符串组
命令说明
该命令用来控制选择操作,即完成诸如有条件地选择、加选、从选择集中去除部分对象等操作,使用此命令会改变选择集中的内容。
命令修饰词
-all:选择所有最高- -级的可删除物体。
-hi/-hierarchy:选择当前所选物体的所有下级物体,包括子级及更深层级的物体。
-add:加选物体。
-r/-replace:替换选择,相当于清空原来选择集中的内容,重新选择指定物体。
-d/-deselect:减选,从当前选择集中去除指定物体。
-c/-clear:清除选择集中的内容。
1.9.5 getAttr命令
格式
getAttr <修饰词>节点名.属性名。
命令说明
该命令用来查询指定节点属性的有关信息。
命令修饰词
k/-keyable:返回指定属性是否可设关键帧。可设关键帧的transform (变换)属性会显示在主窗口右边的Channels Box (通道盒),如果没有显示在通道盒中,则是不可设关键帧的。
-l/-lock:返回指定属性是否被锁定,即不可更改。
-typ/-type:返回指定属性的数据类别。
-s/-size:返回多值属性阵列的属性值个数,非多值属性,结果为1。所谓多值属性是节点上一个属性名对应许多属性值,如粒子物体的position (位置)属性、NURBS物体的cp (CV点)属性。
-t/-time<time>:返回指定时间的属性值。
1.9.6 setAtr命令
格式
setAttr <修饰词>节点名.属性名属性值<值>
返回值
没有返回值。
命令说明
该命令用来改变属性值或属性状态。
命令修饰词
-k/-keyable Boolean:改变节点属性是否可设关键帧的状态,这个操作通常使用主窗口菜单中的Channel Control编辑器来完成。
-1/-lock boolean:改变节点属性的锁定状态,这个操作通常也用[通道控制( Channel Control) ]编辑器来完成。
-typ/-type string: 确认属性的数据类型,如果不使用-type修饰词,则会假定属性数据类型是数字型的。
M27.2 表达式
表达式动画采用一种数学的方式来控制物体属性的变化,这种方式非常适合制作可以用数学公式精确描述的运动方式。
热门课程
专业讲师指导 快速摆脱技能困惑相关文章
多种教程 总有一个适合自己专业问题咨询
你担心的问题,火星帮你解答电影剪辑通常被称为“隐形的艺术”,尽管剪辑师的名号不如导演的名号响,但是如果缺少了剪辑师对拍摄素材的二次加工,电影作品将缺少其......
今天,我来和大家聊聊,迪士尼动画《海洋奇缘》系列是怎么用Maya软件为他们最新的续集打造获奖动画的。
有哪些听起来高大上、实际上转行同学也能胜任的岗位?试试虚拟现实工程师!
增强现实(AR)和虚拟现实(VR)是当前备受瞩目的创新技术,对相关的增强现实开发、虚拟现实开发、数字孪生开发工程师的人才需求,......
在这个短视频盛行的时代,越来越多的人想要尝试自己进行短视频剪辑,却常常因为缺乏专业知识而无从下手。别担心,今天就为大家带来短视......
今天,我们聊聊皮克斯的《头脑特工队》系列
中国首个AIGC导演共创计划今日正式上线:同学,做导演不要?
中国首个AIGC导演共创计划定于12月6日正式上线。该计划由快手自研视频生成大模型产品“可灵AI”,联合李少红、贾樟柯、叶锦添......