MAYA表达式动画之Functions基础教程
脚本之家
本教程向朋友们介绍MAYA表达式动画之functions,教程介绍的比较详细,希望对朋友们有所帮助!
前言
好久没有发帖子了,最近一个多月来我一直潜心钻研 maya 的表达式动画,目前总算从菩提树上摘下了几个果子,想和大家分享一下。
一提到表达式和 mel 语言,不少网友总是叹气。似乎这一类的东西是我们,尤其是非编程者遥不可及的。其实我也没有学过 c++ 、 delphy语言,和不少学习文科呐笥岩谎?朗醪攀俏业淖ㄒ怠O衷谝彩侨绱恕N蚁胫灰?哂懈咧谐潭鹊氖?А⒂⒂锖臀锢碇?叮??氨泶锸蕉??妥阋粤恕H??氖澜缦窈Q笠谎??岢窒吕矗?颐敲扛鋈硕际遣烧渲榈挠率俊?br
一、 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 内部函数之间的互相转化作用.
array functions 阵列函数 3 个用于粒子和类粒子物体的运动
curve functions 曲线函数 4 个控制物体的路径运动
我尽可能的将我所了解的内容告诉大家,有不周全的地方请参考 maya 的联机手册,虽然它是英文的。哎!不学英文怎么活?!
表达式动画之functions
三 数学函数的用法
了解这一部分的内容最好能够参考高中教本关于三角函数的章节。
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(%26lt3, -6.3, -2 返回 %26lt3, 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(%26lt2,-1,1,%26lt1,1,2
返回 1.0472 弧度,它等于 60 度。
cross
返回由两个向量定义的叉乘值。
对于两个向量,叉乘值是由两个向量定义而成的面的法线,
vector cross(vector vector1, vector vector2)
若叉乘值是 0 ,那么可能是两个向量平行或在同一条直线上。若一个或两个向量是 %26lt0,0,0 ,那么叉乘
值返回 %26lt0,0,0 。
vector1 是一个向量。
vector2 是另一个向量。
例如:
cross(%26lt1,2,-2,%26lt3,0,1
返回值是 %26lt2, -7, -6 。
dot
返回两个向量的浮点点积。点积把两个向量作为自变量并返回一个标量值。
float dot(vector vector1, vector vector2)
如果点积返回 0 ,那么两个向量是垂直的。
vector1 是一个向量。
vector2 是另一个向量。
例如:
dot(%26lt1,2,-2,%26lt3,0,1
返回 1 ,这个例如的点积是 (1 * 3) + (2*0) + (-2*1), 它等于 1 。
mag
返回向量的值,它是向量的长度, float mag(vector vector)
vector 是所要得到数值的向量。
mag 函数使用下列公式把向量转换为一个浮点数。
例如:
mag(%26lt7,8,9
返回值 13.928 。
rot
返回一个向量,它代表以指定轴旋转一定弧度后点的位置。
vector rot(vector point, vector axis, float angle)
point 是在世界坐标系中点的位置。
axis 是点围绕之旋转的轴。这个轴是一条经过原点的有指定方向的线。
angle 是点所旋转的弧度。
例如:
rot(%26lt3,3,0,%26lt1,0,0,0.5)
返回值为 %26lt3, 2.633, 1.438 。这是一个向量,它是沿 %26lt1,0,0 的轴旋转 0.5 弧度后点的位置在 %26lt3,3,0
的向量。
例如:
particleshape1.position = rot(position,%26lt0,1,0,0.1);
假定在场景中有一个单粒子物体,它的位置是 %26lt4,6,0 ,并为它的粒子形节点写了上面的 runtime 表达
式。播放动画时,粒子将沿 y 轴旋转成一个圆形图案。
在每帧中,粒子旋转 0.1 弧度,约为 5.7 度,
unit
返回一个和向量相应的 unit 向量。
unit 向量具有和指定向量相同的方向,但是它的数量是 1 。
vector unit(vector vector)
vector 是和 unit 向量相应的向量,
例如:
unit(%26lt1,1,1
返回 %26lt0.577, 0.577, 0.577 。(完)