热烈欢迎新会员,新手报到帖maxscript BUG和技巧收集场景助手3.0下载飞浪脚本零起点入门
返回列表 发帖

欢迎捐助本站:支付宝账号 cgplusplus@qq.com,谢谢支持!

[原创]飞浪脚本零起点入门系列(四)MAXScript对物体的初步控制

声明:本教程为CG++原创,转载请注明出处,谢谢合作:)

 

查看上一节:MAXScript算术表达式与赋值表达式

 

飞浪脚本零起点入门系列(四)MAXScript对物体的初步控制

 

本节关键词:Macro Recorder  show(showproperties)   move  rotate  scale   point3   angleaxis   eulerangles   .   $

 

上面几节我们学习了一些程序方面的基础知识,这节开始我们学习MAXScript的实际操作,MAXScript并没有大家想像的那么神秘 ,如果你不打算深入学习,

那么掌握一些基本的MAXScript操作,对你的工作和学习肯定很有帮助,而MAXScript有时候就像说话一样简单,而且MAX还告诉 了你该怎样通过脚本控制一

些节点,这就是下面要讲的Macro Recorder。

Macro Recorder 宏记录器
现在打开MAX,找到MAXScript--Macro Recorder勾上,这样就打开了宏记录 器。现在用鼠标拉一个BOX,打开MAXScript Listener看到有什么变化没?上面

紫色区域出再了一行代码:

 

Box lengthsegs:1 widthsegs:1 heightsegs:1 length:45.7164 width:51.0396 height:28.8314 mapcoords:on pos:[-2.12866,-1.29646,0] isSelected:on
这个代码就是创建一个 BOX的代码,在MAXScript Listener工具栏上也有个Macro Recorder,勾选里面的Enabled就打开Macro Recorder,不勾选就关掉
Macro Recorder。
这个代码很长很长,是不是看的头晕呢?Macro Recorder的功能是把我们的鼠标和键盘操作转化为脚本形式记录下 来,但是有些操作是Macro Recorder无法

记录的,还有的时候它会给你一些错误的信息,并且像上面的例子一样,它生成的代码总是包含大量不必要的默认参数。因此就 不要依赖它。所以我们要学

会合理的利用这个工具。
那么简单的创建一个BOX该怎么写呢?下面删除刚才那个BOX我们来执行这个代码:
box()
这样,在世界坐标正中心就创建了一个BOX,段数都为1,长宽高都相同。那么,我要想控制它的参数怎么办呢?下面 就要讲到点语法“.”。

. 点语法 我们都知道小数里面要用到“.”,而MAXScript里面它还有个作用就是属性控制。点右边的参数是 点左边的一个属性,这样可以很方便的调用一

个节点的属性,可以多次使用“.”调用里层的属性。现在,确保你的Macro Recorder已打开,鼠标调一下刚才那个BOX属性看看 ,Macro Recorder有如下记

录:

 

$Box02.length = 31.05
$.height = 21.25
$.widthsegs = 2
$.lengthsegs = 2

这就是对应的属性用脚本控制的参数。上面的代码里面,都出现了一个符号美元符号“$”,这是MAXScript里面的明星符 号,单独出现就表示当前选择的物

体,这句$.height就表示当前选择的物体BOX的height值,$.height也是一个数值,你可以调用它,也可以给它赋值,比如如果 执行:
$.width = $.height
就是把选择物体的高height赋给宽width,就使得BOX的高和宽一致了,如果执行
$.width = $.height = $.length = 100
那么这个BOX就成正方体了,长宽高都是100。
这样,可以通过鼠 标调节BOX的参数,然后在Macro Recorder看到相应的属性,这样就可以用脚本控制物体参数了。那么有没有办法查看BOX在MAXScript的

所有属性呢?

show (showproperties)
在线手册: http://www.cgplusplus.com/online-reference/maxscript-reference/source/class_and_object_inspector_functions.htm
MAXScript给我们提供了 查看节点属性的方法,语法:showproperties <maxwrapper_object>,show是showproperties的缩写,一样用。下面 我们执行代码:
b = box() --box()只是个函数没有属性,赋值之后就产生了一个Node(节点)
show b
得 到的结果如下:


刚才b = box()语句产生了一个BOX,并且把这个BOX赋给了 b,所以可以用b来控制这个BOX的所有属性。如:
b.width = 120
b.mapcoords = on
b.name = "mybox"

上面最后一句是将物体b的名称改为"mybox",b.name可以获取b的名称,也可以设置b的名称。关于节点更多控制暂时不讲太多。
下面再回来看看“$” 符号。在线手册http://www.cgplusplus.com/online-reference/maxscript-reference/source/pathname_literals.htm
当“$”单独出现的时候,它只表示当前选择的物体,在我们只选择一个物体的时候,这个非常好用,你可 以用“$.属性”来控制选择的物体,例如现在创

建一个sphere并单独选中,用show $命令就是显示这个sphere的控制参数,马上可以通过$.radius控制它的半径。如果没选中物体能不能控制物体呢? 能。

用“$+物体名称”即是对此名称物体的调用,如我刚才创建一个sphere,名字叫Sphere01,那么$Sphere01就是指的这个物体,不管你有没有选中。

