MEL 语言初级教程

上传人:xgs****56 文档编号:10516510 上传时间:2020-04-12 格式:DOC 页数:30 大小:27.30KB
返回 下载 相关 举报
MEL 语言初级教程_第1页
第1页 / 共30页
MEL 语言初级教程_第2页
第2页 / 共30页
MEL 语言初级教程_第3页
第3页 / 共30页
点击查看更多>>
资源描述
MEL 语言初级教程 一 作者 佚名 文章来源 网上收集 点击数 436 更新时间 2005 5 26 字体 小 大 首先 我们不讲枯燥的语法 来点实在的 打开 Maya 的脚本编辑器 Window General Editors Script Editor 脚本编辑器分为上下两栏 上栏为历史栏 显示的是曾经操作的命令及其结果以及错误 警告等 下一 栏是命令输入栏 我们可以在其中输入相关命 令 请试着输入如下语句 window vis true 然后按下 Ctrl Enter 键 是不是立即弹出了一个标题为 window1 的窗口 那么这句话是什么意思呢 window 是一个命令 表示我们要创建或修改一个窗口 vis 是 visible 的缩写 即 可见 vis 是 window 命令的一个开关 true 则是该开关的参数 意为 是 连起来说就是 创建 一个窗口并使它可见 于是我们就得到了一个缺 省的窗口 它的标题栏为 window1 名称也为 window1 但注 意名称我们看不见 但从历史栏的最后一栏 我们可以得知 下面我们更改该窗口的标题 在输入栏中输入 window e t ChinaDV window1 按下 Ctrl Enter 键执行命令 我们看到 窗口的标题变成了 ChinaDV 这句话又是什么意思呢 e 是指 edit t 是指 title 表示我们要编辑名称为 window1 的窗口 把它的标 题栏改为 ChinaDv 当然 我们也可以用一条语 句在生成窗口的同时指定窗口的标题 名称 长宽等属性 试 着输入 window w 450 h 600 vis true t Goomoo Studio myFirstWindow 并执行之 这次我们得到了一个更大的窗口 它的宽度为 450 象素 高为 600 象素 标题为 Goomoo Studio 名称为 myFirstWindow 关闭标题为 ChinaDV 的那个窗口 将窗口 Goomoo Studio 调 小些 怎么调 用鼠标呗 使之不挡住主网 格 再在命令栏中输入 sphere 并执行 看到了什么 视图的中间出现了一个 nurbs 球体 所 以 sphere 命令用来生成 nurbs 球体 下面我们要实现这样一个目的 在窗口 Goomoo Studio 上生成 一个按钮 每单击一次该按钮 在视图的随机 位置创建一个半径随机且小于 1 的 nurbs 球体 请输入以下两 行 columnLayout button l Create Random Sphere c sphere p rand 12 0 12 0 rand 12 0 12 0 rand 12 0 12 0 r rand 1 0 输入时请注意大小写和括号 分号和引号 不要输错 执行完 后 我们发现 窗口 Goomoo Studio 上出现了 一个标题为 Create Random Sphere 的按钮 那么 这两句话 又是什么意思呢 欲知详情 请听下回分解 下课 作业 单击 Create Random Sphere 按钮 1000 次 体会 mel 语 言带来的乐趣 MEL 语言初级教程 二 作者 佚名 文章来源 网上收集 点击数 487 更新时间 2005 5 26 字体 小 大 上节课的作业完成得怎样 要单击 1000 次才能生成 1000 个随 机的球 太累 今天我们的目标是只单击一次 就生成 1000 个随机的球 让我们为了此目标而奋斗吧 先解决上节课悬而未决的问题 在上节课中 我们看到了一个 很长的命令 button l Create Random Sphere c sphere p rand 12 0 12 0 rand 12 0 12 0 rand 12 0 12 0 r rand 1 0 这里 button 表示要创建一个按钮 l 即 label 也就是要指 定按钮上面的文字 而 Create Random Sphere 则 是该开关的参数 c 是 command 表示单击该按钮后所要执行的 命令 注意 这些命令要用双引号括起来 这里 我们要执行的命令是 sphere p rand 12 0 12 0 rand 12 0 12 0 rand 12 0 12 0 r rand 1 0 p 即 position 指定球的位置 用三个浮点数 即实数 分别 表示它的 x y z 坐标 这里 x y z 的值全为 rand 12 0 12 0 这是什么意思呢 rand 是一个数学函数 它可以 带一个或两个参数 当他带一个参数的时候 比如 rand 10 0 表示从 0 到 10 0 中间随机取一个值 这个 值可能是 3 14159 也可能是 2 71828 当然也可 能是 7 88414 吃点 88 试一试 当他带两个参数的时候 比如 rand 12 0 12 0 表示从 12 到 12 之间取一 个随机的实数 因此有可能是 9 600 3 245 12 0 等 你可 以在脚本编辑器中试着输入下列命令来体会 rand 函数 print rand 10 print rand 10 10 命令的结果将显示在命令历史栏中 r 即 radius 表示球的半径 我们再在命令栏中输入下面一段 window vis true columnLayout button l Create Random Sphere c int i for i 0 i 1000 i sphere p rand 12 0 12 0 rand 12 0 12 0 rand 12 0 12 0 r rand 1 0 按数字键盘上的 Enter 键执行之 然后单击窗口上的 Create Random Sphere 按钮 严正声明 死 机了可别怪我 哎呀 我要上班了 明天再写 下课 MEL 语言初级教程 三 作者 佚名 文章来源 网上收集 点击数 534 更新时间 2005 5 26 字体 小 大 执行完上次的命令后 你的机器死过去了吗 没有 那好 这 样的机器才有做三维的资格啊 在上节课的那个更长的命令中 我们看到了三个陌生的东西 int for 和 i 先从简单的讲起 i 是一个自定义的变量 它和物体的自定义属性差不多 变量 名只能由字母 数字和下划线组成 那么如何 理解变量呢 你可以把一个变量想像成一个盒子 这个盒子里 可以存放各种数据 包括整数 实数 字符串 矢量等 int 即 integer 是一个定义符 int i 指明了代号为 i 这个盒子里只能存放整数 此外比较常用 的有 float 实数 string 字符串 等 注意 在 mel 中 所有的变量前都需要加一个 符号 为什 么要这样呢 我想有两个方面的原因 一是与 Maya 系统所定义的变量区分开来 以免发生冲突 二是 A W 公 司可能缺钱花 这样规定之后呢 看着 mel 脚 本上满眼的美元 心里那个爽啊 哈哈 for 语法可就有点难了 大家要可要认真学罗 还是用实例 来讲解吧 输入 int i sum sum 0 for i 1 i 1001 i sum sum i print sum 执行完后 我们看到了结果 500500 这就是从 1 加到 1000 的 和 是否想起了高斯 第一句定义了两 个整型变量 i 和 sum i 用来控制循环 sum 用来存放相 加的结果 第二句首先将结果置零 下面就是 for 循环了 for 循环首先执行第一条语句 i 1 它将变量 i 赋值为 1 然后执行第二句 i 1001 判断 i 的值是否小于 1001 如果是 就执行 sum sum i 显然 这条语句马上被执行了 所以 sum 0 1 1 否则 就跳出循环 执行 print sum 这条语 句 然后才执行 i 这是什么意思呢 这表 示变量 i 的值自加 1 即 i i 1 所以 i 1 1 2 然后再次进 行判断 i 的值是否小于 1001 如果是 则再 次执行 sum sum i 显然 这次又执行了 sum 的值由 1 增 为 2 如此循环不已 直至 i 的值大于 1000 为止 所以这个循环一共执行了 1000 次 sum 的值也就从 1 加到 1000 说了这么多 不知大家听懂了没有 如 果还没懂 看看附图吧 另外要注意 如果循环体有多条语句 这些语句要用花括号括起来 比如 float i sum multi sum 0 multi 1 for i 1 i 51 i sum i multi i print sum print n print multi 显示结果 1275 3041409320171337600000000000000000000000000000000000000 0000000000 这段程序用来计算 1 加到 50 的和与 1 乘到 50 的积 Maya 可真 是厉害 这么大的数都算得出来 比微软的计算 器可强多了 这里 sum i 和 multi i 是 mel 的简写法 它们 分别等同于 sum sum i 和 multi multi i 此外 for 语句还有许多变异的写法 这里暂时就不涉及了 以上全是枯燥的语法 下面来点实用的东西 请在脚本编辑器 中输入 window myWindow columnLayout intSliderGrp l Number Of Spheres field true min 1 max 1000 v 50 slider button l Create Random Sphere c int k 0 int n intSliderGrp q v slider for k n k sphere p rand 12 0 12 0 rand 12 0 12 0 rand 12 0 12 0 r rand 1 0 showWindow myWindow 执行完后 得到了一个有滑动条和按钮的窗口 这样我们就可 以通过滑块来控制生成的球体的数目了 今天埃了老板 K 心情不太好 写出来的东西乱糟糟的 大家 不要扔鸡蛋罗 下课 MEL 语言初级教程 四 作者 佚名 文章来源 网上收集 点击数 365 更新时间 2005 5 26 字体 小 大 执行上节课的最后一段后 我们的程序终于有了人机交互功能 可以由用户来控制生成的球体数目了 我先 来逐句讲解上段程序的意思 第一句 window myWindow 创建一个名称为 myWindow 的窗 口 但并不立即显示出来 第二句 columnLayout 设置窗口的控件布局为列布局 第三句 intSliderGrp l Number Of Spheres field true min 1 max 1000 v 50 slider 在该窗口上创建一个 整 数滑动条 其标题文字为 Number Of Spheres field true 表示显示数值输入框 默认状态为不显 示 min 1 max 1000 v 50 表示该控件的最小值为 1 最 大值为 1000 默认值为 50 连起来说就是 创建 一个标题为 Number Of Spheres 最小值为 1 最大值为 1000 默认值为 50 名称为 slider 的整数滑条 并显示其数字输入框 第四句 很长啊 我只讲解 c 后面的命令序列 int k 0 定义一个整型变量 k 并将其值设为 0 int n intSliderGrp q v slider 这个命令有点难理解 定 义一个整型变量 n 并将其值设为 intSliderGrp q v slider 注意 这句两端并不是单引号 而是 左手单引 号 也就是 Esc 键下 Tab 键上 1 键左的 那个按键 用得很少的一个按键啦 A W 公司思想创新 令该 键发挥奇效 该键用来括住一个命令 并捕获 该命令执行的结果 有点难理解 还是举个例子来说吧 输入 string mySphere sphere 执行之 我们看到视图的中间生成了一个球体 这里 我们定 义了一个字符串数组 字符串数组可以用来存 放多个字符串 再输入 print mySphere 执行之 得到结果 nurbsSphere1 makeNurbSphere1 这和历史栏中显示的 result 后显示的结果是一样的 更进一 步 在视图的空白处单击 取消对球体的选取 然后输入 move a 5 0 0 mySphere 0 执行之 该球被移到了世界坐标的 5 0 0 处 可以看到 我们 既没有选择该球 也不知道该球的名字 但我 们仍然能够通过程序控制它 怎么样 看到 左单引号 的威 力了吧 这里 move 是移动命令 a 即 absolute 表示绝对坐标 再把思路跳回去 那么 intSliderGrp q v slider 执行的结 果是什么呢 q 表示 query 即 查询 v 表示 value 即 值 这句话表示我们要查询名称为 slider 的控件的值 并将查询的结果存入变量 n 中 剩下的就好理解了 for k n 1 k 这是 for 循环的一个变种 它的括号 中的第一条语句省略了 因为我们前面已将 k 的值指定为 0 for 循环中的第二句把 1001 改为了 n 这样 这个循环就执行 n 次 所以生成了 n 个球 也 就是用户输入的球体的数目 第五句 showWindow myWindow 这句话用来显示第一句创建 的窗口 至此 大功告成 不知我讲的你们是否都懂了 如有不懂 尽 管发问 我有问必答 几天没布置作业了 很高兴吧 今天出个难题 今天的作业 在该窗体上再添加一个滑条 用以控制生成球体 的最大半径 下课 MEL 语言初级教程 五 作者 佚名 文章来源 网上收集 点击数 441 更新时间 2005 5 26 字体 小 大 上节课布置的作业完成的怎么样啊 没完成的可是要打手心的 哟 以下是上节课练习的解答 window myWindow columnLayout adj true floatSliderGrp l max Radius field true min 0 1 max 10 0 v 1 0 rSlider intSliderGrp l Number of Spheres field true min 1 max 1000 v 50 nSlider button l Create Ramdom Sphers c int n intSliderGrp q v nSlider float r floatSliderGrp q v rSlider int i 0 for i b return a else return b 执行之 咦 怎么一点反应都没有 反应是有的 只是我们看 不见 我们已经定义了一个名为 zjsMax 的函数 存到 maya 的内存中去了 不知这样说准不准确 下面我们 再输入 zjsMax 147 258 258 369 执行之 咳 有反应了 历史栏中显示出 Result 258 369 这表示我们的第一个函数编写成功 下 面我们来剖析这个函数 proc 即 procedure 意为 函数 过程 告诉 Maya 下面 我们要定义一个函数了 float 前面讲过 意为 浮点数 实数 表示这个函数 的返回值是一个实数 zjsMax 这是函数名 函数名必须由字母 数字和下划线组成 第一个字符不能为数字 前不用加美元符号 float a float b 表示这个函数需要两个参数 而且都是浮 点数 参数必须用圆括号括起来 最后不要加分 号 下面是函数体 函数体由多条语句组成 这些语句必须用花括 号括起来 if 意为 如果 后面是条件 条件语句后不要带分号 a b a 大于或等于 b 此外还有 大于 小于 小于或等于 不等于 等于 return 返回 else 否则 这段函数体翻译成中文就是 如果 a 大于或等于 b 就返回 a 否 则 返回 b 所以 它返回的是较大的那 个实数 下面我们再编写一个函数 它需要两个参数 一个表示球体的 最大半径 另一个表示球体的数目 请输入 proc zjsRandomSphere float r int n int i 0 for i n i sphere p rand 12 0 12 0 rand 12 0 12 0 rand 12 0 12 0 r r 执行之 照旧没反应 不过我们已有心理准备啦 再输入 zjsRandomSphere 1 100 视图中立即出现了 100 个最大半径为 1 的球体 哈哈 连前面 的界面都不用了 这个函数没有声明返回的数 据类型 也没有任何返回值 这样 我们上节课的练习答案可以改成 proc zjsRandomSphere float r int n int i 0 for i b t a else t b if t c return t else return c 如果熟悉了 mel 以后 这个函数还可以写成一句话 proc float zjsMax float a float b float c return a b c b c a b c b c 嘿嘿 看不懂吧 这是 mel 中的一个独特的语句 a z a z 它 表示 a 大于 z 吗 如果 a 大于 z 则值为 a 否则 值为 z 上面那句只是把 z 换为了 b c b c 所以返回的 是三个数中的最大值 在看别人写的脚本的时候 我们经常会看到这样的符号 这样的符号 这是什么意思呢 这 是 mel 的注释符号 在 后面的语句和 之间的语句是 给人看的 maya 在执行脚本时是不理会这 些语句的 一次只能注释它后面的一行语句 而 则 能注释包含在其中的多行语句 注释语句 有什么作用呢 当我们写一个很长很复杂的脚本的时候 当时 看起来也许很简单 但经过很长一段时间后再 转回来看时 也许连自己也看不懂了 另一方面 当多人合作 开发一个程序时 注释能使别人更容易理解你 的程序和思路 从而提高程序开发的效率 我们的创建随机球的程序基本上已经完成了 现在我们要提供 给其他人实用 当然 我们不能指望别人在每 次执行这个程序时都将代码重输或复制粘贴一遍 所以我们还 需要继续完善 Let s go 首先 我们要把我们创建随机球的函数 zjsRandomSphere 改成 全局函数 这样 我们就能在 maya 的任何地方 调用它了 与你一起合作的其他人也可方便地调用它 如下 global proc zjsRandomSphere float r int n int i 0 for i n i sphere p rand 12 0 12 0 rand 12 0 12 0 rand 12 0 12 0 r r 只用在函数名前加上单词 global 即可 global 是 全 局的 全球的 之意 另外 我们还需把创建窗口的 代码放入另一个全局函数中 如下 global proc createRandomSphere window myWindow columnLayout adj true floatSliderGrp l max Radius field true min 0 1 max 10 0 v 1 0 rSlider intSliderGrp l Number of Spheres field true min 1 max 1000 v 50 nSlider button l Create Ramdom Sphers c int n intSliderGrp q v nSlider float r floatSliderGrp q v rSlider zjsRandomSphere r n showWindow myWindow 将以上两个函数复制粘贴到一个文本文件中 将文件存盘 注意 存盘后必须将文件名改为 createRandomSphere mel 也就是文件名必须与创建用户 界面的函数名相同 还要注意大小写 然后把 createRandomSphere mel 文件拷贝到以下地方 就可以方便的 使用它了 1 Windows 2000 或 WindowsXP maya scripts 2 Windows NT C WINNT Profiles my login name maya scripts 3 UNIX username maya scripts 拷贝完毕后 请重新启动 maya 按一下 左手单引号 也就 是 A W 公司令其发挥奇效的那个键 将焦点跳 到 maya 的命令行中 输入 createRandomSphere 然后回 车 瞧 我们编的窗口出现了 Enjoy it 为省去每 次输入的麻烦 你可以打开脚本编辑器 在历史栏中 选中 createRandomSphere 这一行 将其拖到 maya 的工具架上 形成一个按钮 以后只用单击该按钮就行啦 maya 真是方便呀 如果你记得创建随机球的那 个函数 你还可以直接在命令行中输入 zjsRandomSphere 0 5 500 来创建最大半径为 0 5 的 500 个随 机球 这就是在函数前加上 global 所起的作用 今天讲的东西很简单 就不布置作业了 下课 MEL 语言初级教程 七 作者 佚名 文章来源 网上收集 点击数 504 更新时间 2005 5 26 字体 小 大 作为本初级教程的最后一课 我们讲一下经典实用的弹簧曲线 的生成方法 这里要涉及到一点三角函数的知 识 高中学的 大家应该还没忘吧 先看看如何生成曲线 输入 curve d 3 p 1 0 0 p 0 707 0 2 0 707 p 0 0 4 1 p 0 707 0 6 0 707 p 1 0 8 0 执行之 视图中出现了一个圆弧 这是一个半圈的螺旋线 打 开它的 CV 点 可以看到 一共有 5 个 CV 在上 面的这行命令中 curve 表示要创建一条曲线 d 3 指定曲 线的度数 degree 为 3 p x y z 指定 CV 的位置 在以上的命令中 我们一共指定了 5 个 CV 下面我们用循环语句生成一个半径为 3 的圆 生成一个圆需要 8 个 CV int i 0 float deg 0 0 rad 0 0 deg 角度数 rad 弧度数 string curve curve p 3 0 0 定义第一点 同时捕捉 生成的曲线的名称 以便追加 CV for i 7 i 进入循环 deg 45 即 deg deg 45 旋转 45 度 rad deg to rad deg deg to rad 用来将度数转为弧度 curve a p 3 cos rad 0 3 sin rad curve 三 角函数的参数必须使用弧度数 closeCurve ps 0 rpo 1 在这段语句中 curve 命令的 a 开关表示追加 CV append 最后要指定追加的曲线名 这里为 curve closeCurve 为关闭曲线命令 ps 0 表示保护形状 preserve shape 为否 即不保护形状 rpo 1 表示替换 原有曲线 replace orignal 我们先考虑生成一个弹簧曲线需要哪些参数 首先 应该是弹 簧曲线的圈数 其次 如果弹簧曲线的上下底 半径不同 还要考虑它的上下底半径 再次 就是弹簧的旋转 方向 这里 弹簧的高度是可以不予考虑的 因为我们通过简单的缩放就可以调整 假设上半径为 r1 下半 径为 r2 圈数为 n 则该曲线所需的 CV 数为 8 n 1 每次半径的递增量为 r2 r1 8 n 1 当然 这个 值可能为正数 也可能为负数 于是 生成弹 簧曲线的函数可以写成 global proc string spiral float r1 float r2 int turns int direction string curve curve p r2 0 0 float r r2 float y 0 float deg 0 0 rad 0 0 int numOfCVs 8 turns 1 float r inc r2 r1 numOfCVs int i 0 for i numOfCVs 1 i y 0 1 y 坐标递增 r r inc if direction 1 deg 45 顺时针 else deg 45 逆时针 rad deg to rad deg curve a p r cos rad y r sin rad curve return curve spiral 1 3 8 1 执行之 视图中出现了一个上半径为 1 下半径为 3 圈数为 8 方向为顺时针的弹簧线 再执行 spiral 2 2 10 2 视图中出现了一个上下半径均为 2 圈数为 10 方向为逆时针 的弹簧线 一切就这么简单 至于其他类型的曲线 只需要动一点点脑筋 再加上一点点数 学知识 就可以全部写出来啦 有兴趣的朋友 可以试试看 我们的 mel 初级教程到这里就要结束了 以后我的水平提高了 再给大家写中级 高级教程吧 但愿我写的 这些东西能给大家一点帮助 至少不辜负我瞒着老板偷偷打这 些文字 大家如果以后在 mel 方面有什么问题 可以发 EMail zengjinsong 给我 我将尽我所能 帮你解答 今天的作业 为弹簧曲线编写图形界面 解散
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!