hey ding,
Yes, BBTouch has tracking. And it works basically like the simpler version of what you described. (ie number 2) (ie simple distance check from the last frame) (it detects, tracks and generates TUIO style cursor events)
I had given it some thought (the idea that the tracking could be ‘better’ but to perfectly honest I havent had much of an issue with it yet.)
The way i had outlined (in my head) to attack the problem was more of an motion capture/iterative system kind of approach. (my background is motion control of big physical systems, so i tend to approach everything from that direction
if we presume that the thing we are tracking has a certain top speed (which is fairly arbitrary, but really, at some point, no matter the interface, you can ‘overspeed’ it. try this with a ballpoint pen sometime, if you go too fast the pen will skip, or tear the page, or the little ball just wont spin and no ink will come out, the pen-paper interface simply is not designed to go that fast
similarly, for multi-touch you can make some assumptions about user behavior, and make some decisions about realistic speeds that still provide the system with use-able information
Similarly for the acceleration, even tho you can move fairly quickly if you want, you can’t move your hand with infinite acceleration.
I dont know if i am explaining this very well, but i will persevere anyhow
SO basically you come up with a reasonable set of parameters for ‘normal’ and even ‘fairly abnormal’ behavior and using those numbers you can interpolate your blob wherabouts much easier.
But what we are really talking about here is the skipping problem. (frame drop or finger-bobble type) naturally we want the user to be unaware of these kinds of things which is why we have complicated tracking
In my idea: to overcome the skipping probem; we use the above real world speeds and accelerations that we have figured out for the surface to guess where each blob will be on any give frame based on the previous movement, and then use that interpolated position to ID them
So instead of the blobs being a certain distance between the current point and their last known point, you instead interpolate a movement radius based on the prior speed and direction. this will give you basically a ‘cone of movement’ (in 3d space, in 2d it is more like a pie-shape) and if the detected blob falls into this space then you can ID it as a continuation of the previous blob.
this approach is not a thorough as the touchlib approach (ie you can still confuse it if you try hard enough) but the tradeoff is that you only need to do a few small physics calculations for any moving blob instead of a double recursion. (or it might not work at all, i haven’t implemented it yet
Anyhow, I am just thinking out loud here really. BBTouch tracks, but doesn’t do anything like the above (not yet in any case, it has a top speed factor built in, and if the blob exceeds that then it ID’s it as a new blob, the cam I am using to test easily outputs 30fps so i havent ever had a real issue with skipping or going too fast (well, i can easily go too fast for it, but then I am off the surface, so it doesnt really matter anyhow
I hope that made some tiny amount of sense to someone
Sometimes I am terrible at explaining things
BTW: cerupcat, saw your post on the front page re: cool new tracker, looks great!
Cheers!
-panda