230 likes | 356 Views
郭銘家 楊耀 鈞 Advisor: Damon Shing -Min Liu. Physics-Based Domino Exhibiting and Layout Designing System 基於物理模擬之骨牌展示與設計系統. Introduction. 為了讓骨牌擺放能克服現實世界中種種不利的因素,我們製作一套能設計骨牌並能模擬骨牌倒榻情況的系統,協助使用者設計骨牌而不受一般環境與人為因素影響。
E N D
郭銘家楊耀鈞 Advisor: Damon Shing-Min Liu Physics-Based Domino Exhibiting and Layout Designing System基於物理模擬之骨牌展示與設計系統
Introduction • 為了讓骨牌擺放能克服現實世界中種種不利的因素,我們製作一套能設計骨牌並能模擬骨牌倒榻情況的系統,協助使用者設計骨牌而不受一般環境與人為因素影響。 • 在這個專題實驗中我們將研究如何有效率地建立骨牌數位影像資料,並探討如何使用適當的模擬方式,使骨牌的反應趨近真實世界的模式,並讓使用者能夠利用此系統迅速設計骨牌並且能適當的調整其中的任意骨牌。
Environment • 開發系統:Windows XP • 開發平台:Microsoft Visual Studio 2008 • 相關軟體工具(函式庫): • OpenGL(Open Source Graphics Library) • Bullet 物理引擎(Bullet Physics Library)
Frame 使用Bullet Physic的函式庫來建構初始世界,設定Bullet環境參數:重力、摩擦力; 建立Bullet物件,設定個別大小位置與質量,套用Bullet函式來計算與模擬骨牌相互的物理動態和反應參數。 將得到的參數使用OpenGL繪出計算後的骨牌;擺放和模擬的空間場景,並提供功能選單與使用者互動。
OpenGL Texture • 圖片放大 • 填充像素,選擇的貼圖圖素只需要一個,並且使用線性內插的方式來處理。 • 圖片縮小-Mipmap • 將圖片分成多個的階層儲存。 • 第一層-原本的圖片 • 第二層-縮小1/2 * 1/2 後的圖片 • 第三層-縮小1/4 * 1/4 後的圖片 • 第 N 層- 1x1個像素的圖片
OpenGL Texture • 圖片縮小-Mipmap • 優點:提升畫面品質,並且增加執行效率。 • 缺點:增加記憶體的負擔,約花費原貼圖大小的30%記憶體。 • 本專題使用Mipmap中Trilinear縮小取出最接近大小的兩圖層,在從其中取出最近的四個點取權重做平均。
Methodology Design Domino • 本專題提供讓使用者即時的設計骨牌路線,依據使用者規畫的路線展示在主視窗中。 最初的演算法 • 依照使用者所給予的個點做為展示出的骨牌位置。 • 缺點: • 沒有賦予骨牌的旋轉角度。 • 骨牌間距的問題。 • 路線轉彎處的問題。
Methodology Design Domino 演算法I • 使用者所畫的路線各點為取樣的點。 • 計算每一點與下一個點相連的線段斜 率,使用arctan回推出 與Z軸夾角,做為骨牌 旋轉角度的依據。
Methodology Design Domino 演算法I • 將每一個點與前後點做距離處理。 • 骨牌與骨牌間的距離理想值為½的骨牌高。 • 兩個點的距離 < ½的骨牌高: • 刪除後面的點。 • 兩個點的距離 > ½的骨牌高: • 該兩點之間填入骨牌。 • 骨牌的間距為1/2骨牌高。 • 各個骨牌的旋轉角度使用線性內插法計算出。
Methodology Design Domino 演算法I • 問題: • 無法解決骨牌路線轉角大於30度的問題。
Methodology Design Domino 演算法II 1.路線上前後兩點取中點,集合新取得的點,成為新路線。 2.進行骨牌間距判斷。 3.重新計算骨牌旋轉角度。 重複步驟1~3 。
Methodology Design Domino 演算法II 重複運算將使得其路線轉角圓弧化。
Methodology Design Domino 演算法II • 黑色為原本有轉角的路線,在不斷運算下會呈現紅色的圓弧路徑,繼續運算則呈現綠色路徑。
Methodology Design Domino 演算法II 優點: 能夠處理的路線轉角趨近150度。 缺點: 因為取中點會使點的總數少一,若原先取樣數目太少,會導致展示出的路線缺乏圓弧,而以線段顯示骨牌路徑。 路線轉角大於150度無法處理。
Demo Menu Generate domino 在Menu選擇Generate domino 的模式 使用滑鼠點擊,在該位置 產生一個骨牌。
Demo Menu Generate domino wall 在Menu選擇Generate Wall 的模式 在木質地板上使用滑鼠點擊,在該位置產生一道骨牌牆。
Demo Menu Delete domino 在Menu選擇Delete的模式 在骨牌上使用滑鼠點擊,該 骨牌以重力反轉向上飛行後 消失。
Demo Menu Rotate domino • 在Menu選擇Rotate domino • 的模式 • 在骨牌上使用滑鼠連擊兩次,該骨牌產生一個箭頭作為選取欲旋轉骨牌的標記。 • 移動滑鼠,骨牌的面向會根據滑鼠的位置做改變。 • 最後再點擊一次滑鼠,做為確定。
Demo Menu • Switch mouse format • 切換兩種使用滑鼠移動骨牌的操作模式: • 以平移的方式移動。 • 以點擊到的點為支點的方式移動。 • Switchlens format • 切換兩種視角移動的操作模式: • Page Up:視角向前移動 • Page Down:視角向後移動 • 模式 I : • Up :視角向上移動 • Down :視角向下移動 • Left :視角向左移動 • Right :視角向右移動 • 模式 II : • Up :視角向上旋轉 • Down :視角向下旋轉 • Left :視角向左旋轉 • Right :視角向右旋轉
Demo Menu Design domino • 在 Menu 選擇 Design • 出現【Design Drawing】的視窗。 • 提供使用者以滑鼠拖曳的方式規劃骨牌路線。 • 綠色:正在設計的骨牌路線 • 黃色:以確定的骨牌路線 • 使用【Design Drawing】視窗的 Menu選擇路線設計的處理方式。 Design Drawing : 將綠色變為黃色,並將計算結果展示在主視窗中。 將綠色設計的路線清除, 保留以設計黃色的路線。 : 主視窗
Demo Menu Restart & Special 特殊的場景: 骨牌牆爆破 造成因素: 碰撞的物件質量過小 特殊場景: 骨牌牆 將一切的狀態回到初始的設定
END demo Thanks for listening.