I've been looking over various collision detection methods used over the last 5 years, and spacial partitioning seems like the best route (ie, octree) when combined with optimization based on movement and bounding-boxes.
One of the recurring topics with this, however, is the zbuffer. Several of the papers I've read note that the zbuffer is slow and redundant, not to mention being the cause of the alpha rendering bug [ticket:9] It's also the cause of many of the problems we've seen users have; multicamera hacks aside, the problem of rendering far-away objects and near objects accuratly is a serious one. Throwing a "fog" over the depth isn't an answer. With a custom BSP tree algo, and some pre-calculation on object size based on bounding box, culling can be done progressivly; small objects (such as blades of grass) are unseen fairly close to the camera, medium objects such as a shrub will only be seen a bit further away, objects such as a person further, trees further, and planets can be seen extremely far away. If objects cannot co-inhabit the same space BSP trees can be run on entities by bounding box, not per-polygon, checking for potential collisions between entities as a first step. Each entity which does not collide can have it's polygons ordered internally, greatly reducing the set of checks needed. Entities which do collide by bounding-box could then be sorted as a combined whole to see if there are collisions between the two and with the tree re-used for rendering order (so, ie, two objects wrapped around each other, but not otherwise touching, would be rendered properly). BSP rendering is the de-facto solution to the alpha-rendering problem noted in ticket:9. All in all, it seems like an excellent goal for PySoy. This is a longer-term issue than v1.0, of course, but I'm suggesting we keep this in mind as the root namespace gets cleaned and look into it further. _______________________________________________ PySoy-Dev mailing list [email protected] http://www.pysoy.org/mailman/listinfo/pysoy-dev
