PDA

View Full Version : Reticle cursor for Oculus - how do I create it?


cly3d
04-09-2016, 09:10 AM
Hey all,
I'm back to looking into Vizard and seeing if it might be a better fit for a project than Unity - the reason is a large point cloud, which Openscenegraph probably handles better.

Anyway... I'm completely not good at Python, but have managed quite a bit from cutting and pasting bits from the example scripts to get things working. (adding joystick movement to the Rift demo for exanple)

However, what I want to do is:
- Can I attach the built-in cross hair from the Duck demo, to the Oculus rift, such that it shows where you are 'looking at'

- And, similar to many Google Cardboard demos... a wait to click, where the crosshair simulates a mousedown (click) on an object if the person gazes at the object for about 1.5 seconds.

I'd appreciate some help on this.
Best Regards

Jeff
04-11-2016, 07:35 AM
You can set the reference frame (http://docs.worldviz.com/vizard/#commands/node3d/setReferenceFrame.htm) of the crosshair to viz.RF_VIEW:

crosshair = viz.addTexQuad(texture=viz.add('crosshair.png'),po s=[0,0,3],scale=[0.5]*3)
crosshair.setReferenceFrame(viz.RF_VIEW)

I'll post a simple example soon that uses the pick command to track the objects looked at.

cly3d
04-11-2016, 03:36 PM
Thankyou for replying Jeff.
I'll add these two lines of code and see how things go, this evening.

An example of picking on gaze would be great to have.
Best Regards.

Jeff
04-12-2016, 10:02 PM
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:

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'),po s=[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)