作者remmurds (雷穆爾德‧小一)
看板GameDesign
標題Re: [程式] 關於鏡頭與模型之間的最短距離
時間Thu Sep 3 08:37:42 2009
※ 引述《remmurds (雷穆爾德‧小一)》之銘言:
: 這標題好像有點難懂@@"
: 簡單來說
: 假設目前鏡頭是面對著一面牆
: 如果鏡頭太接近牆壁
: 當鏡頭在往右原地旋轉到某個角度之後
: 畫面的左側就會接觸到牆壁
: 使得牆壁在畫面上出現破格
: 反之亦然
: 總而言之
: 我想請教各位的是...
: 以DirectX或XNA為例
: 要怎麼樣能算出鏡頭與牆壁之間不會出現上述情況的最短距離呢?
: 感謝大家~
自問自答
找到了一個在XNA底下或許可行的方法(其他的我就不知道嚕)
由於camera都會有位置和方向兩個特性
利用這兩個Vector3剛好可以建立一個Ray的Structure
然後利用Ray的Intersects方法去判斷有沒有和目標物交錯
如果有會回傳目前位置與目標物之間的距離(否則會回傳null)
當使用者想要往前移動camera時
程式便事先檢查一下這個值的大小
取個適當的距離以避免發生如果鏡頭旋轉時會有一半切入牆壁的情形
現在小弟遇到的瓶頸是關於Intersects這個方法所傳入的資料
這個方法可以傳入BoundingBox、BoundingFrustum、BoundingSphere、Plane等結構
而Model物件中的ModelMesh本身就有一個BoundingSphere屬性可以利用
但以牆壁這種扁長形的物體來說顯然BoundingSphere根本不適合
應該是BoundingBox或在牆壁表面上建立一個Plane才是理想的選擇
於是我就在這裡卡等了= =a
因為建立BoundingBox或Plane都需要得知目標物的座標和大小
而我不知道該怎麼做Orz
--
「我從來都不喜歡 MFC,從一開始就不喜歡,我認為它的設計不良,
且幾乎不能算是物件導向。」
- Charles Petzold
http://reassert.blogspot.com
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.41.81
推 ferretwind:Virtools上學到的方法是用透明的方塊把攝影機包起來 09/03 17:30
→ ferretwind:然後讓方塊跟牆壁做碰撞,不知道在這可不可行~ 09/03 17:31