View Single Post
  #2  
Old 11-25-2008, 02:56 PM
farshizzo farshizzo is offline
WorldViz Team Member
 
Join Date: Mar 2003
Posts: 2,849
It's hard to tell what you are doing wrong without seeing any sample code. I've attached a sample script that will record the tracker data and play it back. Press space key to start/stop recording. Once the recording has stopped it will automatically playback the tracking data. Hopefully this will give you some ideas on how to implement what you are trying to accomplish.
Code:
import viz
import vizcave
import viztracker
import viztask

#Width and height of power wall
WIDTH = 2.0
HEIGHT = 1.0
DISTANCE = 1.0

#Initialize graphics window
viz.go()

#Add environment model
viz.add('gallery.ive')

#Create tracker object using KeyboardPos tracker
tracker = viztracker.KeyboardPos()

#Create single power wall
PowerWall = vizcave.Wall(   upperLeft=(-WIDTH,HEIGHT,DISTANCE),
                            upperRight=(WIDTH,HEIGHT,DISTANCE),
                            lowerLeft=(-WIDTH,-HEIGHT,DISTANCE),
                            lowerRight=(WIDTH,-HEIGHT,DISTANCE),
                            name='Power Wall' )

#Create cave object with power wall
cave = vizcave.Cave()
cave.addWall(PowerWall)

#Use tracker for automatically updating cave
cave.setTracker(pos=tracker)

#Create vizcave.CaveView object for manipulating viewpoint in cave environment
origin = vizcave.CaveView(tracker)

#Translate view origin 1 meter back
origin.setPosition(0,0,-1)

def SetCaveTracker(posTracker):
	cave.setTracker(pos=posTracker)
	origin.setTracker(posTracker)

def RecordPlayTask():
	
	#Add dummy node for using as playback tracker
	playbackTracker = viz.addGroup()

	#Text for displaying record/playback status
	statusText = viz.addText('',parent=viz.ORTHO,color=viz.RED,fontSize=48)
	
	while True:
		
		#Wait for spacebar to start recording
		yield viztask.waitKeyDown(' ')
		
		statusText.message('Recording')
		
		#Start recording callback
		recordedData = []
		def _RecordTrackingData():
			recordedData.append( (tracker.getPosition(), tracker.getQuat()) )
		recordCallback = vizact.onupdate(0,_RecordTrackingData)
		
		#Wait for spacebar to stop recording
		yield viztask.waitKeyDown(' ')
		
		#Stop recording callback
		recordCallback.remove()
		
		statusText.message('Playing')
		
		#Set playback tracker
		SetCaveTracker(playbackTracker)
		
		#Playback recorded data
		for pos,ori in recordedData:
			playbackTracker.setPosition(pos)
			yield None
	
		statusText.message('')
		
		#Restore original tracker
		SetCaveTracker(tracker)
		
viztask.schedule( RecordPlayTask() )
Reply With Quote