• 沒有找到結果。

第四章 物理虛擬實驗室之程式設計

第一節 外力與加速度的關係

實驗室的場景以3D實體呈現(如圖4-1-1),實驗數據下的底圖介面採用2D Frame製作,圖檔利用Photoshop軟體設計後輸出成Png的副檔名形式存取,再匯 入Virtools使用。滑車(car)、軌道(slide)、實驗桌(desk)、偵測器(sensor)、

斜面菱柱體等…實驗室物件(如圖4-1-2)是利用3ds Max進行物件建模而成。預設 的滑車會靜置於軌道一端,經由鍵盤啟動,因受滑車本身沿軌道面的重力分力影 響,滑車會沿菱柱體斜面上的軌道向下滑動,先後經過兩偵測器,此時選用偵測 速度及時間等相關的建構模組與參數,測量滑車經過偵測器時的速度及所耗費的 時間,再透過四則運算的參數及V=V0+at的物理公式,計算本實驗中滑車的加速度。

圖4-1-2 力與加速度間關係的裝置物件名稱

二、力與加速度間關係的實驗程式設計

本虛擬實驗的試驗過程是藉軌道角度改變,探討軌道上滑車的加速度與外力 關係,實驗的程式設計共分五大部分,如下所列:1.滑鼠鍵盤操控與攝影機;2.

啟動滑車方式;3.物件物理化;4.數據顯示;5.偵測滑車移動。以下就程式部分 說明設計方法。

1. 滑鼠鍵盤操控與攝影機:

a.滑鼠鍵盤操控的程式設計

在虛擬實驗室中,操作者以第一人稱介面控制預設攝影機的各方向前進或後 退,所以必須使用3D Frames,因此新增FrameMouseCam的物件屬性為虛擬實驗室 的前導,並且加入﹝Object Slider﹞,當中的參數Radius設定距離為1.5,群組 對象設定為obstacles,目的是避免當FrameMouseCam前進時穿越obstacles,取 而代之是讓攝影機和obstacles之間接觸時會產生滑動現象。此部分所運用的程 式設計圖如圖4-1-3,程式模組及功能說明如表4-1-1。

圖4-1-3 攝影機與滑鼠控制程式設計圖

預設的攝影機,其移動方式採滑鼠與鍵盤上下左右鍵控制,茲說明如下:在 場景中點按滑鼠左鍵可以向四周轉動拖曳,程式設計如圖4-1-4。其中﹝Get Mouse

Displacement﹞模組為取得滑鼠的相對位移動量,並且將模組﹝Rotate﹞參數設 定滑鼠操作時以X軸與Y軸為軸心轉動,而Division的Rotation Speed轉動量參數 設定為1000,並執行迴圈產生持續轉動現象。

表4-1-1攝影機與滑鼠控制的程式設計模組表

模組名稱 模組功能

Object Slider 物件與對應內群組的所有物件產生滑動現象 Mouse Waiter 等待一個滑鼠行為來啟動事件

Switch on Key 設定複數按鍵來啟動對應輸出的事件 Get Mouse Displacement 取得滑鼠游標的相對運動

Translate 移動一個3D實體 Rotate 3D實體依照指定座標軸旋轉 Per Second 控制物件每秒的行為演算速度 Set World Matrix 設置一個3D實體的世界參數矩陣

Set parent 設置一個3D實體的父階層 Set As Active Camrea 啟動指定攝影機為現行的攝影機

Prioity 設定多個輸入信號的優先權

圖4-1-4 Rotate-mouse的程式設計圖

鍵盤操作部分,上下鍵可以控制攝影機前進與後退,以圖4-1-5 ForWard的 程式設計為例,﹝Switch on Key﹞其中之ㄧ的流程輸出選擇Up按鍵,後連接線 觸發Forward程式設計圖,在Forward程式設計圖中﹝Per Second﹞設定前進的速 度 為 50 , 且 使 用 ﹝ Translate ﹞ 設 定 FrameMouseCam 位 移 的 方 向 , 此 時 需 將

圖4-1-5 Forward程式設計圖

圖4-1-6 Rotate-key程式設計圖

Multiplication 參 數 選 擇 Z=1 , 完 成 後 操 作 Up 鍵 , FrameMouseCam 便 會 牽 引 MouseCam前進。使用同樣方法、原理設計Back程式設計部分。

鍵盤左右方向鍵可以控制實驗室螢幕左右旋轉,圖4-1-6 Rotate-Key程式設 計圖為其設計方法。﹝Switch on Key﹞的Left鍵流程輸出後經由﹝Per Second﹞

