Thank you for your reply, it was very helpful.
I have post my new code is it right so? I only set trackeroffset-values and with the keyboard I move my MainViewpoint. It seems like it works correct…
Code:
import viz
import vizcave
import viztracker
viz.go()
viz.MainWindow.stereo(viz.STEREO_RIGHT)
c0 = -1,2,0
c1 = 1.,2,0
c2 = 1.,0.6,0
c3 = -1,0.6,0
cave = vizcave.Cave()
FrontWall = vizcave.Wall(upperLeft=c0,upperRight=c1,lowerLeft= c3,lowerRight=c2,name='Front Wall' )
cave.addWall(FrontWall, mask =None, window = viz.MainWindow)
#Add a sensor.
tracker = viz.add('fastrak.dls')
vpT = [0, 1.2, -1.6] # tracker-offset-values
vpM = [0, 1.2, -1.6] # set the Main-ViewPoint in the center of the tracker
viz.MainView.translate(vpM)
viz.add('tut_ground.wrl')
mini = viz.add("mini.osgx")
mini.translate(0,0.7,0)
mini.setScale(0.3, 0.3, 0.3)
mini.add(vizact.spin(0,1,0,15))
def UpdateCave():
TP = tracker.getPosition()
TO = tracker.getEuler()
NewTO = vizmat.EulerToQuat(TO[1],TO[0],TO[2]) #swap X-Y and transform in quaternion
NewTP = [-TP[0]+vpT[0],-TP[1]+vpT[1],-TP[2]+vpT[2]] #invert the tracker-position-data and set offsetvalues
cave.update(pos = NewTP,ori =NewTO)
print "Tracker_P: ", NewTP
print "Tracker_O: ", NewTO
print "Main_VP: ", viz.MainView.getPosition()
print "Main_VO: ", viz.MainView.getEuler()
vizact.ontimer(0,UpdateCave)
def onKeyDown(key):
#move the main-ViewPoint
if viz.key.isDown('q'): #left
vpM[0] -= 1*viz.elapsed()
if viz.key.isDown('a'): #right
vpM[0] += 1*viz.elapsed()
if viz.key.isDown('e'): #forward
vpM[2] += 1*viz.elapsed()
if viz.key.isDown('d'): #backward
vpM[2] -= 1*viz.elapsed()
if viz.key.isDown('w'): #up
vpM[1] += 1*viz.elapsed()
if viz.key.isDown('s'): #down
vpM[1] -= 1*viz.elapsed()
viz.MainView.translate(vpM)
viz.callback(viz.KEYDOWN_EVENT,onKeyDown)
viz.starttimer(0,0.01,viz.FOREVER)