The following example has the crosshair fixed to the center of the screen. If were using an eye tracker the crosshair should follow the eye movements instead:
Code:
import viz
import vizact
viz.go()
GAZE_TIME_EVENT = viz.getEventID('GAZE_TIME_EVENT')
viz.clearcolor(viz.SLATE)
soccerball = viz.addChild('soccerball.osgb',pos=[-1,1.8,2])
basketball = viz.addChild('basketball.osgb',pos=[0,1.8,2])
volleyball = viz.addChild('volleyball.osgb',pos=[1,1.8,2])
crosshair = viz.addTexQuad(texture=viz.add('crosshair.png'),pos=[0,0,3],scale=[0.5]*3)
crosshair.setReferenceFrame(viz.RF_VIEW)
crosshair.disable(viz.DEPTH_TEST)
crosshair.drawOrder(10)
class GazeTime(viz.EventClass):
def __init__(self,gazeTime=1.5):
viz.EventClass.__init__(self)
self.gazeTime = gazeTime
self.gazeObject = None
self.startTime = 0
self.callback(viz.UPDATE_EVENT,self.checkGazeTime)
def checkGazeTime(self,e):
node = viz.pick(pos=[0.5,0.5])
if node != self.gazeObject:
self.gazeObject = node
self.startTime = viz.tick()
print 'started looking at', self.gazeObject
else:
time = viz.tick() - self.startTime
if time > self.gazeTime:
viz.sendEvent(GAZE_TIME_EVENT, self.gazeObject)
self.startTime = viz.tick()
GazeTime()
def onGazeTime(gazeObject):
if gazeObject == soccerball:
print 'gaze fixed on soccerball for 1.5 seconds'
elif gazeObject == basketball:
print 'gaze fixed on basketball for 1.5 seconds'
elif gazeObject == volleyball:
print 'gaze fixed on volleyball for 1.5 seconds'
viz.callback(GAZE_TIME_EVENT,onGazeTime)