主题:  谁有3dmax的脚本语言教程

可风

职务:普通成员
等级:1
金币:1.0
发贴:185
注册:2002/5/19 13:44:32
#12002/6/22 7:29:57
我想学习一下3dmax的脚本语言,不知哪个网站,或者哪个出版社有脚本语言的教程,还望大家告之一二.



老张

职务:普通成员
等级:5
金币:10.0
发贴:2796
注册:2001/5/11 12:41:55
#22002/6/22 8:03:04
听说是出版过这样的书,但没有见过:)



可风

职务:普通成员
等级:1
金币:1.0
发贴:185
注册:2002/5/19 13:44:32
#32002/6/22 15:42:40
是吗。连老张都没有见过,那岂不是说明很难找到。看样子,我是完了。



行云ff

职务:普通成员
等级:1
金币:1.0
发贴:151
注册:2002/4/25 10:13:00
#42002/6/25 15:25:40
有一本叫做<<3DS MAX Script动画制作基础>>的
该书由老虎工作室的高志清 陈云龙编著
人民邮电出版社出版 2000年12月第一版
附光盘 定价35元.
哈哈,本人可不是推销书的!



可风

职务:普通成员
等级:1
金币:1.0
发贴:185
注册:2002/5/19 13:44:32
#52002/6/26 21:32:09
谢了.我一定会去看看的.



星月海

职务:普通成员
等级:1
金币:10.0
发贴:268
注册:2001/9/30 9:40:04
#62002/6/28 14:25:22
学语言???厉害厉害!!
我想都没想过!!



白雪飘扬

职务:普通成员
等级:1
金币:0.0
发贴:40
注册:2002/5/28 19:48:47
#72002/6/30 20:29:45
我这里有一点基础的,对你来说可能太简单了
也放上来给初者看看吧

________________________________________
MAX Script是用来扩展MAX功能的工具,用户可以使用它添加新的特征或设置自定义的MAX,这样它被定制成符合你的要求的样式。还可以用MAX记录用户的动作,这样以后可以使用它们减少重复的动作。还可以用Script告诉MAX你需要的场景的类型让MAX提供合适的场景,或者告诉MAX你所的事,或着输入你希望执行的指令的时候告诉它希望发生什么事情。
OK,现在我们就来讲一讲MAX Script语言的基础知识。

一:变量
MAX Script中的变量代表其他的值。当在公式中提到一个变量时,实际上指的是变量存储的值。而且除了数字以外,MAX Script中的变量还可以存储其他的内容。变量命名可以用任何名称。最好把它们命名成能帮助你记住变量代表什么含义的名称。
要把一个值赋予一个变量需要使用符号。MAX计算符号右边的表达式并把结果存储在名为X的变量中。然后只要在Listener窗口中输入X,按下Enter,就能看到X的值是多少。
例如:X=25
变量可以存储字符串,字符串是一组字符。例如:student36=”zhouyi”或者grouchy=”My name is”+student36
Point3数据类型代表三维点。下面是使用点的几个例子和注释:
POS=[0,0,0]——在(0,0,0)创建新的点
POS.X=7——把X坐标改成7
POS=POS+(6,6,6)——把它移动(6,6,6)
除了这些基本数据类型外,场景中的每个对象都有自己的数据类型。在较大对象内的数据片段被称为成员或属性。大多数场景对象都有name。Position两个变量描述对象的名称。MAX还有一个内置的特殊变量,它代表当前被选定的任何对象。这个变量用$表示。

