WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   Eliminate Sideways Motion when colliding w/Objects (https://forum.worldviz.com/showthread.php?t=2116)

Feuereissen 06-26-2009 01:03 PM

Eliminate Sideways Motion when colliding w/Objects
 
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.
Code:

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.
Code:

#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...:)


All times are GMT -7. The time now is 01:21 AM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC