|
作者:streetman 前言 好久没有发帖子了,最近一个多月来我一直潜心钻研Maya的表达式动画,目前总算从菩提树上摘下了几个果子,想和大家分享一下。 一提到表达式和MEL语言,不少网友总是叹气。似乎这一类的东西是我们,尤其是非编程者遥不可及的。其实我也没有学过C++、Delphy语言,和不少学习文科的朋友一样美术才是我的专业。现在也是如此。我想只要具有高中程度的数学、英语和物理知识,学习表达式动画就足以了。三维的世界像海洋一样,坚持下来,我们每个人都是采珍珠的勇士。 一、Functions--函数 首先我们来分析一下一段含有Maya内嵌函数的表达式语句 Object.translateY=sin(time)+6; Object 当前场景中要设表达式的物体 . 分隔符 translateY 属性 = 指定运算符 sin 函数 () 逻辑运算符 time 变量 + 数学运算符 6 常量 ; 终结符 目前要讨论的范围是以SIN为代表的函数,它们的作用是将物体按一定的特殊规律运动。上例中Object从世界坐标轴的中心沿Y轴以SIN三角函数图像运动规律进行往返运动。这类的函数有很多我总结了一下如图:
二:Maya的内嵌函数分类 MATH FUNCTIONS 数学函数28个这一类的函数最多也是最为常用的 
RANDOM FUNCTIONS 絮乱函数6个是产生物体类似于噪波运动的效果 
VECTOR FUNCTIONS 矢量函数6个多用于粒子动画 
CONVERSION FUNCTIONS 转化函数4个多用于MAYA内部函数之间的互相转化作用 
我尽可能的将我所了解的内容告诉大家,有不周全的地方请参考MAYA的联机手册,虽然它是英文的。哎!不学英文怎么活?!
三. 数学函数的用法 了解这一部分的内容最好能够参考高中教本关于三角函数的章节。 ABS 是ABSOULTE的缩写意思是取决对值。 例如: int abs(int number) float abs(float number) vector abs(vector number) 函数名是abs,它将返回number 的绝对值。绝对值是没有正负数之分的数值。 本例说明abs 函数有3 种格式。每种格式要求一个不同数据类型的参数并返回一个不同数据类型的值。 第一个格式说明用户可以键入整数类型参数,并且函数返回一个整数。比如,abs(-3) 返回数值3。 第二个格式说明用户可以键入一个浮点类型参数,并且函数返回一个浮点数,比如,abs(-7.54)返回7.54。 第三个格式说明可以键入一个向量,而且函数返回一个向量。比如,abs(<<3, -6.3, -2>>返回<<3, 6.3, 2>>。
acos 返回的是一个数值的反余弦弧度值,其范围是0~ pi。 float acos(float number) number 是角的余弦值,其范围是-1~1。 例如: acos(1) 返回值是0。 acos(-0.5) 返回的是2.0944 弧度。 acosd 返回的是一个数值的反余弦角度值,其范围是0~180。 float acosd(float number) number 是角的余弦值,范围是-1~1。 例如: acosd(1) 返回值是0 度。 acosd(-0.5) 返回值是120 度。 asin 返回值是一个数值的反正弦弧度值,其范围是-pi/2 到pi/2。 f loat asin(float number) number 是角的正弦值,其范围是-1~1。 例如: asin(0.5) 返回值是0.525 弧度。 asind 返回的是一个数值的反正弦度数值,其范围是-90 到90。 float asind(float number) number 是角的正弦值,范围是-1~1。 例如: asind(0.5) 返回的是30 度。 atan 返回的是一个数值的反正切弧度值,其范围是-pi/2 到pi/2。 float atan(float number) number 是角的正切值,可为任何值。 例如: atan(1) 返回值是0.785。 atand 返回的是一个数值的反正切角度值,其范围是-90~90 度。 float atand(float number) number 是角的正切值,可为任何值。 例如: atand(1) 返回的是45 度。 atan2 返回的是一个在X,Y 坐标轴中指定的反正切弧度值。这个角是以X 轴为一边,另一边是由原点和坐标系 中一点形成的直线构成。返回的角以弧度为单位,范围是-pi 到pi。 float atan2(float Y, float X) X 是点的X 坐标。 Y 是点的Y 坐标。 例如: atan2(1,1) 返回的是0.785 弧度。 今天就写到这,已经很晚了,欢迎与我共同讨论 to be continue
今天加上MATH FUNCTIONS的最后一部分,来结素这个话题。其他的函数由于他们比较好理解,就不做说明了。毕竟一个人的能力是有限的。有点对不住大家了。 atan2d 返回的是一个在X,Y 坐标系中指定的反正切角度值。返回的角以度为单位,范围是-180 到180 度。 float atan2d(float Y, float X) X 是点的X 坐标。 Y 是点的Y 坐标。 例如: atan2d(1,1) 返回45 度。 hypot 返回的是从原点到在X, Y 坐标系点的二维向量值. angle 返回向量间的弧度角. float angle(vector vector1, vector vector2) vector1 是一个向量。 vector2 是另一个向量。 返回角是两个向量所夹角中的最小角,它通常小于180 度。 例如: angle(<<2,-1,1>>,<<1,1,2>> 返回1.0472 弧度,它等于60 度。 cross 返回由两个向量定义的叉乘值。 对于两个向量,叉乘值是由两个向量定义而成的面的法线, vector cross(vector vector1, vector vector2) 若叉乘值是0,那么可能是两个向量平行或在同一条直线上。若一个或两个向量是<<0,0,0>>,那么叉乘 值返回<<0,0,0>>。 vector1 是一个向量。 vector2 是另一个向量。 例如: cross(<<1,2,-2>>,<<3,0,1>> 返回值是<<2, -7, -6>>。 dot 返回两个向量的浮点点积。点积把两个向量作为自变量并返回一个标量值。 float dot(vector vector1, vector vector2) 如果点积返回0,那么两个向量是垂直的。 vector1 是一个向量。 vector2 是另一个向量。 例如: dot(<<1,2,-2>>,<<3,0,1>> 返回1,这个例如的点积是(1 * 3) + (2*0) + (-2*1),它等于1。 mag 返回向量的值,它是向量的长度,float mag(vector vector) vector 是所要得到数值的向量。 Mag 函数使用下列公式把向量转换为一个浮点数。 例如: mag(<<7,8,9>> 返回值13.928。 rot 返回一个向量,它代表以指定轴旋转一定弧度后点的位置。 vector rot(vector point, vector axis, float angle) point 是在世界坐标系中点的位置。 Axis 是点围绕之旋转的轴。这个轴是一条经过原点的有指定方向的线。 angle 是点所旋转的弧度。 例如: rot(<<3,3,0>>,<<1,0,0>>,0.5) 返回值为<<3, 2.633, 1.438>>。这是一个向量,它是沿<<1,0,0>> 的轴旋转0.5 弧度后点的位置在<<3,3,0>> 的向量。 例如: particleShape1.position = rot(position,<<0,1,0>>,0.1); 假定在场景中有一个单粒子物体,它的位置是<<4,6,0>>,并为它的粒子形节点写了上面的runtime 表达 式。播放动画时,粒子将沿Y 轴旋转成一个圆形图案。 在每帧中,粒子旋转0.1 弧度,约为5.7 度, unit 返回一个和向量相应的unit 向量。 unit 向量具有和指定向量相同的方向,但是它的数量是1。 vector unit(vector vector) vector 是和unit 向量相应的向量, 例如: unit(<<1,1,1>> 返回<<0.577, 0.577, 0.577>>。
|