3D脚本 maxscript入门教程.docx
- 文档编号:28227106
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:35
- 大小:34.20KB
3D脚本 maxscript入门教程.docx
《3D脚本 maxscript入门教程.docx》由会员分享,可在线阅读,更多相关《3D脚本 maxscript入门教程.docx(35页珍藏版)》请在冰豆网上搜索。
3D脚本maxscript入门教程
3D脚本maxscript入门教程
maxscript入门教程
内容图文并茂,语言高度概括,文采形象生动,思路清晰可见;
指出要害,抓住关键,透彻理解那些难懂的编程概念;
不用担心数学基础很差,无需害怕英文单词不懂,只需初中数学知识,把英文单词作图形符号看待,拿脚本编程当文字游戏把玩。
能够提高解决问题的能力,可以降低学习脚本的门槛。
不用费力看英文帮助,何需辛苦找编程资料,减轻学习负担,节省宝贵时间!
发挥自己的聪明才智,运用科学的学习方法,首先认真学好入门教程,然后虚心请教各位高手,
脚本编程从此不再难!
-----------------------------------------------------------------------------------------------------------------------------------------
入门教程内容结构
本教程内容分为五个部分,用几个具体的例子讲解大多数的脚本操作和语法知识。
一、MAXScript简介
1、说明什么是MAXScript以及它有什么功能,能给用户带来什么好处。
2、访问脚本,认识脚本访问的界面。
二、基本操作:
创建和修改简单的对象,给对象赋材质,从而引出下面的概念
构造器:
创建对象的语法称为构造器;
路径名;
数据类型:
它们是数字,字符串,数组。
对象和类(层级树);
属性和方法;
变换;
函数和方法的联系;
通用属性和动态属性;
显示属性的函数;
一些常用的方法;
三、创建和操作具有复杂关系的对象,从而引出下面的概念
变量,变量和属性的关系;
对象引用:
引用另外一个对象的属性值作为自己的值;
数组和集合等:
数组,数组和变量的关系;
运算符和表达式;
表达式:
求值的规则。
流程控制:
选择和循环,条件选择。
制作简单的动画:
"attime",动画控制器。
四、换一角度——从大家熟悉的操作流程来学习脚本
这是对前面知识的总结,前面是对语法基本概念的学习,现在是从大家操作流程的角度来学习,一纵一横,让我们对脚本有个相对全面的了解,理论和实际相互联系。
有了前面的基础才好学下面的内容。
第一步:
创建物体
一些常用物体的创建方法。
第二步:
选择物体
select
路径名,
变量名引用
条件选择
用类和集合选择物体
组Group:
是一个虚拟对象,不是集合。
第三步:
变换物体
变换:
postion,move,scale,rotate,变换坐标系和变换中心
第四步:
修改器
第五步:
材质和贴图
第六步:
制作动画
五、基本的语法知识
现在来学语法恐怕不会那么头痛了吧?
-----------------------------------------------------------------------------------------------------------------------------------------
一、MAXScript简介
1、MAXScript
MAXScript语言是为了扩展3dsMAX
功能而专门设计的一种脚本语言,是面向对象编程语言中的一种。
用它创建的场景物体和材质与在3ds
MAX界面中创建的场景物体和材质完全对应。
可以生成自动关键帧的动画模式,并可以通过层级路径名来访问场景中的物体。
有记录在3ds
MAX界面中的交互操作过程的能力,在使用界面操作的同时可以使用MAXScript来自由创作。
可以实现3DStudioMAX的全部用途,如建模、动画、材质、渲染等。
MAXScript可以运用各种数学工具来完成高级复杂的程序设计任务。
可以对含有大量对象的集合进行操作。
例如在复杂的场景中选择物体,可以把大量物体放置在精确的位置上,例如在山或路边放置一些树木,使用MAXScript操作起来是非常的方便。
它也能将一些功能定义为界面元素,例如工具栏按钮、菜单、浮动窗口,程序面板卷帘窗。
可以建行批处理操作提高工作效率。
例如建立一次可以渲染多个场景文件的脚本程序。
可以自定义输入输出工具,可以定义修改器,渲染效果插件等。
2、访问脚本
2.1、认识MAXScript界面:
包括MAXScript卷帘窗,脚本监听器窗口,脚本编辑窗口。
2.1.1、MAXScript卷帘窗
单击命令面板中的按钮,打开应用程序面板,再单击MAXScript按钮,在应用程序面板出现MAXScript卷帘窗,如图1-1所示。
图1-1
2.1.2、脚本监听器窗口
脚本监听器又叫脚本跟踪器,单击MAXScript卷帘窗中的OpenListener按钮,也可选择菜单栏中的
MAXScript/MAXScriptListener命令,快捷键F11。
如图1-2所示。
图1-2
也可右击用户界面左下方的Mini-Listener(迷你监听器)打开脚本监听器窗口,如图1-3所示。
图1-3
脚本监听器窗口是一个命令编辑和执行窗口,它由两部分组成,上半部分为宏记录窗口,下半部分为脚本运行结果输出窗口。
如图1-4所示。
图1-4
运行脚本时,脚本监听器窗口会输出脚本的运行结果,运行正确就显示为蓝色,运行错误就显示为红色,希望你的脚本不要出现红色啊。
在窗口中可以编写新的脚本语言或对已有的脚本语言进行修改,用户输入的脚本显示为黑色。
选择主菜单中的宏记录Macro
Recorder/Enable命令,如果此时进行操作,在窗口中淡红色部分将记录所进行的操作,这就是宏记录,选择菜单栏中的File/Save
as命令可以将记录保存为一个脚本。
2.1.3、脚本编辑窗口
单击MAXScript卷帘窗中的NewListener按钮,或者选择菜单中的MAXScript/NewScrip
命令打开脚本编辑窗口,如图1-5所示。
图1-5
脚本编辑窗口是一个文本编辑窗口,你能在3ds
MAX内部打开、创建或者编辑扩展名为"*.ms"、"*.txt"和"*.dat"格式的文本文件。
调试文件时大键盘中的回车键与在记事本中的用法一样的,用来换行,当鼠标光标出现在某一行时,敲一下小键盘区的回车键,就可以执行本行程序。
如果选择多行程序,敲下小键盘区的回车键,可以执行选择被选择的程序。
如图1-6所示。
图1-6
按住鼠标左键不放,把选择的一行或者多行程序拖到3DSMAX工具栏里,将生成一个宏脚本按钮,单击此按钮,就可以运行这个宏脚本。
在脚本编辑窗口或脚本监听器窗口里调用edit()函数,可以打开脚本编辑窗口,语法是:
edit"脚本文件名称"。
例如打开
effect.ms文件:
输入edit"effect.ms",运行就可以打开这个脚本文件。
二、基本操作:
创建和改变对象
1、创建简单的对象
传说天地未创建之时,是为无极,及有太极,则宇宙处于浑沌状态,就象鸡蛋一样盘旋着,在空间上无大无小无内无外,在时间上追溯到远古时代也无法知道其起源,所以把这种状态称为盘古,后来又不知那个好事者把盘古这种状态变成了一个传说——“盘古开天地”,结果“盘古”变成了一个宇宙创始人。
老子给它起了个玄之又玄的名字——道。
盘古一斧头就把这混混沌沌蛋给劈开了,结果太极判为天地,一气分为阴阳,中国就有了太极八卦和阴阳学说。
自从盘古开辟天地之后,则万物具备,轻清者上升为天,重浊者下降为地。
在天成象,在地成形,仰观天有日月星辰,俯察地有人鱼鸟兽,花草树木,种类繁多,数量庞大,不可计数。
人类为了征服大自然,掌握这些事物,就给它们进行了分类,把相同的对象归类到具有相似特征的类之中,类与类之间如果还有相似的地方,那么就把这些归纳到更高层次的类中,例如把植物类和动物类归纳到生物类。
面向对象编程中类和对象的概念就是试图对上面这些比较符合人类认识规律的概念进行描述。
好吧,现在就来看看在MAXScript中谁是宇宙万物的创造者——“盘古”。
选择菜单中的MAXScript/NewScrip
命令打开脚本编辑窗口,如果想调试程序,跟踪程序执行结果,也可以把脚本监听器窗口打开,输入
boxlength:
100width:
100height:
2
sphereradius:
10segments:
16
按Ctrl+E键或者选择脚本编辑窗口菜单中的File/EvaluateAll
命令执行程序,还可以用鼠标全部选定,敲小键盘上的回车键执行程序(以后都按此方法,不再说明)。
----------------------------------------------------------------------------------------------------------------
结果创建了一个盒子和一个球体,如图2-1所示。
现在单击工具栏按名字选择对象按钮,在弹出的对话框中会出现这个盒子的名字“Box01”和球体的名字“Sphere01”,这是默认的名字。
图2-1
boxlength:
100width:
100height:
2
这一行代码就是一个box构造器,它创建了一个长度为100、宽度为100、高度为2的box。
搞了半天,原来构造器就是“盘古”啊,伟哉,万物之始!
什么是构造器?
在MAXScript帮助中常常看到Constructor这个单词,中文意思就是构造器。
但是帮助中只是说明构造创建对象的语法,但并没有专门的内容来说明构造器这个概念。
我把它归纳如下:
在MAXScript中创建对象的语法就叫作构造器,其实质就是调用函数来创建对象,所以可以把它看作是一个函数调用
。
也可以说是用一个抽象的类产生一个具体的对象。
这个函数的名称就是基类的名称,所谓基类就是不能再分的类。
我们创建对象都是从基类开始的。
Box就是个基类,它的上一级就是几何类,再上一级就是节点。
如果学过JAVA,那么知道创建一个box对象的语法是:
BoxBox01=newbox();
呵呵,学习MAXScript可舒服了,只需输入box()就可以构造一个box了,面且大小写,分号都可以不用注意。
当我们手工单击创建面板中的Box按钮,然后在视窗中完成一个长度为100、宽度为100、高度为2的Box时,在程序内部就调用了Box(
)函数,就是把我们在界面中的操作转换成了boxlength:
100width:
100height:
2这行内部代码。
构造器由两部分组成,基类名和创建参数。
整个构造器就是一个函数调用,函数名box就是基类的名字。
创建参数由参数名后跟一个冒号:
和参数值组成,如图2-2所示。
图2-2
如果调用函数没有输入任何参数,那么必须在类名后加上一对英文(
)括号,例如box(),将创建缺省参数的盒子。
知道构造器原理后就知道怎么创建其它的对象了,例如创建球体,输入
sphereradius:
10就可以了。
注:
由于对象和类、层级关系等详细概念的内容比较复杂,将另立一文讲述。
请看>>
2、改变对象
创建了盒子和球体对象之后,我们想知道刚才的长度、宽度等参数是否正确,应该怎么办呢?
那就要访问对象的属性。
诸如长度、宽度、名字、线框颜色半径等等对象所具有的特性统统称为对象的属性(Properties)。
访问对象属性的语法是由对象的路径名(PathName)后跟小数点.和属性名组成,路径名由美元符号$后跟对象在场景中的名称组成,$表示当前场景。
例如访问box01的长度,输入
$Box01.length,在脚本跟踪器窗口中返回100.0,访问Sphere01的半径,输入$Sphere01.radius返回
10.0。
改变Sphere01的线框颜色,输入$sphere01.wirecolor=blue
或者输入:
$sphere01.wirecolor=(color00255)都一样。
那么要改变属性呢?
只需给这些属性赋值,
输入$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=(eulerangles9000)
命令,来了个侧翻身,结果如图2-5所示。
图2-5
(eulerangles9000)这是欧拉角度值,eulerangles表示欧拉角度,后面三个值分别表示X轴、Y轴、Z
轴。
上面称动和缩放都有两种操作方式,一种是为属性赋值而变换,另外一种是接受一个动作而变换,那么角度也不例外,输入rotate
$Box01(eulerangles9000),结果又把这个盒子给摆平了。
也能写成比较好记的方式如
rotate$Box0190x_axis旋转X轴90度,rotate$Box0190y_axis旋转Y轴90度,
rotate$Box0190z_axis旋转Z轴90度。
像上面move、scale、rotate
等都是函数(Function),能够完成对象的特定功能,在MAXScript中被称为对象的方法(Methods)。
函数和方法实质是一样的,属于对象特有的函数都称为方法。
凡是通过改变对象属性来变换的都是绝对值,通过对象的方法来变换的都是相对值。
4、复制对象
这个世界有辛辛苦苦的实干家,那么就有快快活活的投机者。
现在我们也来个偷懒的做法,嘿嘿,不要认为是模仿啊。
输入copy
$sphere01pos:
[30,30,12]name:
"球体2":
,结果在盒子的斜角处产生了一个新的名字为"球体2"球体。
如图2-6所示。
图2-6
copy也是对象的方法,它调用了另外一个函数作为参数,这个函数就是前面提到的构造器。
把被调用的函数称为位置参数(Positional
Arguments),把被调用的参数称为关键词参数(Keyword
Arguments)。
因为位置参数只能放在固定的位置上,所以称为位置参数,关键词参数是成对出现的,写法就像
“关键词:
值”,和上面提到的创建参数一样,没什么区别。
概念是真多,把人给搞晕了,其实搞通了不过是那么回事。
关联和引用复制就是把copy分别替换为instance、reference。
5、其它方法:
select选择对象、deselect取消选择、delete删除对象、hide隐藏对象,unhide取消隐藏、
freeze冻结、unfreeze取消冻结。
示例:
select$Box01--选择Box01
deselect$Box01--取消选择Box01
delete$*--删除场景中所有对象
6、赋予材质
自从有了你,世界更美丽。
给盒子铺上几块地砖,输入:
$box01.material=standardMaterialdiffusemap:
(tiles())
showInViewport:
true
结果如图2-7所示
图2-7
$box01.material是Box01的材质属性,材质也是一个对象,所以标准材质的构造器是
standardMaterialdiffusemap:
(tiles())showInViewport:
true
standardMaterial是标准材质类名称,关键词参数diffusemap:
(tiles())是材质的diffusemap
贴图,其值tiles()是平铺贴图类型,showInViewport:
true
表示是否在视窗中显示。
其值是true或者false,true(真)表示显示,false(假)表示不显示。
这个材质并没有在材质编辑器24个球中出现,但点击获取材质按钮在场景选项中可以找到它。
如果想把材质编辑器插槽中的材质球中的一个赋给Sphere01,输入
$sphere01.material=meditmaterials[1]--[1]表示第一个,[2]表示第二个
$sphere01.material.diffuse=yellow--设置diffuse的颜色为黄色
$sphere01.material.specularLevel=20--设置高光级别为20
结果如图2-8所示
图2-8
窍门:
参数太多不易掌握,可选择主菜单中的宏记录Macro
Recorder/Enable命令,然后手工在界面中操作,再观看宏记录,此时不禁心中窃笑,哈哈,MAXScript你想难倒我,没门!
关于材质方面的知识太多,不是一时所能掌握的,在此只作过初步了解吧。
7、修改对象
addmodifier$box01(bend())
$box01.widthsegs=10m
$box01.bend.benddir=0
$box01.bend.bendaxis=0
$box01.bend.angle=-180
像对象的修改器、空间变形等属性,并非对象所固有的,而是后来通过另外的对象附加上去的属性,MAXScript中把它称为动态属性(dynamic
properties)
8、定义自己的脚本
上面输入的脚本可以保存下来,以备以后再使用。
选择脚本编辑器菜单中的File/Save
命令,保存到指定的文件夹中,等以后要用时选择File/Open命令可以进行编辑,也可以选择File/Run命令运行脚本。
----------------------------------------------------------------------------------------------------------------
三、创建和操作具有复杂关系的对象
常量;
变量,变量和属性的关系;
运算符和表达式;表达式:
求值的规则,输入的每一行代码都是表达式,因为它总是返回一个值。
对象引用:
有的书叫双词模式(引用另外一个对象的属性值作为自己的值。
);
数组和集合等:
数组(一个系列的数据组合),数组和变量的关系;
流程控制:
选择和循环,条件选择。
闻着春天里散发出来的花香味,忍不住去欣赏那些美丽的花朵,它们被一些长得井然有序的绿叶衬托着;穿过长着杂乱小草的林间小道,惊动了树上正在戏耍的鸟儿,它们飞向两旁看似有序又无序的青松翠竹林中,瞬间不见了踪影;走在马路上,两旁定有一排排梧桐或扬柳,如果你的眼力好的话,发现树的皮肤上有好多忙忙碌碌的蚂蚁;白天工作了一天,夜晚来到一个幽静的小河边,抬头望着满
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 3D脚本 maxscript入门教程 脚本 maxscript 入门教程
![提示](https://static.bdocx.com/images/bang_tan.gif)