In端輸入,Out端輸出後連接線觸發﹝Rotate﹞,並設定以Y軸為軸心旋轉,所以 參數中Y設為1,單位旋轉的角度設定25,經Multiplication運算並將當中參數更 改為Y=-1,且使參數輸出後(POut)連接另一組Right鍵的﹝Per Second﹞參數輸 入端(PIn),之後連接線輸出觸發﹝Rotate﹞便完成設計。此時觸按鍵盤Right鍵 及Left鍵便產生向右或向左旋轉的要求。

b.攝影機程式設計

本實驗室計有三部攝影機,名稱分別為MouseCam、TopCam,RightCam,在 MouseCam script中,

我們運用﹝Set As Active Camrea﹞,讓 MouseCam預設為的攝 影機,且使用﹝Set

World Matrix﹞及﹝Set parent﹞模組,將FrameMouseCam的世界參數座標系統 設定為MouseCam的世界參數座標及其父階層,目的為控制並設定實驗室的初始鏡 頭畫面。除預設攝影機外,位於實驗室上方及右側的攝影機會呈現追蹤滑車(car) 滑動的畫面,但必須使用﹝Look at﹞模組,並連接成迴圈產生追蹤效果,其參 數如圖4-1-7,當中Position設定為(X:0 ,Y:10 ,Z:0),以讓鏡頭取得實驗室適 宜的畫面,並需將Referential的對象設定為攝影機追蹤的對象car,Following Speed則設定為10%。

另外實驗室可經由淡入淡出切換三部攝影機的鏡頭畫面,實驗室上方攝影機 的程式設計部分說明如圖4-1-8,所運用各模組如表4-1-2,右側的攝影機程式設 計方法如同設於上方的攝影機。

圖4-1-8 場景上方(Top Level script)的攝影機程式設計圖 圖4-1-7 ﹝Look at﹞模組的參數設定

表4-1-2 場景上方攝影機的程式設計模組表

模組名稱 模組功能

Set As Active Camera 選擇啟動的攝影機 Key Waiter 等待一個按鍵來觸發事件 Get Current Camera 抓取目前啟用的攝影機名稱 Camera Color Filter 淡入淡出切換畫面時設定的顏色

Linear Progression 指定的時間輸出漸變值

Sequencer 當「In」被觸發第n次時,會觸發第n個「Out」

Parameter Selector 切換攝影機

在程式設計方面,Top Level Script程式編輯區中先拖曳﹝Set As Active Camera﹞,設定啟動的攝影機為MouseCam,並連接至﹝Key Waiter﹞等待觸發事 件,Key參數則設定空白鍵(Space鍵),後流程輸入至﹝Get Current Camera﹞抓 取目前場景中啟用的camera名稱,且利用﹝Camera Color Filter﹞產生淡入淡 出切換至另一畫面前的黑影,同時﹝Get Current Camera﹞out端輸出後輸入至

﹝Linear Progression﹞In端,並需形成迴圈且參數時間Ms:500,目的是用來 輸出漸變值 的時間給 ﹝Camera Color Filter﹞,另Value與﹝Camera Color Filter ﹞ 的 Density 參 數 則 需 連 接 。 這 時 運 用 ﹝ Sequencer ﹞ 及 ﹝ Parameter Selector﹞產生當按空白鍵時畫面會出現黑影後切入右側攝影機畫面,其中

﹝Parameter Selector﹞的參數設定為pIn0:Right Cam、pIn1:Mouse Cam,目 的是當再次按空白鍵,畫面會切回預設的MouseCam。

操作時觸按空白鍵(Space)產生MouseCam與RightCam鏡頭互相切換,需要在

﹝Parameter Selector﹞out端流程輸出後再次輸入至﹝Set As Active Camera﹞

及﹝Linear Progression﹞,目的是再回到﹝Key Waiter﹞等待觸發事件,形成 一固定物件導向的循環週期,讓MouseCam與RightCam鏡頭因按空白鍵而畫面互相 切換。

圖4-1-10﹝Modify Physics Globals﹞模組的參數 圖4-1-9 啟動滑車方式的程式設計圖

2. 啟動滑車方式:

啟動滑車方式採Enter鍵開啟滑車的移動,其程式設計如圖4-1-9,所運用的 模組表列如表4-1-3。Car script程式設計圖中,﹝Key Waiter﹞的參數設定Enter 鍵啟動滑車滑動,同時間物件car將被物理化及受﹝Modify Physics Globals﹞

