PDA

View Full Version : Translate view from sensor position to lens position?


Kaminski
03-09-2011, 09:30 AM
Has anybody made a function to translate the viewpoint from the sensor position to the lens position on their hmd? I'm having a little trouble figuring out which method to use (preTrans, postTrans, or setOffset).

farshizzo
03-09-2011, 09:40 AM
If your sensor contains both position and rotation data, then you need to apply a preTrans operator on the link to apply the offset between the physical sensor and actual eye position.

Example:view_link = viz.link(sensor,viz.MainView)

# Physical sensor is 0.05 m above and 0.02 m behind actual eye position
view_link.preTrans([0.0,-0.05,0.02])

Kaminski
03-09-2011, 10:08 AM
Yes sensor has both position and orientation (IS-900).

I am trying to run this on update so that I can use the euler information to determine which directions to apply the translation. When I use preTrans the view flies off in one direction.

I have tried subtracting the translation values from the preceding preTrans call, but that results in an accumulative translation error over time. I have also tried reseting each time before applying the preTrans. Both are commented out below. Thanks.


import viz
import viztask
import math

viz.go(viz.HMD | viz.STEREO)

isense = viz.add('intersense.dle')
track = isense.addTracker()
main = viz.link(track,viz.MainView)

def mainLoop():
yield viztask.waitKeyDown(' ')
#Do Stuff

xOffOld=0.0
zOffOld=0.0
hmdLength = .29

def setViewTrackCorrection():
global xOffOld,zOffOld
#main.reset(viz.HEAD_POS)
eul = main.getEuler()
xOff = hmdLength*math.sin(math.radians(eul[0]))
zOff = hmdLength*math.cos(math.radians(eul[0]))
#main.postTrans([-xOffOld+xOff,0,-zOffOld+zOff])
main.preTrans([xOff,0,zOff])
xOffOld = xOff
zOffOld = zOff

vizact.onupdate(1,setViewTrackCorrection)
viztask.schedule(mainLoop())

Kaminski
03-09-2011, 10:32 AM
My mistake, I didn't realize preTrans was applied before rotation. Thanks for the help.

farshizzo
03-09-2011, 10:36 AM
You should not call preTrans on every update. You only need to call it once when you initially setup the link.
import viz
import viztask

viz.go(viz.HMD | viz.STEREO)

isense = viz.add('intersense.dle')
track = isense.addTracker()
main = viz.link(track,viz.MainView)
main.preTrans([xoff,yoff,zoff])

def mainLoop():
yield viztask.waitKeyDown(' ')
#Do Stuff

viztask.schedule(mainLoop())