作者NDark (K1下次要买摇滚区)
看板GameDesign
标题Re: [程式] 2D游戏中的碰撞
时间Thu Aug 6 23:14:20 2009
※ 引述《yan04870449 (一片死寂)》之铭言:
: 可能画的有点烂...不过书上大概是这样子讲的,右图的判断比较好写
: ,但是相对的精准度比较低,左边的当然精准度就提高了,但相对就要
: 多写好几行CODE,,这两种我大概都知道怎麽写,但是我想知道如果真
: 的要写到完成是图与图相碰(圆与圆碰在一起)才算碰撞的话,理论上来
: 讲应该要怎麽做,或者是说有什麽方向可参考呢?
比较传统的作法都是两个要素 距离 + bounding box
比较精准的作法就是再加上 三角面vs三角面
可以想想 你的圆如果最後是方块图片内的不定形状 还会不会这麽容易比对?
前面我有提过碰撞在3D空间中的几种方法.
不过你这case比较特殊.我想到了一个特殊作法.
整个画面是固定大小的,ex.固定像素1024*768.
你可以用一个资料结构来做一个简易的select buffer.
当有透明度图片存在某个位置时,就在那些不透明的像素位置
填入select buffer对应的像素位置.
->填物件ID
然後当每一片图片填完之後.
就可以知道某一个像素有没有同时被多个图片同时占据=多个物件碰撞了
概念如此.
然後再来就是要加速整个过程,也尽量用较少的记忆体跟搜索的时间.
可以用down sample的方式来降解析度.
也可以用显示卡来帮你作select buffer的写入你再取回来判断.
另外其实大部分情况是没碰撞的(select buffer的堆叠<2),这也是一个加速的关键.
不过最後说不定你写个
"2D图片的图片内容框线转成3Dmesh的转换器"
然後交给现成的物理引擎还比较快XD
--
"May the Balance be with U"(愿平衡与你同在)
http://vision.twbbs.org/~ndark/
视窗介面游戏设计教学,讨论,分享。欢迎来信。
视窗程式设计(Windows CLR Form)游戏架构设计(Game Application Framework)
游戏工具设计(Game App. Tool Design )
电脑图学架构及研究(Computer Graphics)论文代读(含投影片制作)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.208.162
1F:推 yan04870449:受教了!谢谢。 08/06 23:25
2F:→ reizarc:比较新的显示卡都有 occlusion query 的功能 08/07 02:01
3F:→ reizarc:不过不知道用在这种case合不合适 看到selection buf想到的 08/07 02:02
4F:→ Splash5:有点像z buffer的感觉 08/07 15:07