重力的影響,並啟動﹝Chrono﹞的時間偵測。﹝Wait Message﹞連接線在out端 輸出後將會輸入至﹝Chrono﹞的off端,目的是當滑車抵達sensor01(偵測器1)

或sensor02(偵測器2),sensor1 script程式中的stop1及sensor2 script程式中 的stop2訊息會分別傳送給兩﹝Wait Message﹞,此時﹝Chrono﹞會停止時間的 偵測,並經由﹝Text Display﹞將滑車從出發至兩偵測器所花費的時間數據分別 顯示在虛擬實驗室的螢幕上。

此外﹝Modify Physics Globals﹞的參數內容如圖4-1-10,Gravity(重力加 速度) 設定地球表面物體的

重力場加速度為-981cm/s 2 , Physics Time Factor

(時間因素)=1,而Simulation Rate(模擬狀況)最適宜的設 定介於66~200之間,若數字

過低,滑車會呈現搖晃劇烈的模擬狀態,在本虛擬實驗室設定為66。

表4-1-3 啟動滑車的程式設計模組表

模組名稱 模組功能

Wait Message 等待接受一個訊息

Modify Physics Globals 調整物件的屬性特性,包含重力大小與重力方 向、物理時間因素、擬真性等參數設定

Chrono 精確定時器

Text Display 在3D環境中顯示文字

3. 物件物理化:

實驗裝置中,除滑車(car)加入﹝Physicalize﹞物理化模組的設定外,本研 究室如圖4-1-11,所包含的實驗桌(desk)、軌道(slide)、地板(Ground)、擋板 (stop)等物件,皆需套用﹝Physicalize﹞物理化模組,目的是讓實驗中物件能 模擬真實情境中的物理狀態,使物件具備重力、摩擦力、彈性等物理性質。而參 數內容依各物件實際情況及特性而予以不同的設定。圖4-1-12為物理化模組

﹝Physicalize﹞的參數內容的說明。

圖4-1-11﹝Physicalize﹞物理化程式設計圖

圖4-1-12物理化之參數內容圖 Target:欲物理化的物件目標,限定3D實體。

Fixed:勾選此選項,此物件將不受重力或任何力量的影響。

Friction:設定目標物件的摩擦係數,但兩物體間滑行的狀況,是取決於兩物體 彼此的磨擦係數大小。

Elasticity:設定目標物件的彈性係數。當設定值>1,物件會持續跳動,設定 值<0.2,則會耗損電腦CPU資源。

Mass:設定目標物件的重量,單位為公噸(tons)。

Collision Group:不產生碰撞現象的群組。

Start Frozen:勾選此項,目標物件起初將不受重力影響,直到其他事件的觸發 影響。

Enable Collision:勾選此項,目標物件將會與其他物件產生碰撞的情形。

Shift Mass Center:更改目標物件的重心,一般目標物的重心是由程式自動計 算而設定。

Linear Speed Dampening:目標物件線性移動的阻尼,設定值為0時,表示沒有阻 尼;0.1時,每秒速度降至無阻尼時的九成;設定值

圖 4-1-13 Text Display 的參數設定

圖4-1-14 實驗一的實驗數據背景圖 為1時則每秒速度降為三成。

Rot Speed Dampening:目標物件旋轉的阻尼,設定值為0時,表示沒有阻尼;0.1 時,則每秒速度降至無阻尼時的九成;設定值為1時則每 秒速度降為三成。

Surface Name:目標物件的表面名稱,當物件加入﹝Physicalize﹞模組,選項內 容會自動產生物件表面名稱。

Concave:選擇Mesh的形狀設定為目標物件的外形,當物件加入﹝Physicalize﹞

模組,Mesh's Name會自動產生。

4.數據顯示:

本虛擬實驗室各項數據 的顯示,皆應用﹝Text Display﹞模組,其參數內容 設定如圖4-1-13,可就顯示的 文字或數字內容設定其座標 位置、顏色、文字大小等。

藉由2D Frame製作法匯入數據的背景(如圖4-1-1右上角圖示及圖4-1-14),但此 背景圖必須事先設計樣式及圖形大小後再匯入,匯入後並進行2D背景介面的材質 編輯,且配合實驗數據置於適宜的座標位置。

圖4-1-15 sensor02 Script的滑車移動偵測程式設計圖 5. 偵測滑車移動:

圖4-1-15為sensor02 Script偵測滑車移動的程式設計圖,軌道上設置的

圖4-1-15為sensor02 Script偵測滑車移動的程式設計圖,軌道上設置的