PDA

View Full Version : Eliminate Sideways Motion when colliding w/Objects


Feuereissen
06-26-2009, 01:03 PM
Hi all,

I was wondering how to stop moving sideways when one backs up in a 3D environment and hits a wall. I am working with a VR environment in which users move about using a joystick or the PPT Tracking system. The World has been set up so that a transparent, circular wall has been set around the scene for users not to leave the bounds of the world we want to present. Every time the user backs up and hits the wall a slight sideways motion changes the position of the camera in the 3D world. Is there a elegant and quick way to detect the collision for that particular wall and inhibit this sidway motion?
Great, if anyone knows!

Cheers,

Dan

Gladsomebeast
06-26-2009, 07:08 PM
Assuming you are doing collision detection with the "collision(viz.ON)" function, you could wait for a viz.COLLISION_EVENT notification.
def onCollision(info):
print 'Collided with object',info.object
#stop view until joystick impulse direction vector points over 90 degrees
#away from info.normal

viz.callback(viz.COLLISION_EVENT, onCollision)

You know your needs better of course, but why not just let the user zero the joystick if they don't like moving around the circle? Perhaps you want is to create a "dead zone" for the joystick input. So if input is less than .05 away from zero, then impulse is 0.

Gladsomebeast
06-26-2009, 07:28 PM
Just though of another way to stop sideways motion. Check every frame if the view has moved in any direction other than forward or back.

#sudo code

#every frame
displacementVector = currentViewPosVector - lastViewPosVector
headingDisplacementVector = vizmat.LookToQuat(displacementVector))
viewDisplacementHeadingDiff = vizmat.QuatDiff(headingDisplacementVector, viz.MainView.getQuat())
if viewDisplacementHeadingDiff != 0 or viewDisplacementHeadingDiff != 180:
viz.MainView.setPosition(lastViewPos) #stop

Feuereissen
07-09-2009, 12:43 PM
Hey, Gladsomebeast, thanks alot for your input! I think im on the right track now...:)