作者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
1F:推 ferretwind:Virtools上学到的方法是用透明的方块把摄影机包起来 09/03 17:30
2F:→ ferretwind:然後让方块跟墙壁做碰撞,不知道在这可不可行~ 09/03 17:31