CGArt-中国CGer中的绿色家园
首页 信息动态 原创排行 互动教程 资源千寻 CG人才 CGArt杂志 艺术设计 CG画廊 CG论坛 酷站欣赏 CG搜索 会员中心
水鹰脚本系列——3DS MAX 脚本入门教程(1)
来源:mediastime 作者:mediastime 编辑:Guest 发布时间:2006年09月15日 14:04:34

[ 1 ]  [ 2 ]  [ 3 ]  [ 4 ]  [ 5 ]  

2、改变对象

创建了盒子和球体对象之后,我们想知道刚才的长度、宽度等参数是否正确,应该怎么办呢?那就要访问对象的属性。诸如长度、宽度、名字、线框颜色半径等等对象所具有的特性统统称为对象的属性(Properties)。

访问对象属性的语法是由对象的路径名(PathName)后跟小数点.和属性名组成,路径名由美元符号$后跟对象在场景中的名称组成,$表示当前场景。例如访问box01的长度,输入 $Box01.length ,在脚本跟踪器窗口中返回100.0,访问Sphere01的半径,输入 $Sphere01.radius 返回 10.0 。改变Sphere01的线框颜色,输入 $sphere01.wirecolor=blue 或者输入:$sphere01.wirecolor= (color 0 0 255) 都一样。

那么要改变属性呢?只需给这些属性赋值, 输入$Box01.length=20,box01的长度变成20。我们以前数学里的等号在MAXScript中只能当作赋值符号用了。值的数据类型有几种,现在简单介绍几个典型的不同数据类型,它们是数字,字符串,数组。

数字:MAXScript区分两个数目类型:integers(整型)和floats(浮点型)。整型就是整数,例如0、1、802。浮点型就是小数,如期而至0.2、25.02、0.68。当MAXScript执行数字操作时返回和运算参数相同的类型。例如4+5返回9、而4.0+5.0返回9.0。

字符串:字符串是一个常量,需用引号标识。输入"Hello",MAXScript返回"Hello"。如果输入时没有加引号则返回undefined未定义。改变Sphere01的名字,输入$Sphere01.name="球体01",现在打开修改器面板 ,可以看到如图2-3所示的样子。

图2-3

再把名字改回来,输入:
$球体01.name="sphere01"
注意双引号不能忘掉输入。

数组:数组是一些有序的元素的集合。每个元素可以是任何类型的值,并且所有的元素都可以单独的访问。一个数组可以有两种表现形式,第一种是:#(),这是一个空数组,数组定义必须用一个数目符号#和一对括号( )组成,括号里面是数组的元素名,元素可以为一到多个,多个元素之间用逗号分开,例如,#(1,“hello”,3.14159)。想要初始化数组中的元素的时候数组有适当的形式,每一个元素的值可以是数值,一个表达式(例如、30*2),或者是一个字符串(例如,“hello”),元素的名称是不能有同名,而且元素的数目没有限制。关于数组的具体操作,以后的例子中会涉及,这里只作个简单的介绍。输入命令 #(100,"hello",pi) ,MAXScript返回 #(100, "hello", 3.14159)。

那么我们怎么可以获取更多的创建参数呢?方法有两种:
其一是在创建面板中找到对应的创建参数名,创建好的对象也可以在修改器面板中找到创建参数。如图2-4A所示。
其二,根据属性来,因为创建参数实质就是根据对象的属性而定的,没有这个属性就不可能有这个创建参数。显示对象的属性的函数是 showProperties( ),输入 showProperties $box01 ,结果在脚本监听器窗口中返回以小数点开头属性名称,冒号后面是值的类型,现在不要管它。如图2-4B所示。三者之间的关系 如图2-4所示。

图2-4

细心的读者会发现,像name、wirecolor这些属性怎么没有显示出来呢?这就涉及到节点的通用属性,可以观看另文撰写的文章“面向对象编程中的对象和类”中的“类的继承”内容,现在不要管它,随着学习后面的文章,就会知道的。

3、变换对象

改变位置:想把那个球体放在Box01上面,先看看这两个物体的坐标吧。输入 $Box01.pos 返回 [0,0,0] ,输入 $Sphere01.pos 也返回 [0,0,0] 。Box01的高度是2,Sphere01 的半径是10,要向Z轴移动球体 12 个单位才能达到目的。输入 move $Sphere01 [0,0,12], 结果球的底部刚好在盒子的上面。聪明的读者也可能会输入 $Sphere.pos=[0,0,12] ,结果也达到了目的。那么move和pos有什么不同呢?我们试着分别把$Sphere01.pos= [0,0,12] 和 move $Sphere01 [0,0,12] 分别连续输入三遍,结果区别就出来了。pos是绝对坐标,move是相对坐标。

[0,0,12] 是什么?它是个三点值,在这里,方括号中的三个值分别是X轴、Y轴、Z 轴坐标值。

缩放尺寸:据说地球以前是圆的,后来人一多就给踩扁了,变成现在的椭圆形了。现在看看我们创建的球是不是也能踩扁它。输入$Box01.scale看看结果,返回了 [1,1,1],再输入 $Box01.scale=[1,1,0.5] ,结果Box01沿Z轴方向被压扁了一半,重复输入几次,不会再有变化了。输入 $Box01.scale=[1,1,1] ,恢复原状,现在输入scale $Box01= [0.5,0.5,1],它沿XY轴方向缩小了一半,继续输入就更小了。 $Box01.scale是绝对的,
scale $Box01 [0.5,0.5,1]是相对的。输入$Box01.scale=[1,1,1] 恢复到原来的状态。数值1表示原始大小即100%,2表示200%,0.5表示50%,其它如此推算。方括号中的三个值分别对应于X轴、Y轴、Z 轴。

旋转角度:那个盒子比球大,却被球压迫在底下,很不服气,发出 $Box01.rotation=(eulerangles 90 0 0) 命令,来了个侧翻身,结果如图2-5所示。

图2-5
(eulerangles 90 0 0) 这是欧拉角度值,eulerangles 表示欧拉角度,后面三个值分别表示X轴、Y轴、Z 轴。上面称动和缩放都有两种操作方式,一种是为属性赋值而变换,另外一种是接受一个动作而变换,那么角度也不例外,输入 rotate $Box01 (eulerangles 90 0 0),结果又把这个盒子给摆平了。也能写成比较好记的方式如
rotate $Box01 90 x_axis 旋转X轴90度,rotate $Box01 90 y_axis 旋转Y轴90度, rotate $Box01 90 z_axis 旋转Z轴90度。

像上面 move、 scale、rotate 等都是函数(Function),能够完成对象的特定功能,在MAXScript中被称为对象的方法(Methods)。函数和方法实质是一样的,属于对象特有的函数都称为方法。

凡是通过改变对象属性来变换的都是绝对值,通过对象的方法来变换的都是相对值。


[ 1 ]  [ 2 ]  [ 3 ]  [ 4 ]  [ 5 ]  

共有评论15条
更多评论..
作者信息 详细信息
多拉A梦
于2008年09月01日 14:07:07

[愛/峩]旳亼請繼續,-[恨/峩]旳亼別放棄。
yigcungang

性别:女
城市:
评分:0
于2008年07月18日 15:28:58

不错.非常详细.顶一下
xiaowei
于2008年05月05日 13:56:49

thank you very much! vrey well!
xie
于2008年04月05日 13:43:45

非常感谢
于2007年12月14日 15:16:32

感谢老师为我们讲这些来之不易的知识
评论人:
验证码:
内容:
 
about us advertisement publish conformity service cooperate associate link site map contact us help jump to the top of page