From: owner-3dui@hitl.washington.edu on behalf of Sandy Ressler [sressler@nist.gov] Sent: Tuesday, December 12, 2000 5:13 PM To: bowman@vt.edu; 3dui List Subject: Re: description of an IT I think it would be useful to precede the pseudo code description with an English description of the technique. Of course it depends on the purpose of the exercise. Perhaps a few images in storyboard type form as well. Again it all depends on what you're trying to do. If the intent is to create an automatic parser of the 3D interaction technique your pseudo code is understandable but I'm still confused by the purpose. Sandy ---------------------------------------------------------------------------- -- NAME: Sandy Ressler TELE: (301) 975-3549 USMAIL: National Institute of Standards and Technology FAX: (301) 975-5287 100 Bureau Drive STOP 8940 Gaithersburg, MD 20899-8940 EMAIL: sressler@nist.gov WEB: http://ovrt.nist.gov/people/sressler/sressler.html Open Virtual Reality Testbed: http://ovrt.nist.gov/ ----- Original Message ----- From: "Doug Bowman" To: "3dui List" <3d-ui@hitl.washington.edu> Sent: Tuesday, December 12, 2000 3:03 PM Subject: description of an IT > Greetings! > > I see that no one was brave enough to accept my challenge to > describe your favorite interaction technique. So, I thought > I would give it a shot. Here's a description of the Go-Go technique > (only the selection part, not manipulation). > > Remember that my goal here is for this to be understandable, > yet precise. > > --------------------------------------------------------------------- > // declarations and definitions > constant GOGOTHRESHOLD = 0.3 meters; > > object headTracker; > object handTracker; > object virtualHand; > object selectableObjects[N]; > > 3Dpoint headPosition; > 3Dpoint handPosition; > 3Dpoint virtualHandPosition; > 3Dpoint torsoPoint; > > float virtualHandDistance; > vector virtualHandVector; > > // all of this should happen before every frame is rendered > headPosition = world coord. position of headTracker; > handPosition = world coord. position of handTracker; > > // assuming y is the vertical axis > torsoPoint = (headPosition.x, headPosition.y - 0.5, headPosition.z) > > if(distance(torsoPoint, handPosition) <= GOGOTHRESHOLD) > then virtualHandPosition = handPosition; > move(virtualHand, virtualHandPosition); > > else > virtualHandDistance = GoGoFunction(distance(torsoPoint, handPosition)); > virtualHandVector = handPosition - torsoPoint; > normalize(virtualHandVector); > virtualHandPosition = torsoPoint + (virtualHandVector * > virtualHandDistance); > move(virtualHand, virtualHandPosition); > > for i from 0 to N > if(highlighted(selectableObjects[i]) > unhighlight(selectableObjects[i]); > if(intersects(boundingBox(virtualHand), boundingBox(selectableObjects[i])) > highlight(selectableObjects[i]); > --------------------------------------------------------------------- > Thoughts and comments are welcome. Is this a good level of description? > What's missing? What details are irrelevant? I didn't include many > comments on purpose so that you could see if the description itself is > understandable. > > Best, > Doug > > -- > Doug A. Bowman, Ph.D. (540) 231-7537 > Assistant Professor bowman@vt.edu > Computer Science www.cs.vt.edu/~bowman/ > Virginia Tech > >