MEL 語言初級教程
《MEL 語言初級教程》由會員分享,可在線閱讀,更多相關《MEL 語言初級教程(30頁珍藏版)》請在裝配圖網上搜索。
MEL 語言初級教程 一 作者 佚名 文章來源 網上收集 點擊數 436 更新時間 2005 5 26 字體 小 大 首先 我們不講枯燥的語法 來點實在的 打開 Maya 的腳本編輯器 Window General Editors Script Editor 腳本編輯器分為上下兩欄 上欄為歷史欄 顯示的是曾經操作的命令及其結果以及錯誤 警告等 下一 欄是命令輸入欄 我們可以在其中輸入相關命 令 請試著輸入如下語句 window vis true 然后按下 Ctrl Enter 鍵 是不是立即彈出了一個標題為 window1 的窗口 那么這句話是什么意思呢 window 是一個命令 表示我們要創(chuàng)建或修改一個窗口 vis 是 visible 的縮寫 即 可見 vis 是 window 命令的一個開關 true 則是該開關的參數 意為 是 連起來說就是 創(chuàng)建 一個窗口并使它可見 于是我們就得到了一個缺 省的窗口 它的標題欄為 window1 名稱也為 window1 但注 意名稱我們看不見 但從歷史欄的最后一欄 我們可以得知 下面我們更改該窗口的標題 在輸入欄中輸入 window e t ChinaDV window1 按下 Ctrl Enter 鍵執(zhí)行命令 我們看到 窗口的標題變成了 ChinaDV 這句話又是什么意思呢 e 是指 edit t 是指 title 表示我們要編輯名稱為 window1 的窗口 把它的標 題欄改為 ChinaDv 當然 我們也可以用一條語 句在生成窗口的同時指定窗口的標題 名稱 長寬等屬性 試 著輸入 window w 450 h 600 vis true t Goomoo Studio myFirstWindow 并執(zhí)行之 這次我們得到了一個更大的窗口 它的寬度為 450 象素 高為 600 象素 標題為 Goomoo Studio 名稱為 myFirstWindow 關閉標題為 ChinaDV 的那個窗口 將窗口 Goomoo Studio 調 小些 怎么調 用鼠標唄 使之不擋住主網 格 再在命令欄中輸入 sphere 并執(zhí)行 看到了什么 視圖的中間出現了一個 nurbs 球體 所 以 sphere 命令用來生成 nurbs 球體 下面我們要實現這樣一個目的 在窗口 Goomoo Studio 上生成 一個按鈕 每單擊一次該按鈕 在視圖的隨機 位置創(chuàng)建一個半徑隨機且小于 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 輸入時請注意大小寫和括號 分號和引號 不要輸錯 執(zhí)行完 后 我們發(fā)現 窗口 Goomoo Studio 上出現了 一個標題為 Create Random Sphere 的按鈕 那么 這兩句話 又是什么意思呢 欲知詳情 請聽下回分解 下課 作業(yè) 單擊 Create Random Sphere 按鈕 1000 次 體會 mel 語 言帶來的樂趣 MEL 語言初級教程 二 作者 佚名 文章來源 網上收集 點擊數 487 更新時間 2005 5 26 字體 小 大 上節(jié)課的作業(yè)完成得怎樣 要單擊 1000 次才能生成 1000 個隨 機的球 太累 今天我們的目標是只單擊一次 就生成 1000 個隨機的球 讓我們?yōu)榱舜四繕硕鴬^斗吧 先解決上節(jié)課懸而未決的問題 在上節(jié)課中 我們看到了一個 很長的命令 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 表示要創(chuàng)建一個按鈕 l 即 label 也就是要指 定按鈕上面的文字 而 Create Random Sphere 則 是該開關的參數 c 是 command 表示單擊該按鈕后所要執(zhí)行的 命令 注意 這些命令要用雙引號括起來 這里 我們要執(zhí)行的命令是 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 鍵執(zhí)行之 然后單擊窗口上的 Create Random Sphere 按鈕 嚴正聲明 死 機了可別怪我 哎呀 我要上班了 明天再寫 下課 MEL 語言初級教程 三 作者 佚名 文章來源 網上收集 點擊數 534 更新時間 2005 5 26 字體 小 大 執(zhí)行完上次的命令后 你的機器死過去了嗎 沒有 那好 這 樣的機器才有做三維的資格啊 在上節(jié)課的那個更長的命令中 我們看到了三個陌生的東西 int for 和 i 先從簡單的講起 i 是一個自定義的變量 它和物體的自定義屬性差不多 變量 名只能由字母 數字和下劃線組成 那么如何 理解變量呢 你可以把一個變量想像成一個盒子 這個盒子里 可以存放各種數據 包括整數 實數 字符串 矢量等 int 即 integer 是一個定義符 int i 指明了代號為 i 這個盒子里只能存放整數 此外比較常用 的有 float 實數 string 字符串 等 注意 在 mel 中 所有的變量前都需要加一個 符號 為什 么要這樣呢 我想有兩個方面的原因 一是與 Maya 系統(tǒng)所定義的變量區(qū)分開來 以免發(fā)生沖突 二是 A W 公 司可能缺錢花 這樣規(guī)定之后呢 看著 mel 腳 本上滿眼的美元 心里那個爽啊 哈哈 for 語法可就有點難了 大家要可要認真學羅 還是用實例 來講解吧 輸入 int i sum sum 0 for i 1 i 1001 i sum sum i print sum 執(zhí)行完后 我們看到了結果 500500 這就是從 1 加到 1000 的 和 是否想起了高斯 第一句定義了兩 個整型變量 i 和 sum i 用來控制循環(huán) sum 用來存放相 加的結果 第二句首先將結果置零 下面就是 for 循環(huán)了 for 循環(huán)首先執(zhí)行第一條語句 i 1 它將變量 i 賦值為 1 然后執(zhí)行第二句 i 1001 判斷 i 的值是否小于 1001 如果是 就執(zhí)行 sum sum i 顯然 這條語句馬上被執(zhí)行了 所以 sum 0 1 1 否則 就跳出循環(huán) 執(zhí)行 print sum 這條語 句 然后才執(zhí)行 i 這是什么意思呢 這表 示變量 i 的值自加 1 即 i i 1 所以 i 1 1 2 然后再次進 行判斷 i 的值是否小于 1001 如果是 則再 次執(zhí)行 sum sum i 顯然 這次又執(zhí)行了 sum 的值由 1 增 為 2 如此循環(huán)不已 直至 i 的值大于 1000 為止 所以這個循環(huán)一共執(zhí)行了 1000 次 sum 的值也就從 1 加到 1000 說了這么多 不知大家聽懂了沒有 如 果還沒懂 看看附圖吧 另外要注意 如果循環(huán)體有多條語句 這些語句要用花括號括起來 比如 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 執(zhí)行完后 得到了一個有滑動條和按鈕的窗口 這樣我們就可 以通過滑塊來控制生成的球體的數目了 今天埃了老板 K 心情不太好 寫出來的東西亂糟糟的 大家 不要扔雞蛋羅 下課 MEL 語言初級教程 四 作者 佚名 文章來源 網上收集 點擊數 365 更新時間 2005 5 26 字體 小 大 執(zhí)行上節(jié)課的最后一段后 我們的程序終于有了人機交互功能 可以由用戶來控制生成的球體數目了 我先 來逐句講解上段程序的意思 第一句 window myWindow 創(chuàng)建一個名稱為 myWindow 的窗 口 但并不立即顯示出來 第二句 columnLayout 設置窗口的控件布局為列布局 第三句 intSliderGrp l Number Of Spheres field true min 1 max 1000 v 50 slider 在該窗口上創(chuàng)建一個 整 數滑動條 其標題文字為 Number Of Spheres field true 表示顯示數值輸入框 默認狀態(tài)為不顯 示 min 1 max 1000 v 50 表示該控件的最小值為 1 最 大值為 1000 默認值為 50 連起來說就是 創(chuàng)建 一個標題為 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 公司思想創(chuàng)新 令該 鍵發(fā)揮奇效 該鍵用來括住一個命令 并捕獲 該命令執(zhí)行的結果 有點難理解 還是舉個例子來說吧 輸入 string mySphere sphere 執(zhí)行之 我們看到視圖的中間生成了一個球體 這里 我們定 義了一個字符串數組 字符串數組可以用來存 放多個字符串 再輸入 print mySphere 執(zhí)行之 得到結果 nurbsSphere1 makeNurbSphere1 這和歷史欄中顯示的 result 后顯示的結果是一樣的 更進一 步 在視圖的空白處單擊 取消對球體的選取 然后輸入 move a 5 0 0 mySphere 0 執(zhí)行之 該球被移到了世界坐標的 5 0 0 處 可以看到 我們 既沒有選擇該球 也不知道該球的名字 但我 們仍然能夠通過程序控制它 怎么樣 看到 左單引號 的威 力了吧 這里 move 是移動命令 a 即 absolute 表示絕對坐標 再把思路跳回去 那么 intSliderGrp q v slider 執(zhí)行的結 果是什么呢 q 表示 query 即 查詢 v 表示 value 即 值 這句話表示我們要查詢名稱為 slider 的控件的值 并將查詢的結果存入變量 n 中 剩下的就好理解了 for k n 1 k 這是 for 循環(huán)的一個變種 它的括號 中的第一條語句省略了 因為我們前面已將 k 的值指定為 0 for 循環(huán)中的第二句把 1001 改為了 n 這樣 這個循環(huán)就執(zhí)行 n 次 所以生成了 n 個球 也 就是用戶輸入的球體的數目 第五句 showWindow myWindow 這句話用來顯示第一句創(chuàng)建 的窗口 至此 大功告成 不知我講的你們是否都懂了 如有不懂 盡 管發(fā)問 我有問必答 幾天沒布置作業(yè)了 很高興吧 今天出個難題 今天的作業(yè) 在該窗體上再添加一個滑條 用以控制生成球體 的最大半徑 下課 MEL 語言初級教程 五 作者 佚名 文章來源 網上收集 點擊數 441 更新時間 2005 5 26 字體 小 大 上節(jié)課布置的作業(yè)完成的怎么樣啊 沒完成的可是要打手心的 喲 以下是上節(jié)課練習的解答 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 執(zhí)行之 咦 怎么一點反應都沒有 反應是有的 只是我們看 不見 我們已經定義了一個名為 zjsMax 的函數 存到 maya 的內存中去了 不知這樣說準不準確 下面我們 再輸入 zjsMax 147 258 258 369 執(zhí)行之 咳 有反應了 歷史欄中顯示出 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 執(zhí)行之 照舊沒反應 不過我們已有心理準備啦 再輸入 zjsRandomSphere 1 100 視圖中立即出現了 100 個最大半徑為 1 的球體 哈哈 連前面 的界面都不用了 這個函數沒有聲明返回的數 據類型 也沒有任何返回值 這樣 我們上節(jié)課的練習答案可以改成 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 在執(zhí)行腳本時是不理會這 些語句的 一次只能注釋它后面的一行語句 而 則 能注釋包含在其中的多行語句 注釋語句 有什么作用呢 當我們寫一個很長很復雜的腳本的時候 當時 看起來也許很簡單 但經過很長一段時間后再 轉回來看時 也許連自己也看不懂了 另一方面 當多人合作 開發(fā)一個程序時 注釋能使別人更容易理解你 的程序和思路 從而提高程序開發(fā)的效率 我們的創(chuàng)建隨機球的程序基本上已經完成了 現在我們要提供 給其他人實用 當然 我們不能指望別人在每 次執(zhí)行這個程序時都將代碼重輸或復制粘貼一遍 所以我們還 需要繼續(xù)完善 Let s go 首先 我們要把我們創(chuàng)建隨機球的函數 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 是 全 局的 全球的 之意 另外 我們還需把創(chuàng)建窗口的 代碼放入另一個全局函數中 如下 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 也就是文件名必須與創(chuàng)建用戶 界面的函數名相同 還要注意大小寫 然后把 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 公司令其發(fā)揮奇效的那個鍵 將焦點跳 到 maya 的命令行中 輸入 createRandomSphere 然后回 車 瞧 我們編的窗口出現了 Enjoy it 為省去每 次輸入的麻煩 你可以打開腳本編輯器 在歷史欄中 選中 createRandomSphere 這一行 將其拖到 maya 的工具架上 形成一個按鈕 以后只用單擊該按鈕就行啦 maya 真是方便呀 如果你記得創(chuàng)建隨機球的那 個函數 你還可以直接在命令行中輸入 zjsRandomSphere 0 5 500 來創(chuàng)建最大半徑為 0 5 的 500 個隨 機球 這就是在函數前加上 global 所起的作用 今天講的東西很簡單 就不布置作業(yè)了 下課 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 執(zhí)行之 視圖中出現了一個圓弧 這是一個半圈的螺旋線 打 開它的 CV 點 可以看到 一共有 5 個 CV 在上 面的這行命令中 curve 表示要創(chuàng)建一條曲線 d 3 指定曲 線的度數 degree 為 3 p x y z 指定 CV 的位置 在以上的命令中 我們一共指定了 5 個 CV 下面我們用循環(huán)語句生成一個半徑為 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 進入循環(huán) 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 執(zhí)行之 視圖中出現了一個上半徑為 1 下半徑為 3 圈數為 8 方向為順時針的彈簧線 再執(zhí)行 spiral 2 2 10 2 視圖中出現了一個上下半徑均為 2 圈數為 10 方向為逆時針 的彈簧線 一切就這么簡單 至于其他類型的曲線 只需要動一點點腦筋 再加上一點點數 學知識 就可以全部寫出來啦 有興趣的朋友 可以試試看 我們的 mel 初級教程到這里就要結束了 以后我的水平提高了 再給大家寫中級 高級教程吧 但愿我寫的 這些東西能給大家一點幫助 至少不辜負我瞞著老板偷偷打這 些文字 大家如果以后在 mel 方面有什么問題 可以發(fā) EMail zengjinsong 給我 我將盡我所能 幫你解答 今天的作業(yè) 為彈簧曲線編寫圖形界面 解散- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- MEL 語言初級教程 語言 初級教程
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
鏈接地址:http://www.szxfmmzy.com/p-10516510.html