#1
|
|||
|
|||
3D cursor with FlockOfBirds
Good Morning,
I am developing a 3D virtual environment in which I tracker my hands with flock of birds devices. Now, with the Vanda I would like to implement a 3D cursor. I visualize my 3D cursor as a sphere and I would like to understand if there is a way to fast determine in my sphere intersects an object in the scene. If there is an intersection I pick the object up and move, otherwise nothing happens. Thank you so much. Giancarlo |
#2
|
|||
|
|||
Here is a sample script that does what you want. It uses physics shapes to check if models are colliding. If they are, it sets up a "grab" link between the models.
Code:
import viz viz.go() viz.clearcolor(viz.SKYBLUE) viz.MainView.setPosition([0,0,-3]) viz.phys.enable() logo = viz.add('logo.wrl', pos=[1,0,0]) logo.collideMesh() marker = viz.add('marker.wrl', pos=[-1,0,0]) marker.collideMesh() duck = viz.add('duck.cfg', pos=[0,1,0]) duck.collideMesh() #Add the object that will do the grabbing hand = viz.add( 'hand.cfg' ) hand.setScale([3,3,3]) hand.translate( 0, 0, 0 ) hand.collideMesh() grabLink = None #The handle to the link object #Grab or let go of the ball def tryGrab(): global grabLink nodes = viz.phys.intersectNode(hand) if len(nodes) > 0: #if list is not empty grabLink = viz.grab( hand, nodes[0] ) def drop(): global grabLink grabLink.remove() grabLink = None def grabOrDrop(): if grabLink: drop() else: tryGrab() vizact.onkeydown(' ',grabOrDrop) #Setup keyboard control of hand vizact.whilekeydown(viz.KEY_UP,hand.translate,0,vizact.elapsed(1),0,viz.RELATIVE_WORLD) vizact.whilekeydown(viz.KEY_DOWN,hand.translate,0,vizact.elapsed(-1),0,viz.RELATIVE_WORLD) vizact.whilekeydown(viz.KEY_RIGHT,hand.translate,vizact.elapsed(1),0,0,viz.RELATIVE_WORLD) vizact.whilekeydown(viz.KEY_LEFT,hand.translate,vizact.elapsed(-1),0,0,viz.RELATIVE_WORLD) vizact.whilekeydown('w',hand.rotate,1,0,0,vizact.elapsed(90),viz.RELATIVE_WORLD) vizact.whilekeydown('s',hand.rotate,1,0,0,vizact.elapsed(-90),viz.RELATIVE_WORLD) vizact.whilekeydown('d',hand.rotate,0,1,0,vizact.elapsed(90),viz.RELATIVE_WORLD) vizact.whilekeydown('a',hand.rotate,0,1,0,vizact.elapsed(-90),viz.RELATIVE_WORLD)
__________________
Paul Elliott WorldViz LLC |
#3
|
|||
|
|||
great
Thank you so much it works fine!.
|
|
|