用户名 密    码

Maya Mel教程:基础知识教程(5)

来源:school.cnd8.com 作者:XiaoYu 发布时间:2010-08-10 09:32:42 网友评论 0


        字符串 
        字符串可用"+"运算连接。 
        string $what = "Whale"; 
        string $title = "Great" + " White " + $what; 
        这将使title变量的内容为Great White Whale。 
        矢量 
        为寻址一个vector的各个成分,使用"."。 
        vector $LOS = <<1, 2, 7>>; 
        float $firstComponent = $LOS.x; // 赋值为 1 
        float $secondComponent = $LOS.y; // 赋值为 2 
        float $thirdComponent = $LOS.z; // 赋值为 7 
        标注矢量的成分: 
        vector $LOCK = <<7, -4, 9>>; 
        $LOCK = <<$LOCK.x, $LOCK.y, 3>>; // Assigned <<7, -4, 3>> 
        但不能直接给一个成分标数字: 
        $LOCK.z = 3000; // 错误 
        但是通常当访问一个矢量成分时,你应该象下面例子那样围绕它使用括号: 
        例子: 
        print $LOCK.x; // 错误 
        print($LOCK.x); 
        setAttr persp.scaleX $LOS.x; // 错误 
        setAttr persp.scaleX ($LOS.x);
        阵列 
        你可以声明一个int, float, string或vector类型的阵列。阵列的第一个序号为0 
        string $array[3] = {"first ", "second ", "third "}; 
        print($array[0]); // 显示 "first " 
        print($array[1]); // 显示 "second " 
        print($array[2]); // 显示 "third " 
        阵列尺寸可以自动地增加。 
        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. "); 
        clear($hats); 
        print("But now there are " + size($hats) + ". "); 
        以上指令的输出是: 
        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]>>; 
        (完)

搜索栏目