首页 > 设计 > 软件应用 > 正文

Maya基础教程:Maya Mel基本的教学文章(8)

2020-10-03 12:57:40
字体:
来源:转载
供稿:网友
maya mel基础教程
阵列

你可以声明一个int, float, string或vector类型的阵列。阵列的第一个序号为0

string $array[3] = {"first/n", "second/n", "third/n"};
print($array[0]); // 显示 "first/n"
print($array[1]); // 显示 "second/n"
print($array[2]); // 显示 "third/n"

阵列尺寸可以自动地增加。

int $scores[]; // 声明为一个0元素阵列
$scores[150] = 3; // 现在是151元素阵列
$scores[200] = 5; // 现在是201元素阵列 但最好不要声明过大的没用的阵列,因为它要占内存:

int $bigboy[];
$bigboy[123456789] = 2; // 危险

要除去一个阵列的所有元素可使用clear**能。要查看阵列的尺寸可使用size。

string $hats[3] = {"blue", "red", "black"};
print("there were " + size($hats) + " hats./n");
clear($hats);
print("but now there are " + size($hats) + "./n");

以上指令的输出是:

there were 3 hats.
but now there are 0.

矩阵

可以把一个矩阵想象为一个浮点阵列的阵列,或是一个浮点数据的二维阵列。矩阵产生后,它的尺寸不能改变。
企图寻址一个矩阵的不存在的元素将会出现错误。在产生矩阵时必须定义它的尺寸。

matrix $a1[][] = <<1; 4>>; // 错误: 没有说明尺寸
matrix $a2[][]; // 错误: 没有说明尺寸
matrix $a3[2][1]; // 有效: 产生 <<0; 0>>;
$a3[0][1] = 7; // 错误: 元素不存在
$a3[1][0] = 9; // 有效

声明而未标注值的矩阵,其所有元素都为0。

matrix $a4[2][4] = <<-3.4, 6, 201, 0.7; 4, 2, 9.3, 1001>>;

如果矩阵表示一个二维阵列,则第一个索引表示列;地二个索引表示行:

matrix $a4[2][4]column 0column 1column 2column 3
row 0-3.462010.7row 1429.31001

如果你把矩阵设想为一个身列的阵列,则第一个索引表示阵列,第二个索引该阵列里的索引:

matrix $a4[2][4]index 0index 1index 2index 3
float array 0-3.462010.7float array 1429.31001

物体属性

属性是场景中的物体的特征或参数。在maya中可以用许多方法建立属性-属性编辑器、mel程序、工具盒工具或表达式。
你可以设立属性去控制在工作空间中看到的虚拟的事情。
如,一个nurbs球具有属性scalex, scaley, scalez, rotatex, 等等。

物体属性名

物体属性名具有如下格式:

objectname.attributename

其中objectname是物体的名字,attributename是该物体的属性名。属性名中不要使用空格或特殊字符,可以用下划线。

产生一个名字为brawl的球:

sphere -name brawl;

可以获取它的属性的一个值:

float $yscale = `getattr brawl.scaley`;

brawl.scaley是brawl物体的scaley属性的全名。

路径

如果两个物体具有不同的父物体,它们可以有相同的名字。当说明有相同名字的物体时必须使用路径:

pathname|objectname

其中pathname物体的父物体。管道字符(|)用于区分路径。

sphere -name doughnuthole;
group -name groupa;
sphere -p 3 0 0 -name doughnuthole;

现在我们有两个叫做doughnuthole的物体,但一个有父物体groupa,另一个没有父物体。以?*噶畈桓龃砦螅?br /> 因为maya不知道哪个doughnuthole物体要设立scaley属性:

setattr doughnuthole.scaley 3.3; // error: 哪个?

你必须输入属性的路径:

setattr groupa|doughnuthole.scaley 3.3;
setattr |doughnuthole.scaley 0.3;

你可以说明物体的所有路径,用管道符进行区分:

group -name groupb groupa;

setattr |groupb|groupa|doughnuthole.scaley 1;

物体属性的可能的数据类型

每个属性有特定的数据类型。几何体, 粒子物体, maya中的其他项都具有这些数据类型的属性:

数据类型 意义 属性例 数据例

浮点小数 numbers ball.translatex 2.6, 7.0, -9.1int
整数 (...-1, 0, 1, 2...) ballshape.spansu -289, 33, 0
boolean 0或1 ball.visibilityon, off, yes, no, 1, 0, true, false

考虑一个由以?*噶畈慕凶鯢ire的粒子物体:

particle -name fire -position 7 0 7;

它可以具有以下另外的数据类型:

数据类型 意义 属性例 数据例

vector array 矢量阵列 fireshape.position
{<<3.2,?7.7,?9.1>>, <<7,?10,?2.2>>}
double array 浮点阵列 numbersfireshape.lifespan 1.333 1.666

你可以使用getparticleattr和setparticleattr指令设立矢量的元素或一个粒子系统的双阵列。

float $tmp[] =
`getparticleattr -at position fireshape.pt[0]`;
vector $particleposition = <<$tmp[0], $tmp[1], $tmp[2]>>;
(完)

[1] [2] 下一页  

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表