#1
|
|||
|
|||
moving at different speeds
Hi,
I've got two rolling roads side by side but I want them to move at different speeds to each other as a type of comparison task, at the moment I can get them to go at the same speeds as each other but not to move independently; Code:
import viz #Import vizjoy module import vizjoy import time import math import vizact import vizinfo import vizshape viz.displaymode(1024, 512) viz.go(viz.FULLSCREEN) viz.mouse(viz.OFF) vizact.ontimer(32,viz.quit) #runs file for 32 secs subject = viz.input('What is the participant number?') #define speed MOVE_SPEEDl = 0.04459 #hard wired constant for speed gain (30mph) MOVE_SPEEDr = 0.001 viz.clearcolor(0.5,0.5,0.5) viz.MainView.setPosition(0,0.5,0) #add the road texture roadr = viz.add('roadld3.png') roadl = viz.add('roadld3.png') #create a texture quad1 to add the road texture to #and place it over ground quadr = viz.addTexQuad() quadr.setScale(1,2,1) quadr.setPosition(0,0.5,0) quadr.setEuler(0,90,0) quadr.texture(roadr) roadr_position = 0.5 #groundr_position = 0 #create a texture quad left to add the road texture to #and place it over ground quadl = viz.addTexQuad() quadl.setScale(1,2,1) quadl.setPosition(0,-0.5,0) quadl.setEuler(0,90,0) quadl.texture(roadl) roadl_position = 0 viz.link(viz.MainView, quadr) viz.link(viz.MainView, quadl) #add right road if getting near the end of road def addRoadr(): global roadr_position, roadl_position viewpointr_pos = viz.MainView.getPosition(quadr) #check to see how close the viewpoint is to the end of the road if roadr_position - viewpointr_pos[2] < 50: #add 50 meters of road for i in range(1,50): quadrcopy = quadr.copy() quadrcopy.setPosition([0.75,0,roadr_position]) quadrcopy.setEuler(0,90,0) roadr_position +=1 viz.MainView.move(0,0,MOVE_SPEEDr,viz.BODY_ORI) addRoadr() #call a timer every frame to check if road needs to be added vizact.ontimer(0, addRoadr) # add left road if getting near to the end of it def addRoadl(): global roadr_position, roadl_position viewpointl_pos = viz.MainView.getPosition(quadl) #check to see how close the viewpoint is to the end of the road if roadl_position - viewpointl_pos[2] < 50: #add 50 meters of road for i in range(1,50): quadlcopy = quadl.copy() quadlcopy.setPosition([-0.75,0,roadl_position]) #changing the 1st parameter to -0.5 for left quad and #0.5 for right quad elimates the grey space between the lines #one solid black road quadlcopy.setEuler(0,90,0) roadl_position +=1 viz.MainView.move(0,0,MOVE_SPEEDl,viz.BODY_ORI) addRoadl() #call a timer every frame to check if road needs to be added vizact.ontimer(0, addRoadl) |
#2
|
|||
|
|||
I've tried to create another window using two different methods (from both examples in the tutorials and other forum posts) and then assign one of the quads to the left window and the other to the right window. Method one
Code:
import viz #Import vizjoy module import vizjoy import time import math import vizact import vizinfo import vizshape viz.displaymode(1024, 768) viz.go(viz.FULLSCREEN) viz.mouse(viz.OFF) vizact.ontimer(32,viz.quit) #runs file for 32 secs subject = viz.input('What is the participant number?') #define speed MOVE_SPEEDl = 0.04459 #hard wired constant for speed gain (30mph) MOVE_SPEEDr = 0.001 viz.clearcolor(0.5,0.5,0.5) viz.MainView.setPosition(0,0.5,0) # Create a new window in the upper left corner UpperLeftWindow = viz.addWindow(pos=(0,1.0),size=(0.5,0.5)) UpperLeftWindow.visible(0,viz.SCREEN) UpperLeftView = viz.addView() UpperLeftWindow.setView(UpperLeftView) #add the road texture roadr = viz.add('roadld3.png') roadl = viz.add('roadld3.png') #create a texture quad1 to add the road texture to #and place it over ground quadr = viz.addTexQuad() quadr.setScale(1,2,1) quadr.setPosition(0,0.5,0) quadr.setEuler(0,90,0) quadr.texture(roadr) roadr_position = 0.5 #groundr_position = 0 #create a texture quad left to add the road texture to #and place it over ground quadl = viz.addTexQuad() quadl.setScale(1,2,1) quadl.setPosition(0,-0.5,0) quadl.setEuler(0,90,0) quadl.texture(roadl) roadl_position = 0 #add right road if getting near the end of road def addRoadr(): global roadr_position, roadl_position viewpointr_pos = viz.MainView.getPosition() #check to see how close the viewpoint is to the end of the road if roadr_position - viewpointr_pos[2] < 50: #add 50 meters of road for i in range(1,50): quadrcopy = quadr.copy() quadrcopy.setPosition([0.75,0,roadr_position]) quadrcopy.setEuler(0,90,0) roadr_position +=1 viz.MainView.move(0,0,MOVE_SPEEDr,viz.BODY_ORI) addRoadr() #call a timer every frame to check if road needs to be added vizact.ontimer(0, addRoadr) # add left road if getting near to the end of it def addRoadl(): global roadr_position, roadl_position viewpointl_pos = viz.MainView.getPosition() #check to see how close the viewpoint is to the end of the road if roadl_position - viewpointl_pos[2] < 50: #add 50 meters of road for i in range(1,50): quadlcopy = quadl.copy() quadlcopy.setPosition([-0.75,0,roadl_position]) #changing the 1st parameter to -0.5 for left quad and #0.5 for right quad elimates the grey space between the lines #one solid black road quadlcopy.setEuler(0,90,0) roadl_position +=1 viz.MainView.move(0,0,MOVE_SPEEDl,viz.BODY_ORI) addRoadl() #call a timer every frame to check if road needs to be added vizact.ontimer(0, addRoadl) Method 2: Code:
import viz #Import vizjoy module import vizjoy import time import math import vizact import vizinfo import vizshape viz.displaymode(1024, 768) viz.go(viz.FULLSCREEN) viz.mouse(viz.OFF) vizact.ontimer(32,viz.quit) #runs file for 32 secs subject = viz.input('What is the participant number?') #define speed MOVE_SPEEDl = 0.04459 #hard wired constant for speed gain (30mph) MOVE_SPEEDr = 0.001 viz.clearcolor(0.5,0.5,0.5) #create 2 windows #Set main window size to half viz.MainWindow.setSize(0.5,1) #Add a new window to other half window = viz.addWindow() window.clearcolor (0.5,0.5,0.5) window.setPosition(0.5,1) window.setSize(0.5,1) view = viz.addView() view.scene(2) window.viewpoint(view) #add the road texture roadr = viz.add('roadld3.png') roadl = viz.add('roadld3.png') #create a texture quad1 to add the road texture to #and place it over ground quadr = viz.addTexQuad() quadr.setScale(1,2,1) quadr.setPosition(0,0.5,0) quadr.setEuler(0,90,0) quadr.texture(roadr) roadr_position = 0.5 #groundr_position = 0 #create a texture quad left to add the road texture to #and place it over ground quadl = viz.addTexQuad() quadl.setScale(1,2,1) quadl.setPosition(0,-0.5,0) quadl.setEuler(0,90,0) quadl.texture(roadl) roadl_position = 0 #add right road if getting near the end of road def addRoadr(): global roadr_position, roadl_position viewpointr_pos = viz.MainView.getPosition() #check to see how close the viewpoint is to the end of the road if roadr_position - viewpointr_pos[2] < 50: #add 50 meters of road for i in range(1,50): quadrcopy = quadr.copy() quadrcopy.setPosition([0.75,0,roadr_position]) quadrcopy.setEuler(0,90,0) roadr_position +=1 viz.MainView.move(0,0,MOVE_SPEEDr,viz.BODY_ORI) addRoadr() #call a timer every frame to check if road needs to be added vizact.ontimer(0, addRoadr) # add left road if getting near to the end of it def addRoadl(): global roadr_position, roadl_position viewpointl_pos = viz.MainView.getPosition() #check to see how close the viewpoint is to the end of the road if roadl_position - viewpointl_pos[2] < 50: #add 50 meters of road for i in range(1,50): quadlcopy = quadl.copy() quadlcopy.setPosition([-0.75,0,roadl_position]) #changing the 1st parameter to -0.5 for left quad and #0.5 for right quad elimates the grey space between the lines #one solid black road quadlcopy.setEuler(0,90,0) roadl_position +=1 viz.MainView.move(0,0,MOVE_SPEEDl,viz.BODY_ORI) addRoadl() #call a timer every frame to check if road needs to be added vizact.ontimer(0, addRoadl) Thanks! |
#3
|
|||
|
|||
The following code has two scenes that are shown side by side. The viewpoint moves at different speeds in each one:
Code:
import viz import vizact viz.go() road1 = viz.addChild('tut_ground.wrl',scale=[0.02,1,1]) road2 = road1.copy(scale=[0.02,1,1],scene=2) leftWindow = viz.MainWindow leftWindow.setSize([0.5,1]) rightWindow = viz.addWindow(pos=[0.5,1],size=[0.5,1]) rightView = viz.addView(scene=2) rightWindow.setView(rightView) leftView = viz.MainView leftView.move([0,0,-25]) rightView.move([0,0,-25]) def moveViews(): leftView.move([0,0,.03]) rightView.move([0,0,.1]) vizact.ontimer(0,moveViews) |
#4
|
|||
|
|||
Hi Jeff,
many thanks for that; but when I try and load my .png file using this code, it fails to load it (similarly for .jpg files as well), also the markings on the texture I'm using need to move at a specific temporal frequency, which I've already worked out and my texture is moving on a continuous loop (agan which is already written). However when I try to assign one texture quad to one of the windows and one texture quad to another; they both end up in the left window |
#5
|
|||
|
|||
That code I posted sets the right window to scene 2. To make an object appear in that window the object also needs to be placed in scene 2.
|
#6
|
|||
|
|||
Hi Jeff,
yes I tried a number of ways of doing that (see below) but the best that I've succeeded in is having the two quads appear side by side in both of the viewpoints, rather than one in each, Code:
add the road texture #roadr = viz.add('roadld3.png',scene=viz.MainWindow) #roadl = viz.add('roadld3.png',scene=rightView) #roadr = viz.add('roadld3.png', parent=viz.SCREEN,SCENE=2) #roadl = viz.add('roadld3.png',parent=viz.SCREEN,scene=1) #create 2 windows #Set main window size to half leftWindow = viz.MainWindow leftWindow.setSize([0.5,1]) #Add a new window to other half rightWindow = viz.addWindow(pos=[0.5,1],size=[0.5,1]) rightWindow.clearcolor (0.5,0.5,0.5) rightView = viz.addView() rightWindow.setView(rightView) roadr = viz.add('roadld3.png') roadl = viz.add('roadld3.png') #create a texture quad1 to add the road texture to #and place it over ground quadl = viz.addTexQuad(parent=viz.ORTHO,scene=leftWindow,texture=roadl) quadr = viz.addTexQuad(parent=viz.ORTHO,scene=rightWindow,texture=roadr) #quadr = viz.addTexQuad() #quadr = viz.add(viz.TEXQUAD,viz.SCENE,2) quadr.setScale(1,2,1) quadr.setPosition(0,0.5,0,) quadr.setEuler(0,90,0) #quadr.texture(roadr) roadr_position = 0.5 #groundr_position = 0 #create a texture quad left to add the road texture to #and place it over ground #quadl = viz.addTexQuad() quadl.setScale(1,2,1) quadl.setPosition(0,-0.5,0,) quadl.setEuler(0,90,0) #quadl.texture(roadl) roadl_position = 0.5 |
#7
|
|||
|
|||
The following code adds texture quads to each window and textures them. Is this what you are looking for?
Code:
import viz import vizact viz.go() texture = viz.addTexture('ball.jpg') road = viz.addTexQuad() road.texture(texture) road.visible(0) for i in range(1,100): road.clone(pos=[0,0,i],euler=[0,90,0]) road.clone(pos=[0,0,i],euler=[0,90,0],scene=2) leftWindow = viz.MainWindow leftWindow.setSize([0.5,1]) rightWindow = viz.addWindow(pos=[0.5,1],size=[0.5,1]) rightView = viz.addView(scene=2) rightWindow.setView(rightView) leftView = viz.MainView def moveViews(): leftView.move([0,0,.03]) rightView.move([0,0,.1]) vizact.ontimer(0,moveViews) |
#8
|
|||
|
|||
Hi Jeff,
thanks for that; yes, that's the idea but it's a follow on from another experiment so it has to have an identical set up as before, ie the surface and position of the road, the temporal frequency of the lines, plus the road needs to continue indefinitely to the end of the experiment. All the other parts are already coded (although I may need to call upon your expertise for additional parts of the experiment - sorry!) so it's just really a case of assigning a left quad to the left window and right quad to the right window using the code that I already have. Is this possible or do I need to change the code so that it is similar to what you have written? Thanks |
#9
|
|||
|
|||
Hi Jeff,
Further to my last post I've done a bit of experimenting with the code and the problem appears with this part of the coding that makes the road infinite Code:
def addRoadr(): global roadr_position, roadl_position viewpointr_pos = viz.MainView.getPosition() rightView.setPosition(viewpointr_pos) #check to see how close the viewpoint is to the end of the road if roadr_position - viewpointr_pos[2] < 50: #add 50 meters of road for i in range(1,50): #quadrcopy = quadr.copy(scene=2)#makes left hand quad appear in both windows quadrcopy = quadr.copy()#makes the 2 quads appear in each window quadrcopy.setPosition([0.75,0,roadr_position]) quadrcopy.setEuler(0,90,0) roadr_position +=1 viz.MainView.move(0,0,MOVE_SPEEDr,viz.HEAD_ORI) addRoadr() #call a timer every frame to check if road needs to be added vizact.ontimer(0, addRoadr) Thanks |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
rotate around moving axis | moneim230 | Vizard | 1 | 07-14-2010 10:04 AM |
Stop moving after few seconds?? | Chrissy2009 | Vizard | 8 | 05-10-2009 03:47 PM |
Moving avatars lips with sound | dan12345 | Vizard | 5 | 01-29-2008 08:32 PM |
Moving view with object | Xliben | Vizard | 2 | 07-25-2005 06:36 PM |
moving viewpoint vs. translating Head_pos | bailenson | Vizard | 5 | 02-01-2005 02:51 PM |