MaxScript授课大纲.doc_第1页
MaxScript授课大纲.doc_第2页
MaxScript授课大纲.doc_第3页
MaxScript授课大纲.doc_第4页
MaxScript授课大纲.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

l MaxScript概述MaxScript是3dsmax和Autodesk VIZ内置的脚本语言,它的形式非常自由和简单,它比较浅层,也几乎不涉及内存与数据的操作MaxScript有很多结构是非常有特色的。如坐标系关联、原始物体和材质结构;可自动设置关键帧的动画模式;还可以使用表示3dasmax层级关系的路径名来访问场景物体。MaxScript的语法非常简单,标点符号和书写规则都非常少。通过与命令行侦听器窗口交互,把工具安装为按钮,提取操作记录为脚本命令,可以大大的提高工作效率;MaxScript可以足够充分的能力完成复杂的程序任务,因为它拥有矢量、矩阵、四元数等数据类型进行代数运算。MaxScript非常适合大数量对象的工作。例如编写复杂的选择程序,构建星空MaxScript与3ds Max界面的整合性非常好。可以把脚本打包进工具面板的卷帘窗或非模块化的窗口里,或者与工具条的按钮、菜单、四元菜单或快捷键相关联。MaxScript还可以扩展或替换物体、修改器、材质、贴图、渲染或大气效果的用户界面。还可以创建自定义的网格物体、修改器和渲染特效用户界面。这种良好的整合可以使技术部门针对特定任务用脚本编写工具,使艺术家或动画师可以象在原有的3dsmax用户界面中那样通过点击式操作使用脚本工具MaxScript支持格式化文本和二进制数据的输入和输出。所以,可以直接从3dsmax场景文件中直接输出文档的结构报告,或者从其他程序管理软件中读取包含场景布局、名称、贴图细节等内容的文件。外部文件和目录访问功能使MaxScript十分适合执行数据收集和分析、形成数据结构和渲染文件等的报告,通过内置的命令行和壳的支持与其他程序或脚本语言进行交互访问。MAXScript还可以被用作高层场景的输出工具。通过输出包含物体生成命令的脚本,使输出对任何高层3dsmax结构的应用成为可能。MaxScript甚至可以用来把max高版本文件转换到低版本的max中去,而不必求诸第三方数据格式入门部分一 认识Maxscript界面打开脚本编辑器打开脚本侦听器Mini脚本侦听器在侦听器中查看操作记录在操作记录中提取脚本编辑器中运行脚本数字键盘回车单行运行或运行被选择语句Ctrl+e 执行整个脚本二入门实例书写规则书写形式非常自由,对大小写不敏感,一个表达式结束后进行换行时不需要加分号2+54*6-7-9a+b与A+B是一样的换行,并可以在任何操作符后面打断语句换行,MaxScript会读取代码直到读取一个完整的表达式a+b*c /d - e + f * g / ha+b * c / d - e +f * g / h错误的换行a + b * c / d - e +f * g / h用斜杠换行a + b * c / d e +f * g / h如果在同一行中书写多个表达式,用分号分开1+2;23;sin 30注释,使用双减号如Sphere()-创建一个球体变量赋值变量赋值的语法变量名=变量值注意变量的名的书写由下划线或英文字母开头,可以包含任意数量的英文字母或数字变量值可以是一个数,字符串或表达式给变量赋予一个字符串mystring = This is my string.通过输入变量引用变量的值Mystring为这个变量重新赋值mystring = This is not your string.Mystring基本的运算35.0*2PiPi系统预定义的全局变量4/3*pi*2.53字符串操作a=”MaxScript ”b=”is a freeform language”a+b随机数的生成Random 1 100Random 0,0,0100,100,100自运算X=5X=x+1可以写作x+=1加减乘除都可以使用这种快捷方式X*=2x-=2x/=2对物体进行操作Box()b=box()b=box length:20 width:20 height:20对指定的物体进行操作$box01Select $box01改变物体颜色b.wirecolor=greenb.wirecolor=color 0 0 255b.pos=0,0,15b.scale=1,1,2move b 0,0,-15scale b 1,1.5,1rotate b 30 z_axisrotate b -30 0,0,1修改物体特有的属性b.height=30b.width=10b.length=10查看物体属性的两种办法Showclass()使用方法 Showclass “box.*” 可以在脚本侦听器窗口中显示 box类的属性Box : GeometryClass 10,0 .height : float .length : float .lengthsegs : integer .width : float .widthsegs : integer .mapcoords : boolean .heightsegs : integerShowProperties()使用方法 showProperties b需要针对专门物体复制物体Copy b复制时可以修改一些通用属性,如位置,旋转,线框颜色Copy b pos:(b.pos+0,10,0) wirecolor:green使用循环语句进行阵列P=b.posFor i=1 to 50 do ( P.x+=50 Copy b pos:p)-For i=1 to 50 do ( P.x+=50C=Copy b pos:pc.height=50+25*sin(i*360/8.0)-animate on For i=1 to 50 do ( P.x+=50 at time i(C=Copy b pos:p c.height=50+25*sin(i*360/8.0) )创建星空在+400和-400的空间中创建用 showclass()查看球类的属性For i=1 to 500 do( P=random -400,-400,-400 400,400,400 Sphere radius:(random 10 1.0) segs:4 pos:p)定义函数Fn starField size segs num:100 =(For i=1 to num do( P=random (size*-1,-1,-1) (size*1,1,1) Sphere radius:(random 10 1.0) segs:segs pos:p)函数调用Starfield 500 4 num:300MaxScript的基本结构表达式什么是表达式?在各种计算机语言的相关书籍中都有对其概念的介绍,尽管措辞不同,但都有一个共识,那就是表达式是可以对其求值的任何语句。在MAXScript中的任何结构都是表达式,都产生值,这种基于表达式的结构使MAXScript的书写非常简单,自由,而且十分直观。只要是可以书写的地方,就可以书写MAXScript的任何结构。我们用if结构来说明。例如:if a b then print c else print d我们可以把这个if表达式写进赋值语句中:x = if a b then c else d而if结构和赋值语句本身也是表达式,所以又可以把它们嵌套在一个if结构中:x = if (if a b then c else d) e then f else (g = 23)还有一个例子是块表达式。块表达式就是用圆括号括起来的一连串表达式,在语法描述中被标记为。(print aprint bif a b then print the big a)块中的表达式用换行分割,你还可以把这些表达式写到一行里,用分号(“;”)隔开:print a; print b; if a b then print the big a)块表达式本身也是表达式。它按顺序执行执行每一个子表达式,然后把最后一个表达式的值作为块表达式的值,一定要记住这一点。数据类型NumberStringBooleanClassPoint3Matrix3QuatArray1. NumberMAXScript有两种数的类型:单精度浮点数和32位整型数。这两种数的类型相当于max中使用的浮点数和整数类型。123123.45-0.003451.0e-60x0E.1abs 求绝对值,返回类型与给定的参数一致mod 。模运算,即第一个数被第二个数除后的余数,返回结果为浮点数ceil ceiling是上限的意思,返回大于或等于给定数的那个最近的整数,返回类型总是为浮点数,如ceil 15.1的结果为16floor 求小于或等于给定数的那个最近的整数,返回类型总为浮点数.如floor 1.5的结果为15三角函数MAXScript 中还有标准三角函数,角度以度为单位,返回结果为浮点数。这些三角函数是:acos -反余弦函数asin -反正弦函数atan -反正切函数atan2 -反正切函数的另一种形式cos -余弦函数cosh -双曲余弦函数sin -正弦函数sinh -双曲正弦函数tan -正切函数tanh -双曲正切函数exp - e的指数函数log - 以e为底的自然对数log10 -以10为底的常用对数pow -指数函数sqrt -平方根函数随机函数random -随机函数,返回值的类型为第一个参数的类型seed -随机种子函数角度转换函数degToRad 把度转换为弧度,结果总为浮点数radToDeg 把弧度转换为度,结果总为浮点数2. String字符串是用括号括起来的一系列字符如:s1 = Truth, Justice And The American Ways2 = The American Ways3 = All That Stuff用.count属性访问字符个数访问某个字符用索引数(下标)如 s133. BooleanClass字面常量truefalseon -相当于trueoff - 相当于falsetrue as booleanClass false as booleanClass on as booleanClass off as booleanClass 运算符not 如果布尔值为false返回true,为true则返回false and 如果两个布尔值都为true则返回true,否则为false or 如果只有其中一个为true就可返回true。And和or运算是非严格的。就是说,第一个布尔值就有可能决定整个运算的结果。在一个and表达式里,如果第一个操作数如果为false,则结果必定为false,因此,第二个操作数就不再被执行在一个or表达式里,如果第一个操作数为true,则结果必定为true,因此,第二个操作数就不再被执行这种非严格的运算特性节省了运行时间,例如你想计算sin a,但是变量a的值有可能为undefined,Point3 和Point2坐标是描述空间位置的数据类型,在MXS程序中被大量运用,如物体坐标、点的坐标、位图像素的坐标等等。二维坐标和三维坐标的书写方法:320, 240 - 二维点10, 20, 30 - 三维点a=10b=4510, 20, 30sin a, 2 * b, a2 + b2 - 包含表达式的坐标讲述下Normalize()DotcrossMatrix3这个变换矩阵是一个3D齐次矩阵,主要用于处理物体的坐标系统和变换信息。其实它的原型是4 x4矩阵构造语法:matrix3 matrix3 1,0,0, 0,1,0, 0,0,1, 0,0,0matrix3 0,-0.707107,0.707107 1.41421,0,0 0,1,1 0,0,0Quat(四元数)四元数常用于存储3ds Max物体的旋转信息。一个四元数由四个分量组成,一个实数标量部分,指定旋转的角度,另外三个指定一个虚拟的矢量,用来定义旋转轴。MAXScript中的旋转是遵循右手定则的,显然角度为正数的旋转是逆时针的,与3ds Max UI中的习惯是一致的构造器:quat x、y、z组成矢量部分,w是围绕矢量旋转的角度quat Time时间是MAXScript用来处理动画时间的。时间的解析单位为tick,解析度为每秒4800个tick,每帧160ticks。你可以使用ticks,帧,h.m.s或者标准化时间工作。你可以混合数和时间进行运算。运算时,数总是被解释为帧数,如果为浮点数,则对应的帧为小数帧。数在MAXScript内部总是被转换为tick为单位的时间再进行计算。你可以数和时间值进行数学或比较运算,用as运算符进行时间和数之间的类型转换。字面常量示例:2.5s -2.5 秒1m15s -1分15秒 2m30s5f2t -2分30秒5帧2ticks 125f -125帧 18.25f -18.25帧 1f20t -1frame20ticks 2:10.0 -2分10秒0帧 (SMPTE) 0:0.29 - 29帧(SMPTE) 0.45n - 标准化时间Array组是一个经过排序的值的集合,组中的任何一个元素都可以是任何数据类型。你可以直接在程序中书写组常量,或者用MXS提供的组函数建立一个组。组常量有两种表达方式:#( , )#() - 空组例如:#(1, 2, 3)#()#(1,foo,#(1.2, -4,#fred),1,2,3) 注意组中包含一个嵌套的组在组常量中包含表达式,如:a=10x=45#(1, sin x, a * 2.3) 输出:10.045#(1, 0.707107, 23.0)控制程序流程If 表达式If表达式根据一个判断表达式的结果来确定是否执行一个表达式。If表达式的语法有两种形式:if then else if do if a b do (print d; print e)a = (if d = 0 then 0 else a / d)Case表达式的语法是:case of ( )其中,是一个测试表达式,是一系列被标记的表达式:: default: 例如:new_obj = case copy_type.state of(2: copy $foo3: instance $foodefault: reference $foo)For循环for ( in | = ) ( do | collect ) 其中是访问时所使用变量的变量名,为了方便描述,我们把这个变量称为循环变量。循环变量从中依次取值。序列是一个值的集合。for i = 1 to 10 do print i - sequence numbersfor item in table1 do x = x + item.height - sequence an arrayfor t in 0f to 100f by 5f do sliderTime=t - sequence time (given as frames, here)bigones = for obj in $box* - you can sequence pathnames!where obj.height 100 collect obj While和 Do循环While和 Do循环都是用于重复执行一个表达式,直到判断表达式的结果为false终止。While和 Do循环是比较相似的。语法为:do while while do 只要while 的结果为true,两种循环方式就一直重复执行do 。因为do形式的循环判断表达式在后,所以,至少会执行一次;而while形式的循环开始就要执行判断表达式,所以,有可能一次循环都不执行界面编辑界面的生成主要有三种办法1. 用createDialog()生成窗口,必须有卷帘窗定义才可生成2. 用newRolloutFloater()生成浮动窗体框架,然后添加卷帘窗3. 用Utility()在工具面板中生成窗体框架,然后添加卷帘窗窗口的主要构件为Rollout。Rollout的语法:Rollout 变量名 标题字符串在Rollout中添加局部变量,鼠标工具,函数定义界面元素的常用属性一个最简单的窗口生成Rollout MyFirstUI 我的第一个窗口()createDialog MyfirstUI height:200加入界面元素Rollout MyFirstUI 我的第一个窗口(Button boxBt “Box”Button sphereBt “Sphere”)createDialog MyfirstUI height:200销毁窗口DestroyDialog()加入界面元素Try DestroyDialog MyFirstUI catch()Rollout MyFirstUI 我的第一个窗口(Button boxBt “Box”Button sphereBt “Sphere”)createDialog MyfirstUI height:100加入事件On boxbt pressed do box()On sphereBt pressed doSphere ()添加微调器修改物体属性需要声明局部变量Try DestroyDialog MyFirstUI catch()Rollout MyFirstUI 我的第一个窗口(Local b,sButton boxBt “Box”Button sphereBt “Sphere”Spinner xposSpn “x_offset” range:-999,999,0Spinner HSpn “BoxHeight” range:-999,999,25On boxbt pressed do Undo onB=box height:hspn.valueOn sphereBt pressed doUndo onS=Sphere pos:xposspn.value,0,0On xposSpn changed val do If s!=undefined do s.pos.x=valOn hspn changed val do If b!=undefined do b.height=val)createDialog MyfirstUI height:100让界面好看些group Create(Button boxBt Box width:60 across:2Button sphereBt Sphere width:60)group Par

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论