PDA

View Full Version : network clusters


hotspur1
03-09-2006, 09:25 AM
I'd like to run a simulation with 3 viewpoints (or maybe more) and would like to use the cluster method so I just have to write one script. At the moment, I have one machine with a dual head card and need to link up one other machine.

Is it possible to specify the viewpoint for the clients other than using viz.clusteroffset()? I'd like to specify a position and direction like as I can with the viewpoint.translate() or rotate() methods.

Also, if I have commands that use dialog boxes and inputs, or read from/write to external files - are these commands also executed on the clients? Or are just the graphical objects and commands used?

Thanks!

farshizzo
03-09-2006, 11:16 AM
Hi,

The client machines do not run any python code, so displaying dialog boxes and opening files won't affect clients. The clients only execute commands that could potentially affect the rendering environment.

If you wanted each client to have its own viewpoint then you first need to disable the "Transmit mouse navigation" in the cluster master utility. Then, during each frame you would do something like this:viz.clustermask(viz.CLIENT1)
#Set viewpoint position/rotation for client 1
viz.clustermask(viz.CLIENT2)
#Set viewpoint position/rotation for client 2
viz.clustermask(viz.MASTER)
#Set viewpoint position/rotation for master
viz.clustermask(viz.ALLCLIENTS) #Restore cluster mask
The cluster mask simply controls who will receive the commands. It is a state variable, so once you set its value, all subsequent commands will use that mask.

hotspur1
03-09-2006, 11:41 AM
Hmmm, I tried the following code, but, after the objects load, I get the following output in the output window

--------------------------

Loading File: mplm.wrl
Loading File: truss2.wrl
** Load Time: 1.29 seconds
TypeError: an integer is required


-----------------------

import viz

viz.go()

mplm = viz.add('mplm.wrl')
truss = viz.add('truss2.wrl')

viz.clustermask(viz.CLIENT1)
viz.windowsize(320,240)
##viz.clusteroffset(30,0,0)
viewpoint = viz.add(viz.VIEWPOINT)
#viewpoint.rotate(0,1,0,20)
viewpoint.translate(0,0,-4)

viz.clustermask(viz.ALLCLIENTS)


viz.framerate()

farshizzo
03-09-2006, 12:43 PM
Hi,

You've quickly discovered the current limitation to the cluster feature. :)

When adding objects, they need to be added for every computer. Also, you don't need to add a separate viewpoint for each computer. You can use one viewpoint, just set the mask to a different client when changing the viewpoint. So try changing your code to the following:viewpoint = viz.get(viz.MAIN_VIEWPOINT)

viz.clustermask(viz.CLIENT1)
viz.windowsize(320,240)
##viz.clusteroffset(30,0,0)
#viewpoint.rotate(0,1,0,20)
viewpoint.translate(0,0,-4)
viz.clustermask(viz.ALLCLIENTS)