$Sphere01.radius = 20就是将此物体半径调为20。

[此贴子已经被作者于2008-11-27 15:05:53编辑过]

分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

欢迎捐助本站:支付宝账号 cgplusplus@qq.com,谢谢支持!

move rotate scale...
在线手册:http://www.cgplusplus.com/online-reference/maxscript-reference/source/node_common_properties_operators_and_methods.htm
对物体的移动,旋转,缩放操作 ,宏记录如下:

移动和缩放都用到了一个数值类型point3,
在线手册:http://www.cgplusplus.com/online-reference/maxscript-reference/source/point3_values.htm
point3 3维向量,它定义了3D空间中的一个点。表示形式是[数值,数值,数值],如 [0,0,0]就表示坐标中心,[0,10,10]就表示x轴为0,y轴为10,z轴为10


一个点,这跟以前学过的几何是一样的。
move 上面的移动和缩放都是相对操作,移动是相对以前坐标移动多少,后面的三维数 值就是说在x,y,z轴上各移动多少。相当于按下MAX底下那栏坐标框旁
边那个按钮--Absolute Mode Transform Type-In。如果想调绝对坐标值怎么办呢?找到MAXScript Listener以下选项然后勾上。

再记录操作看看。现在变成了$.pos = [-361.233,11.6649,0],如果你选择很多物体,然后执行$.pos = [0,0,0]那么所有选择的物体都回到坐标中心了 。

那么单独控制x,y,z轴怎么办呢?也很简单,$.pos.x = 100就是把选择物体X轴移到100,同理$.pos.y,$.pos.z分别控制选择物体的y和z轴位置。
scale 试下执行这一句:$.scale = [0.5,0.5,0.5],scale后面的数值意思是分别在x,y,z缩放多少倍,上面就是在各轴向缩放0.5 倍,如果$.scale =
[1,1,1]则缩放1倍,也就是不缩放了。同时你也可以用scale $ [1.5,1.5,1]就是把选择物体x,y轴放大到1.5倍,z轴不变。
rotate 旋转语法1:rotate <node> <angle> <axis_point3> 具体实例:
rotate $ (angleaxis 30 [0,0,1]) --将选择物体在z轴旋转30度
旋转语法2: rotate <node> <eulerangles> 实例:rotate $ (eulerangles 0 0 30)也是将选择物体在Z轴转30度,这两个有什么不同呢?主要是两个数值类
型的不同,我大概讲一下,能懂就懂,暂时不需要深入。
MAXScript提供3种旋转算法,上面讲了两种,还有一种是rotate <node> <quat>,这里的不同之处就是旋转的角度表示方法不同,这3个表示方法分别是:
angleaxis
在线手册:http://www.cgplusplus.com/online-reference/maxscript-reference/source/angleaxis_values_1.htm
语法:angleaxis <degrees_float> <axis_point3>
<degrees_float>是角 度,<axis_point3>是方向向量。
例如:angleaxis 30 [0,0,1]就表示z轴相对30度,用到旋转上就是z轴正向转30度,同理,rotate $ (angleaxis 30 [0,0,-1])就是z轴负向转30度 。
eulerangles
在线手册: http://www.cgplusplus.com/online-reference/maxscript-reference/source/eulerangles_values.htm
语法:eulerAngles <x_degrees> <y_degrees> <z_degrees>这个好理解,分别定义x,y,z的角度。
例如:eulerAngles 30 30 0 就表示x轴30度,y轴30度,z轴0度
quat比较复杂,简单的MAXScript操作用上面两个够了,如果大家有兴趣可看看手册:
http://www.cgplusplus.com/online-reference/maxscript-reference/source/quat_values.htm
讲了这么多,其实都只是在说原理,真正操作起来可以更简单,例如:
$.rotation.z_rotation = -30 就是把选择物体z轴转到30度,注意这是绝对值。手册里有很多参考例子,也把变形操作都列出来 了,查阅很方便,节点变
形属性在线手册:http://www.cgplusplus.com/online-reference/maxscript-reference/source/Node_Transform_Properties.htm
大家也许看到了,今天本人引用了很多手册,实际上我讲的东西在手册里都能找到, MAXScript Reference更像是一本字典,当你需要什么语句的时候,去
查一下,总会有收获。另外大家如果利用Macro Recorder也可以学到很多,包括修改器的操作它也会记录,但是有些操作是不记录的,不能过分依赖于它

好了,到这里吧,就到这里!


下节讲for,while...do循环语句,请继续关注!

 

[此贴子已经被作者于2008-9-23 11:02:46编辑过]

TOP

欢迎捐助本站:支付宝账号 cgplusplus@qq.com,谢谢支持!

顶!!!!

TOP

支持一个
简单生活 快乐就好

TOP

积极支持

TOP

&nbsp;期待能够继续

TOP

我是为了你的帖子,才注册的,所以必须强烈支持你

TOP

同上~~~我是来MAXScript扫盲的~~~

TOP

支持中.~~~~~~

TOP

期待新贴。。。。。。强烈期待

TOP

返回列表