2016年7月28日 星期四

[Uinty] 求點到平面的投影點

假設有一個點Vector3 point和一個平面,平面的法向量為Vector3 planeNormal,且平面上存在一個點Vector3 planePoint。則以下程式碼求point在平面上的投影點Vector3 project

float distance = Vector3.Dot(planeNormal, (point - planePoint));
distance *= -1;
Vector3 vectorNormalized = Vector3.Normalize(planeNormal);
Vector3 translationVector = vectorNormalized *= distance;
Vector3 project = point + translationVector;

2011年8月9日 星期二

[Maya] 輸出一連串Obj檔

 

以下內容參考:http://www.creativecrash.com/maya/downloads/scripts-plugins/utility-external/export/c/objs-exporter—2

1. 首先先到這裡下載Maya的轉檔外掛

2. 下載來後解壓縮,將 objsExporter_v2.pyc 放到C:/Users/username/Documents/maya/2011/scripts

3. 打開 Maya

4. 打開 Window→ General Editors→ Script Editor

5. 在Python這個分頁,打上

import objsExporter_v2
objsExporter_v2.objsExporter()

image

6. 之後會出現這個視窗

image

  • Frame Range:要輸出的範圍
    • Current:只輸出現在這個frame的物件
    • Time Slider:輸出全部時間軸
    • Star/End:可指定頭和尾
  • Additional Options:其他設定
    • 我用到的只有Export as one mesh,打勾之後要輸入檔案名
  • Save To...:指定檔案路徑,注意的是這個外掛好像不支援中文,所以路徑只能有英文 (我就是卡在這裡)
  • Export:按下之後就開始輸出
  • 最後別忘了要選擇要輸出的物件 (被選到會變成漂亮的粉紅色唷)

2011年8月8日 星期一

[Maya] 使用Maya Scrip

 

◎ Maya Scrip 介紹

所謂的Scrip就有點像寫程式,就是用文字編輯的方式,讓Maya來幫你執行一些他本來沒有的功能,像我們等一下要做的:把Maya裡的骨架及其動作,輸出成.asf和.amc檔。這個功能Maya本來沒有,但可以藉由寫Scrip來達成。

◎打開Maya Scrip編輯介面

Windows→General Editors→Scrip Editor

打開之後長這樣↓

image

◎Ctrl + Enter = 執行

◎語法介紹

  • 所有的變數前面都要有$字號,沒有$代表Maya裡面的就有的
  • -query:取值 (如果沒有加的話就是設定值)
  • ``:值要用``包起來

vector $rootPos = ~joint –query –position Spine~;

把Spine這個骨頭的position存到$rootPos這個變數裡

[Maya] 骨架產生動作

 

1. 選到要設keyframe的那格

image

2. 把骨頭調到你要的角度

3. 把全部骨頭選起來

  • 可以開 Window → Hypergraph: Hierachy方便選取,要黃黃的才代表有選起來。

image

4. 按S把這一個存下來

◎IK工具

所謂的IK呢,就是可以指定位置,電腦就會自動換算成關節的角度。所以Maya提供了IK工具,讓我們可以直接指定位置,省去了手動調整角度之苦。

1. Skeleton → IK handle tool →旁邊的小方框 (會開出細節設定視窗)

image

2. 在開出來的視窗設定 IK Handle Settings → Current solver → ikRPsolver

image

3. 然後就可以點了(滑鼠會變十字型),這個時候你要做的事,就是設定IK的頭和尾,所以總共要點兩下,兩個骨頭。注意:第一下點小孩,第二下點ROOT。這樣應該就設定好了

設定好的話,在他的小孩的骨頭上,會有橘色細細的線,可以點那個線來調整小孩骨頭的位置

以章魚的右下腳為例:

image

4. 成果

image  image

[Maya] 建骨架



  • 切換成Animation模式 (在畫面右上角)

image



  • ※注意※如果是要輸出asf+amc檔的話,請先做以下設定:Skeleton → Joint Tool → 旁邊的小方框。開啟後將Orientation設為zyx,Second axis world orientation設為+y

image


image



  • Skeleton→ Joint Tool,切換成建骨架模式

  • 開始建骨架,建完了就按Enter ※注意※如果建骨架是用來要輸出asf檔的話,在編修骨架時,就只能用平移的功能,不然轉出來會不正確,切記切記!
  • 幫Joint取名字 (在畫面的右上方,藍藍一條的地方)

image image



  • ※注意※如果要輸出成asf+amc檔的話,請做以下設定:整個畫面的右邊視窗→ Object →你選到的joint的名字 →旁邊的小框框。會出現新的對話框,調整參數為:Transform Attributes → Rotate Order →zyx (可以使用script一次改會好很多喔!)

image


image



  • 如果骨頭的結構很複雜的話,可以開啟 Hypergraph: Hierarchy介面來檢視,點選 Window→ Hypergraph: Hierarchy就可以呼叫出介面

image image


◎關節的連接


以下文章參考 http://download.autodesk.com/global/docs/maya2012/zh-cn/index.html?url=files/CSS_Building_skeletons.htm,topicNumber=d28e251745


先選取要接到其他關節上的關節


image


壓住Shift,再選要接過去的哪個關節


image


接下來有兩種方式可以把骨頭接起來,一種是整串骨頭平移過去,一種事長出一個新骨頭接過去


平移法


Skeleton→Connect Joint


imageimage


長新骨頭


P


image


◎調整骨架顯示大小


可到 Display→ Animation→ Joint Size 調整


注意這只是調整顯示上的大小,並不會影響實際結構


image


image


◎Group創建方式



  1. 先選到root joint

  2. Edit → Group

2011年8月4日 星期四

[C++] 存檔相關好用程式碼

 

◎string reference◎

http://www.cplusplus.com/reference/string/string/

◎int 轉 string◎

char frame[4] = {0};
sprintf( frame, "%04d", f );

◎把讀進來的檔案裡面,各種奇怪的斜線都拿掉,且把後面的附檔名也拿掉,只留下檔名◎

string SplitFilename (const string& str)
{
size_t found;

found=str.find_last_of("/\\");   //斜線拿掉
string name = str.substr(found+1);

found = name.find(".");            //附檔名拿掉
name = name.substr(0, found);

return name;

}

所以輸入 c:\windows\winhelp.exe 將得到 winhelp

此方法參考  http://www.cplusplus.com/reference/string/string/find_last_of/

◎新增資料夾◎

偷懶使用system call

system ("md folder"); //folder = 資料夾名稱

※如果system call裡面的指令,想要用string型態的話,必須使用str.c_str(),例如 system(str.c_str());