Dr.M's Office: Sweet Reach(180,33,112)
http://slurl.com/secondlife/Sweet%20Reach/180/33/112/?title=Dr.M%27s%20O...
SLS Sandbox: Kamet(88,88,191)
http://slurl.com/secondlife/Kamet/88/88/191/?title=SLS%20Sandbox
Weco SLS: Sweet Reach(171,33,105)
http://slurl.com/secondlife/Sweet%20Reach/171/33/105/?title=Weco%20SLS
WECO Land: Jelloab(204,32,32)
http://slurl.com/secondlife/Jelloab/204/32/32/?title=WECO%20land
除了用到 link message ,改變大小跟位置之外,還需要用到 timer 來讓布幕依據時間改變,做法是再 default state 中加上一個 timer(),並將改變大小跟位置的程式碼寫在其中,當有 message 傳來時便呼叫 llSetTimerEvent 這個 function 來開始執行 timer 中的程式,llSetTimerEvent 接受一個參數來設定多少時間會啟動 timer 一次,本來是想說值設定的越小,布幕會跑得更平順,不過 lslwiki 上有提到最小只能接受 0.04 秒,聽梅老大的解釋是如果不設定個限制,server 的負載會太大,所以也只能夠這樣。當布幕升降到一定高度時要讓動作停止,這時候只需要將 llSetTimerEvent 的參數設為 0 就能夠停止 timer。
在升降的時候,因為改變大小是以中心為基準,所以假如我一次縮小 0.5 的話,改變位置就要設成 0.25,這樣才會有一邊不動一邊動效果。
還有,當物件 link 起來時,其子物件的 x, y, z 軸會跟 root 一樣,所以建議大家當要 link 物件時,最好讓他們的 x, y, z 方向統一,不然就有可能發現按上升紐時,卻是左右邊縮了起來。
小技巧是,當要縮小物件時,記得給他加上個最小值,不然可能縮到最後,物件不見了,你也點不到它。
default video texture 也是有方向的,請確保方向正確,不然影片可是會顛倒。
最後我這個布幕有個問題,就是雖然黑色部分比白色來的大,但是如果我將兩塊布幕每次縮小的數值設為一樣,照理來說應該兩塊縮小的速率應該要一樣,可是跑到最後卻發現黑色布幕會超過白色布幕,而且先接收到訊息的也是白色布幕,很奇怪的現象,所以折衷方法就是將黑色布幕縮小的值減少一些, 才勉強及格,或許我應該上傳一塊 texture 就不會有這種問題了。
按鈕部分的程式碼很簡單,短短三四行就完成了,主要就是在玩家 touch 按鈕時會將訊息送出,而接收訊息的部分就顯得麻煩了,也就是兩塊布幕的部分。為了要讓布幕有升降的感覺,很直覺的就是會讓布幕改變大小,不過在改變大小時,記住,Second Life 的物件是以中心為基準來放大縮小,改變大小時會兩邊一起來,所以只改變物件大小沒辦法達成我所希望的動作,解決辦法是,同時改變大小及移動物件,這樣看起來就會像是真實布幕一般,上面固定下面移動。
我先在 default state 之外宣告 size 跟 position 變數,然後再 entry state 時利用 llGetScale 跟 llGetLocalPos 來取得布幕的大小跟位置,記住,當物件 link 起來時,應該使用 llGetLocalPos 來取得該物件相對於 root 的位置,而非利用 llGetPos 來取得物件的絕對位置。還有一點要注意的是,因為我將俄兩個 function 寫在 entry state 中,而 entry state 是在 compile 之後即會進入的狀態,所以假如你已經寫好 code 且 compile 了,物件就會記錄當時的大小跟位置,假如這時你再利用 Second Life 中的物件工具來改變大小跟位置,變數中所存的大小跟位置並不會隨之改變,除非你再 compile 一次,不然你就會發現,明明你就已經用工具改變了大小跟位置,怎麼在跑程式的時候卻又跳回原來的樣子。
想要做投影布幕是因為再做 term project 家庭劇院組時,已經拉好了投影布幕的物件,而且利用 default video texture,也可以同時在上面顯示影片,只是沒辦法像真實的投影布幕一般可以上升下降,剛好 LAB3 是要我們實作 link message,剛好投影布幕很符合要求(按鈕送訊息給布幕來操作升降),所以順勢將它完成。
首先先將幾個物件做好,總共六個prim,分別為布幕上方的捲軸、黑色的布幕邊框、白色的布幕、紅色按鈕(上升),綠色按鈕(下降)和按鈕基座,其中有程式碼的為黑色布幕邊框、白色布幕、紅色按鈕及綠色按鈕。
一開始做的時候,不知道只要在已經 link 好的物件上,勾選"選擇連結部分",就可以選擇 link 前的物件,害我一直在 link、unlink 之間不斷循環,一下子物件大小不對,一下子位置錯誤,一下子程式碼不見等等,弄得我一個頭兩個大,有點笨。
要完成升降的功能,需要利用到 llMessageLinked(integer linknum, integer num, string str, key id) 和link_message(integer sender_num, integer num, string str, key id) 這兩個 function,一個為傳送訊息,一個為接收訊息,我在紅色按鈕及綠色按鈕中皆放有兩個llMessageLinked,其中第一個參數為 4 跟 5(記住,當物件 link 起來之後,最後選擇的物件為此 link 物件的 root,以 1 表示,倒數第二個以 2 表示,以此類推),而紅色按鈕的第三個參數為 "up",也就是將 "up" 訊息傳出,綠色則為 "down",讓黑白布幕收到訊息時可以判斷到底要上升還是下降。
摸了一下3D MAX後
又看了一下論壇
發現大家也蠻推MAYA
因為MAYA做動畫跟電影特效會比較適合
而3D MAX比較適合做3D的圖
所以又去碰了一下MAYA
發覺MAYA比較難操作
而且功能比較多
但MAYA看起來比較有系統
但在台灣好像用3D MAX的人比較多
所以今後可能會先學3D MAX吧
這次的Term Project我們主題是:線上虛擬復健室
主要是使用了QAvimator來製作.bvh檔上傳至Second Life製作動畫
在SandBox中也建立了一個小間的復健室
並自己製作或是搜尋其他免費的物件來讓這間復健室內容更為豐富
途中也面臨了不少的困難
像是SandBox的Prims容納數不足
因此我還必須將學長的物件退回
還有QAvimator所製作出的animation跟我最後上傳至Second Life的動作有落差
導致我所製作的animation無法達成我所預期的動作
梅老師是說可能是因為我們所使用的外部軟體設定上的問題
的確我所使用的QAvimator是非常陽春的軟體
如果能利用Maya再搜尋所應設定的參數...etc
應該最後就能完成我所預期的復健動作吧
而Second Life上傳一個動畫必須花費L$10
也是我最後無法完整的完成復健室每個復健動作的一大障礙
另外還有Domain Knowledge的不足
復健有分不同的種的復健
物理性的、光學性的、電療...etc
因為我們都不是專業人士
沒辦法將一個真正復健室的動作完整呈現
再加上美工能力的不足
最終呈現出來的結果還是有所落差
不過還是有學到了不少東西!!