WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   [New here] Cave joy navigation (https://forum.worldviz.com/showthread.php?t=2781)

esuna114 06-10-2010 09:12 AM

[New here] Cave joy navigation
 
Hello everybody,

I'm very new to Vizard, so maybe my questions will be stupid.
Right now i've got a problem with joystick navigation in my cave. I've tried to make it from examples. (We have no tracking devices for now)

Here is the cave file:

Code:


# The same script must be run on all machines in the cluster

import viz
import vizcave
import viztracker

# Activate full screen on all nodes with quad buffering



# Disable the mouse cursor visibility on all machines except the master
viz.cluster.setMask(viz.ALLCLIENTS & ~viz.MASTER)
viz.setOption('viz.fullscreen',1)
viz.setOption('viz.stereo',viz.QUAD_BUFFER)
viz.mouse.setVisible(viz.OFF)
viz.cluster.setMask(viz.ALLCLIENTS)


# Declare constants defining the CAVE dimensions
W1 = 3.048                        # wideness        (X)
H1 = 2.286                        # height        (Y)
D1 = 0.56                        # deepnees        (Z)


C0 = -2,2.25,2      # Front  Wall: C0,C1,C2,C3
C1 = 2,2.25,2      # Roof  Wall: C4,C5,C0,C1
C2 = -2,0,2     
C3 = 2,0,2   
C4 = -2,3.9736,0.5537
C5 = 2,3.9736,0.5537


#Create front wall
FrontWall = vizcave.Wall(  upperLeft=C0, 
                            upperRight=C1,
                            lowerLeft=C2, 
                            lowerRight=C3,
                            name='Front Wall' )

#Create left wall
RoofWall  = vizcave.Wall(  upperLeft=C4,
                            upperRight=C5,
                            lowerLeft=C0,
                            lowerRight=C1,
                            name='Roof Wall' )



#Initialize graphics window
viz.go()

#Create cave object
LITE = vizcave.Cave()

#Add each wall, make sure that they are ordered in the cluster software correctly to match this ordering
LITE.addWall(FrontWall, mask=viz.CLIENT2)
LITE.addWall(RoofWall, mask=viz.CLIENT1)


import joyLITE

#Create tracker object using the keyboard (WASD keys control the viewpoint, the user's eye location)
#Make the starting location for the user's eye the exact center of the CAVE
viewtracker = viztracker.KeyboardPos()
viewtracker.setPosition (0,1.7,0)

#Pass the viewpoint tracker into the cave object so it can be automatically updated
LITE.setTracker(pos=viewtracker)


#Create CaveView object for manipulating the entire cave environment
#The caveorigin is a node that can be adjusted to move the entire cave around the virtual environment
caveorigin = vizcave.CaveView(viewtracker)


#Create another tracker using the keyboard and mouse (arrow keys adjust position, mouse changes orientation)
#origintracker = viztracker.KeyboardMouse6DOF()
#originlink = viz.link (origintracker, caveorigin)


#Set the MainView in a good position
vpos= caveorigin.getPosition()
viz.MainView.setPosition(vpos,viz.BODY_ORI)
vrot= caveorigin.getEuler()
viz.MainView.setEuler(vrot,viz.BODY_ORI)

#viz.MainView.setEuler(-90,0,0,viz.BODY_EULER)

#FOR LINKS: FIRST: DESTINATION, SECOND:SOURCE
originlink = viz.link ( caveorigin,viz.MainView)
#caveorigin.parent(viz.MainView)


#Link the keyboard/mouse so that it moves the cave and user around the virtual environment
#originlink = viz.link (origintracker, caveorigin)

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

And here is my joy navigation device ( joyLITE )

Code:


import vizact
import viz

#Import the vizjoy module and add one joystick.
import vizjoy
joy = vizjoy.add()

def update_joystick():
       
        node3d = viz.MainView
       
        #Get the joystick position
        x,y,z = joy.getPosition()
        #Get the twist of the joystick
        twist = joy.getTwist()
        slider = joy.getSlider()
        state = joy.getButtonState()
        #Move the viewpoint forward/
        #backward based on y-axis value
        #Make sure value is above a certain
        #threshold.
        if abs(x) > 0.2:
                node3d.move(0,0,x*0.01,viz.BODY_ORI)
        #Move the viewpoint left/right based
        #on x-axis value. Make sure value is
        #above a certain threshold
        if abs(y) > 0.2:
                node3d.move(y*0.01,0,0,viz.BODY_ORI)
        #Turn the viewpoint left/right based
        #on twist value. Make sure value is
        #above a certain threshold.
        if abs(slider) > 0.2:
                node3d.rotate(0,1,0,slider,viz.BODY_ORI,viz.ABS_LOCAL)
               
        if abs(twist) > 0.2:
                node3d.rotate(1,0,0,twist,viz.BODY_ORI,viz.ABS_LOCAL)
       
        #Up/down with buttons
        if state & vizjoy.BUTTON6:
                node3d.move(0,0.01,0,viz.BODY_ORI)
        if state & vizjoy.BUTTON8:
                node3d.move(0,-0.01,0,viz.BODY_ORI)

               
#UpdateJoystick every frame
vizact.ontimer(0,update_joystick)

The rotations are very weird, and the view won't translate at all, why so?
I tried my joystick navigation file with another non-cave demo and it worked well.

Thank you by advance.

esuna114 06-11-2010 09:07 AM

Nobody could give me a hint?
Thanks.

Jeff 06-11-2010 04:36 PM

If you are using the keyboard to update the projections and the joystick to drive the CAVE around you can do something like this.

Code:

#Create tracker object using the keyboard (WASD keys control the viewpoint, the user's eye location)
#Make the starting location for the user's eye the exact center of the CAVE
viewtracker = viztracker.KeyboardPos()
viewtracker.setPosition (W/2.0,H/2.0,D/2.0)

#Pass the viewpoint tracker into the cave object so it can be automatically updated
cave.setTracker(pos=viewtracker)

#Create CaveView object for manipulating the entire cave environment
#The caveorigin is a node that can be adjusted to move the entire cave around the virtual environment
caveorigin = vizcave.CaveView(viewtracker)


#update caveorigin with joystick

MOVE_SPEED = 5 # meters/sec

def joyMove():
       
        #Use y position of joystick to drive CAVE forward
        forwardMovement = viz.elapsed() * MOVE_SPEED * -joyPOS[1]
        caveorigin.setPosition([0,0,forwardMovement],viz.REL_LOCAL)
       
        #Use x position of joystick to drive CAVE side to side
        sideMovement = viz.elapsed() * MOVE_SPEED * joyPOS[0]
        caveorigin.setPosition([sideMovement,0,0],viz.REL_LOCAL)
       
vizact.ontimer(0, joyMove)

When using the vizcave module the viewpoint should not be updated with:
Code:

viz.MainView.setPosition()
The viewpoint will update properly if you set a tracker for the CAVE and use the CaveOrigin object to drive the CAVE around.


All times are GMT -7. The time now is 01:31 AM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2021, vBulletin Solutions, Inc.
Copyright 2002-2018 WorldViz LLC