PDA

View Full Version : orientation question


whj
01-19-2009, 03:27 PM
Hello,

Generally I have two ways to control orientation. One is to turn the viewpoint with head, the code would be like:

rot_data = ppt.getEuler()
viz.reset(viz.HEAD_ORI)
viz.rotate(viz.HEAD_ORI, rot_data[0], rot_data[1], rot_data[2])

In this way, the direction I can see is also my moving direction.

The other is to turn the viewpoint with twist value of joystick, the code would be like:
if abs(joy_rot) > 0.2:
angle = ANIMATE_RATE * TURN_SPEED * joy_rot
viz.MainView.rotate(0, 1, 0, angle, viz.HEAD_ORI, viz.RELATIVE_WORLD)

In this way, I can not change orientation by rotating my head.


So my question is, is there any way that I can use the twist value of joystick to control the walking direction while I can still change orientation by rotating my head. In other words, I can use joystick to control navigation while feel free to look around.

Thanks!

whj
01-19-2009, 04:56 PM
I'm not sure if I make it clear. To solve this problem, I'm looking for a way to turn off the connection between the head orientation and the moving direction. The moving direction is controlled by only joystick.

whj
01-20-2009, 10:15 AM
Basically I want to look around with HMD and move with joystick independently at the same time. Here is what I've done. Worked a little bit and then messed up. Does anybody know how to correct my code? Thanks a lot.

def mytimer(num):
global joy_pos, joy_rot

## Control orientation
rot_data = ppt.getEuler()
viz.MainView.setEuler(rot_data,viz.HEAD_ORI)

if abs(joy_rot) > 0.2:
angle = joy_rot*TURN_SPEED*viz.elapsed()
viz.MainView.rotate(0, 1, 0, angle, viz.BODY_ORI, viz.RELATIVE_WORLD)

## Control position
if abs(joy_pos[0]) > 0.25:
viz.MainView.move(joy_pos[0]*WALK_SPEED*viz.elapsed(), 0, 0, viz.BODY_ORI)
if abs(joy_pos[1]) > 0.25:
viz.MainView.move(0, 0, -joy_pos[1]*WALK_SPEED*viz.elapsed(), viz.BODY_ORI)

farshizzo
01-21-2009, 11:22 AM
Have a look at the Viewpoint control tutorial in the docs. It describes how to accomplish what you want. Basically, you would apply the joystick data to body orientation of the viewpoint and the HMD data to the head orientation. When you want to move the viewpoint, you just specify that you want to move relative to the body orientation.