二:流程图
当MAX开始执行脚本时,它从脚本的第一行开始处理它,然后移到下一行。对脚本的执行一直继续下去直到在脚本文件中再也没有代码行为止。MAX允许你在脚本文件中嵌入注释或注解,帮助理解正在发生的事情。要插入注释,需要文件中加两个连字符(——)。当MAX遇到双连字符时,它跳过注释和该行上的其他任何内容,移到脚本下一行。
常用的流程结构如下:
条件:
条件是控制脚本中的程序流程的一个方法。正常情况下,MAX处理每一行,无论这一行是什么,然后退出。但是当有了条件,如果表达式是Ture,则MAX只执行某些行。
条件语句遵循下面的格式:
Ifthen
是要计算的表达式,是表达式等于True时要执行的一些MAX Script。还可以用关键字else指定,如果表达式等于false,则发生什么事件。如:
if (student36=”zhouyi”)then

score=100

else

score=80


循环
循环是另外一种MAX Script语言结构(呵呵,好象无论哪一种计算机语言都有循环语句啊),让你能无视正常的执行流程。而不是每次处理脚本中的每一行,然后退出,而是MAX Script循环结构对一件事情重复做几次。例如下面所有不及格学生的成绩可以改为及格:
student=1
for score<60 do

score=60


集合阵列
MAX Script有一些非常有用的特性用来帮助用户操纵一组对象。一组对象被称为一个集。集中的变量没有特别的顺序,只是被组合在一起。下面设置了所有的名字为box开头的物体的颜色为蓝色:
A=$box*
A.wirecolor=bule

三:表达式
表达式是MAX用来做出决定的内容。表达式比较两样东西,根据比较的结果做出简单的结论。
表达式”10>1”是一个简单的表达式,它询问:“10大于1吗?”,表达式总是在提问“是or不是”类型的问题。当你在MAX Script一窗口中(或脚本内)输入表达式时,MAX计算表达式。如果表达式是正确的,则打印Ture,如果不正确,则打印false
有时需要一个对不仅有两个数据的表达式进行判断。MAX Script有and、or和not运算符帮助你构建这样的表达式。
and运算符组合两个表达式,询问“这两个表达式都是Ture吗?”如果两个都为Ture,则整个表达式等于Ture。但只要其中一个表达式为False,则整个表达式是False。而且可以使用括号来组合表达式,所以有and运算符的表达式可能是下面的样子(a<b)and(a<b)。
or运算符类似于and,但是如果其中一个表达式为Ture或两个都是Ture,则表达式的结果为Ture。如:(a==b)or(a<b)
not运算符把表达式的值从ture翻转成false或者从false翻转成ture。

四:函数的使用
MAX Script一个特性是函数。函数是小的MAX Script块,像是建立分程序的程序。例如,如果你想计算所有数值的平均值,使用函数不仅在需要计算许多数字的平均值时使脚本非常短,而且也使它更容易被阅读。如果函数不正确,那么可以在脚本的顶端对它进行修改,如果没有使用这个函数就必须查找你的脚本,找到计算平均值的每处代码,然后解决问题。

五:脚本的制作和使用
1:记录脚本
在Listener窗口中,进入Micro Reconder菜单,选定Enable。Macro Reconder现在是打开的,可以准备开始编写MAX Script。对场景中的物体进行为了一系列的操作以后,完成脚本了,在MAX Script Listener窗口中,选定Micro Reconder Enable,关闭Micro Reconder。

2:执行脚本
我们开始检查MAX Script成果。给场景添加一个其他物体,确保在进行下一步之前选定它。MAX Script Listener窗口顶端的面板中,选定所有的文本然后按下“shift=enter”告诉MAX执行MAX Script。你制作的Script就可以起作用了。



白雪飘扬

职务:普通成员
等级:1
金币:0.0
发贴:40
注册:2002/5/28 19:48:47
#82002/6/30 20:31:34
maxscript初级入门教程(一)

MAXSCRIPT初级教程(一)
曾有一段时间,许多三位工作者在掌握了较全面的技术后发现现有的软件已无法全力表现出她们的思想,他们需要一种可以随时扩展软件工作能力的工具,而Script就是他们所需的。对于三位软件的高级用户来说,可以自己开发程序外挂来帮助工作已经是必需的要求了。由于不必为了一两种软件间独有的功能而将模型转来转去,有会大大的提高工作效率,因此,现在已有为数众多的大师们来开发外挂插件了。
max4.0终于发布了,这次的变化可能是历次最大的。对于maxscript的部分自然也是加强了不少。此次特别来介绍一下这个部分。
我们通过几个较典型的例子和尽量详尽的注解来由浅入深的带大家完成这部分练习。
最简单的max外挂程序
maxscript是可以调用大部分c++函数的,和MAYA的MEL语言也有很多的相通之处。但他也有自己的书写格式及语法。max已经提供了编写script程序的工具。在utilities面版中,你可以打开maxscript的编写工具。我们现在用自己的手编写一个max的外挂,你会发现这将是一件极简单的事。先打开MAXScript,点击New Script打开编写面版,并输入如下字符:
Utility uti "My First Plug-in"


完成后按Ctrl+E运行此程序。此时,在左下脚的Listener Window中出现OK,说明max已经承认此语法并生成一个叫"My First Plug-in"的外挂程序。此时在外挂程序栏中可以调用这个程序了。

在这个程序中只有一个卷轴,因为你并没有加入任何内容在里面。下面有一个按钮,是程序自动生成的,用来关闭卷轴。我们在语句中间插入一段字符,让他生成一个按钮。
button btn_box "BOX"
现在这个程序的界面已经多了一个叫“BOX”的按钮。如图

使按钮产生功能

界面已经完成了,现在需要使按钮“BOX”产生功能。继续输入下面的字符:
on btn_box pressed do
(
box()
)
Ctrl+E运行。界面立刻更新了,试着点击一下,发现视窗中央出现一个标准的box物体。box的参数使用的是程序默认的参数值建立的,各边长为25单位,各面片断数为1。此时这个maxscript外挂程序就已经做好了。选择Save以“My Script”为名字来保存文件。光盘上会提供完整的剧本源代码,可以通过Open Script打开文件“My Script”查看源代码内容。
相信此时您应该对这个强大的功能有了一个大概的了解,并希望继续了解他的能力,我们稍候会逐渐揭开他的神秘面纱。我们在后面的内容将会接触到一些在MAXScript中常会用到的功能函数以及如何使用他们。

__________________________________________________________________________

MAXSCRIPT初级教程(二)

 

通过前面的例子,我们已经大致了解了MAXScript的一些简单功能,这回我们继续添加内容,制作更加复杂的外挂程序。
下面的步骤将生成一个简单的物体建立面版,就像MAX程序的“CRERTE MIODE”一样,不但可以通过点击按钮生成物体,还可以设置其他如:长、宽、高、半径等参数。在开始之前我们不妨考虑一下到底是制作一个什么功能的外挂,可以至少有三个功能,分别是制作一个立方体、球体和一个圆柱体,并且要可以设置他们的各种参数。那么现在先打开“Open Script”并输入下面的语句。我们将建立一个新的max外挂程序。
Utility uti "Create"
(
)
我们先将首尾的代表开始和结束的扩号写好,是为了养成一个比较好的书写习惯,以防止在运算时丢掉其中一些运算符号。确认无误后我们就可以开始加入内容了。前面我们已经自己制作一个生成立方体的按钮,这回我们还用同样的方法制作三个按钮,现在我们在扩号中加入下面语句:
button btn_box "Box"
button btn_sphere "Sphere"
button btn_cyl "Cylinder"
Ctrl+E运行程序。现在得到了含有三个按钮的插件。我们继续添加内容,并在刚才的第一行后面输入控制立方体宽度的控制器:
spinner sp_wid "width:" range:[0,100,10]
继续输入,生成控制立方体高度的控制器:
spinner sp_heibox "height:" range:[0,100,10]

