If the time between updates is less than the interpolation lag, the interpolation code will fail and you'll get herky-jerky movement. The default lag is 250 in units of csTicks (which I believe are basically milliseconds). You can set the interpolation lag globally with iVosA3DL::SetInterpLag. Unfortunately, I didn't implement it as a per-object thing, though that change wouldn't be too terrible to do.
The other side of the issue is the maximum velocity setting, which has both a global default *and* can be over-ridden on a per-object basis. The functions for doing so are iVosA3DL::SetInterpMaxVel and iVosObject3D::SetInterpMaxVel respectively. There's also a iVosObject3D::SetUseMaxVel to enable or disable the "maximum velocity" limit for interpolation on a particular object. Maximum velocity is in units of "world units per csTick" and has a default setting of 0.03, which is based on my own observations of how fast avatars walk and how much network jitter there was. If you have anything moving faster than avatars, you will probably have to give them a higher maximum velocity (or just turn it off). Setting the maximum velocity to "0" has special meaning. For objects, it means "use the default maximum velocity." For the global default setting, it means "by default, turn the maximum velocity limit off." Of course, you can also disable interpolation for an object entirely by using iVosObject3D::SetInterpEnabled. And you can disable it globally using iVosA3DL::SetInterpEnabled. The idea of putting maximum velocity or update frequency hints as Vobject properties is something I thought about, but figured I'd defer to you guys to actually make changes in the A3DL standard :) -- I think it's probably a good idea though, at least for maximum velocity. BTW, there is no maximum velocity limitation for orientation updates. They are currently always interpolated. Also, the global interpolation lag applies to position, orientation, and action events equally. (Action events aren't "interpolated," but simply delayed so they stay in sync with the interpolated movement). -Ken ps: I didn't do too much testing with overriding the maximum velocity settings, so be warned :) ----- Original Message ----- From: "Reed Hedges" <[EMAIL PROTECTED]> To: "VOS Discussion" <[email protected]> Sent: Sunday, July 08, 2007 1:10 PM Subject: [vos-d] Interpolation in TerAngreal > > I've been writing some code that makes some objects fly around and Ken's > interpolation code makes it look nice and smooth. However, in doing so > I experimented a bit with position update frequency, wondering what the > slowest rate I could use is, especially when the velocity I was trying > to show was constant. There's effectively a maximum speed that the > interpolation achieves, so that if you update less than several times a > second (e.g. once or twice a second), the object has a really jerky > start-stop motion. > > Is there a quick fix for this? Or should we just let that issue be, and > later add concepts of velocity and acceleration to A3DL? > > Would it be possible to add position-interpolation-speed and > orientation-interpolation-speed properties to Object3D? Or > position-update-freq-hint and orientation-update-freq-hint? These would > be advisory parameters for the interpolation code, that would let it > choose object velocity in the interpolation. I like the idea of > update-freq-hint, because it's not implying anything other than what the > server side is doing (updating the property periodically). However, the > client side would always be one step behind, so it might make things > look pretty glitchy. > > Thoughts? > > Reed > > > > > > _______________________________________________ > vos-d mailing list > [email protected] > http://www.interreality.org/cgi-bin/mailman/listinfo/vos-d > _______________________________________________ vos-d mailing list [email protected] http://www.interreality.org/cgi-bin/mailman/listinfo/vos-d
