2011年3月6日 星期日

MAX Script 教學-4



  Maxscript Editor(編輯器)

    現在起將會使用Maxscript Editor來寫程式, 但是Maxscript Listener用來測試小程式仍很好用, 也可用來做程式執行後的檢驗或除錯.

Maxscript > New Maxscript 開啟新檔

    建議開兩個資料夾, 一個用來放程式片段, 一個用來放完整的程式, 包含了界面與說明文件等.

    上次完成了隨機擺放柵欄位置, 現在要亂數設定旋轉角度.

Rotations(選轉)

    Rotation在3DSMAX裡面是有點麻煩, 要讓柵欄旋轉之前, 我們必須先建立一個旋轉物件, 然後再運用到柵欄上.

    Max有三種旋轉方式可用, Euler angles, Quaternions 與 Angleaxis. 我們這裡將使用Euler angles(尤拉角度)

Euler angles 的使用方法如下:

rotObj = eulerangles x y z


    在場景先建立一個方塊, 然後在listener中輸入:

cubeRotationObject = eulerangles 0 20 0


    現在在記憶體中儲存了一個變數(旋轉物件): cubeRotationObject

    現在要將旋轉物件cubeRotationObject 應用到場景中的物件, 選擇方塊之後在listener輸入

rotate $ cubeRotationObject

方塊y軸選轉了20度

    知道怎麼做物體旋轉了, 我們回到Script編輯器來寫程式碼並套用到柵欄.


    寫完後,按 Ctrl+E 或到 Tools->Evaluate All 來執行.



Comments(註解)

    一旦程式碼多了, 為了不會忘記程式的作用或者要將程式交給其他人時, 有必要加入註解.  "--"之後的文字都是註解.



Macroscripts

    程式寫成Macroscript, 可以用快速鍵(Shortcut key), 按鈕(button)或者是選單(menu)的方式啟動.

Macroscript的模板:

MacroScript Script_Name category:"分類" buttonText:"按鈕或選單的名稱" tooltip:"提示" (
程式本體
)

例子:

MacroScript Random_Rotate category:"Rhys Tools" buttonText:"Random Rotate" tooltip:"Random Rotate" (
  for obj in $ do -- Loop over currently selected objects (
    randXrot = random -3.0 3.0 -- create a random X rotation value and store as a variable
    randYrot = random -3.0 3.0 -- create a random Y rotation value and store as a variable
    randZrot = random -3.0 3.0 -- create a random Z rotation value and store as a variable
    rotObj = eulerangles randXrot randYrot randZrot -- Build our rotation object and store
  rotate obj rotObj -- Apply the rotation to the current obj
)
)

   寫完後儲存並按Ctrl+E, 但不會有任何反應, 只是Listener出現一個數字, 這是正常的.

   打開Customize>Customize User Interface, 到Category中找Phy Tools(程式碼中名稱可改), 如下所示, 就可以用按鈕,快速鍵或選單方式啟用.


結論

    這個小程式執行時會有兩個缺點, 一個是沒有選取物時, 會發生錯誤; 另一個是不能改選轉度數範圍(-3 ~ 3), 下一章節將會介紹.

MAX Script 教學-3
MAX Script 教學-5

沒有留言:

張貼留言

LinkWithin

Related Posts Plugin for WordPress, Blogger...