树上小屋

这是一个将艺术和工程融为一体的活计.

导航

碰撞检测技术:blockmap

参考:http://dev.gameres.com/Program/Visual/Effects/pengzhuang.htm

在<StarLoster>中,有500颗星星,要进行250000次的碰撞检测,本来没当回事,因为一次检测只不过是两次乘法,两个减法,一个加法和一个比较的运算量,但实际上确实是贞速率的瓶颈. 用上文的方法的话应该更好:

如果把世界划分成格,每个占据其中的星星都被加入它的链表,只要分别对每个格子链表中的星星做检测就可以了. 这样会比较节省时间.
 
具体地说:
划分格子的数量可以根据星星数来安排,正比关系. starpool[]可以做成静态链表,就是内存池,它提供自己的alloc和free,时间都是O(1). 然后格子的结构中只需提供一个表头结点即可. 应该可以把starpool和grid做成两个对象,它们之间用starpool::alloc()提供的星星指针进行联系. 这种实现不会多用内存,只是每贞都要重新设置链表好象不太爽,不知有没有解决方法~

posted on 2006-12-19 14:32  euclid  阅读(688)  评论(6编辑  收藏  举报