继续输入,生成控制立方体长度的控制器:
spinner sp_len "length:" range:[0,100,10]
运行程序。发现在第一个按钮“BOX”下面出现了三个分别控制宽度、高度、长度的微调控制器,并且里面默认的数值均为10。
现在还要为第二个按钮“Sphere”加入两个控制半径和片断数的微调控制器,并且设置半径的默认值为10,片断数的默认值为16。在第二个按钮下面加入下面的语句生成控制球体半径的控制器:
spinner sp_radsph "Radius:" range:[0,100,10]
继续输入,生成控制球体片断数的控制器:
spinner sp_seg "Segments:" range:[0,100,16]
到目前为止已经为两个按钮加入了参数的控制器,先不忙着运算程序,先检查一下是否有遗漏或输入错误的字符和标点。并且和下面的源代码比对一下:
Utility uti "Create"
(
button btn_box "Box"
spinner sp_wid "width:" range:[0,100,10]
spinner sp_heibox "height:" range:[0,100,10]
spinner sp_len "length:" range:[0,100,10]

button btn_sphere "Sphere"
spinner sp_radsph "Radius:" range:[0,100,10]
spinner sp_seg "Segments:" range:[0,100,16]

)
检查后如果没有错误继续为第三个按钮添加参数控制器。在后面输入一下字符:

生成控制圆柱体半径的控制器:
spinner sp_radcyl "Radius:" range:[0,100,10]
生成控制圆柱体高度的控制器:
spinner sp_heicyl "Height:" range:[0,500,50]
生成控制圆柱体边数的控制器:
spinner sp_sid "Sides:" range:[0,100,10]
到目前为止,这个插件的界面就已完成了,但是看上去还有点乱的感觉,我们可以继续在添加一些辅助性的内容,让界面看上去更整齐美观一些。下面的源代码可以把这个插件分成几部分,使他们各自独立成组。这里我们使用“组”这个功能。
将按钮“Box”和控制立方体的三个控制器加入到下面代码中的两个括号之间:
group"BOX"
(
)
将按钮“Sphere”和控制立方体的两个控制器加入到下面代码中的两个括号之间:
group"SPHERE"
(
)
将按钮“Cylinder”和控制立方体的两个控制器加入到下面代码中的两个括号之间:
group"CYLINDER"
(
)



到目前的全部界面部分的源代码已经写好,可以对照下面的语句检查一遍:

Utility uti "Create"
(
group"BOX"
(
button btn_box "Box"
spinner sp_wid "width:" range:[0,100,10]
spinner sp_heibox "height:" range:[0,100,10]
spinner sp_len "length:" range:[0,100,10]
)
group"SPHERE"
(
button btn_sphere "Sphere"
spinner sp_radsph "Radius:" range:[0,100,10]
spinner sp_seg "Segments:" range:[0,100,16]
)
group"CYLINDER"
(
button btn_cyl "Cylinder"
spinner sp_radcyl "Radius:" range:[0,100,10]
spinner sp_heicyl "Height:" range:[0,500,50]
spinner sp_sid "Sides:" range:[0,100,10]
)
)
现在可以再次运行这个外挂,运行结果如图。会发现整个界面的感觉已经非常整齐规矩,很有“感觉”了。在制作完界面以后,我们会继续深入研究maxscript,并把这个外挂程序做完

作者:Mickhan
上传人:mickhan
电邮:webmaster@vrdesigner.com
主页:http://www.vrdesigner.com



可风

职务:普通成员
等级:1
金币:1.0
发贴:185
注册:2002/5/19 13:44:32
#92002/6/30 21:16:18
多谢关照.
其实我对语言没有什么太多的知识,只是想了解一下而已,上面的知识对我很有帮助.以后还望多多照顾.



vervethe

职务:普通成员
等级:1
金币:0.0
发贴:28
注册:2002/7/1 20:55:15
#102002/7/1 20:56:04
语言很重要!多谢!



白雪飘扬

职务:普通成员
等级:1
金币:0.0
发贴:40
注册:2002/5/28 19:48:47
#112002/7/2 18:09:43
不用客气