diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini index 2357194d8cc9e98fbf7bf478224594be4c172759..dbbd2716222f2db9b388e20466af05d4f84acc5e 100644 --- a/Config/DefaultEngine.ini +++ b/Config/DefaultEngine.ini @@ -7,7 +7,7 @@ AppliedDefaultGraphicsPerformance=Maximum [/Script/EngineSettings.GameMapsSettings] EditorStartupMap=/Game/Maps/Main.Main GameDefaultMap=/Game/Maps/Main.Main -GlobalDefaultGameMode=/Script/nDisplayExtensions.DisplayClusterGameModeCAVE +GlobalDefaultGameMode=/Script/DisplayClusterExtensions.VirtualRealityGameMode [/Script/Engine.Engine] GameEngine=/Script/DisplayCluster.DisplayClusterGameEngine diff --git a/Config/DefaultInput.ini b/Config/DefaultInput.ini index 485b49f020e861608adcfbd03572ae280581feca..6b9aa40377488bb4709a1964b8c5c6d90804e84b 100644 --- a/Config/DefaultInput.ini +++ b/Config/DefaultInput.ini @@ -50,6 +50,12 @@ DoubleClickTime=0.200000 +ActionMappings=(ActionName="Action4",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=DisplayClusterAction4) +ActionMappings=(ActionName="Action5",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Five) +ActionMappings=(ActionName="Action5",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=DisplayClusterAction5) ++ActionMappings=(ActionName="Fire",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MotionController_Right_Trigger) ++ActionMappings=(ActionName="Action1",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MotionController_Right_FaceButton1) ++ActionMappings=(ActionName="Action2",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MotionController_Right_FaceButton2) ++ActionMappings=(ActionName="Action3",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MotionController_Right_FaceButton3) ++ActionMappings=(ActionName="Action4",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MotionController_Right_FaceButton4) ++ActionMappings=(ActionName="Action5",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MotionController_Right_Grip1) +AxisMappings=(AxisName="MoveForward",Scale=1.000000,Key=W) +AxisMappings=(AxisName="MoveForward",Scale=-1.000000,Key=S) +AxisMappings=(AxisName="MoveForward",Scale=1.000000,Key=DisplayClusterAxisY) @@ -64,6 +70,8 @@ DoubleClickTime=0.200000 +AxisMappings=(AxisName="LookUpRate",Scale=-1.000000,Key=Up) +AxisMappings=(AxisName="LookUpRate",Scale=1.000000,Key=Down) +AxisMappings=(AxisName="LookUpRate",Scale=-1.000000,Key=MouseY) ++AxisMappings=(AxisName="MoveForward",Scale=1.000000,Key=MotionController_Left_Thumbstick_Y) ++AxisMappings=(AxisName="MoveRight",Scale=1.000000,Key=MotionController_Left_Thumbstick_X) DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.DefaultVirtualJoysticks ConsoleKey=None -ConsoleKeys=Tilde diff --git a/Content/Maps/Main.umap b/Content/Maps/Main.umap index bfb6f44a45cfa1d404091e51719825a835b71825..86bbb202b28ba7d5caecc613eb591f5e5c324f61 100644 Binary files a/Content/Maps/Main.umap and b/Content/Maps/Main.umap differ diff --git a/Content/Configurations/aixcave.cfg b/Launch/aixcave.cfg similarity index 94% rename from Content/Configurations/aixcave.cfg rename to Launch/aixcave.cfg index f99a9f548bb8382490fd2d47d35e17288037d464..6e525835bfab0655a73d7c57cfaf325824631d19 100644 --- a/Content/Configurations/aixcave.cfg +++ b/Launch/aixcave.cfg @@ -30,8 +30,8 @@ [cluster_node] id=node_front_upper_right_eye_right addr=10.0.1.2 screen=screen_front_upper_right viewport=vp_1200 [cluster_node] id=node_front_lower_left_eye_left addr=10.0.1.3 screen=screen_front_lower_left viewport=vp_1200 [cluster_node] id=node_front_lower_left_eye_right addr=10.0.1.3 screen=screen_front_lower_left viewport=vp_1200 -[cluster_node] id=node_front_lower_right_eye_left addr=10.0.1.4 screen=screen_front_lower_left viewport=vp_1200 -[cluster_node] id=node_front_lower_right_eye_right addr=10.0.1.4 screen=screen_front_lower_left viewport=vp_1200 +[cluster_node] id=node_front_lower_right_eye_left addr=10.0.1.4 screen=screen_front_lower_right viewport=vp_1200 +[cluster_node] id=node_front_lower_right_eye_right addr=10.0.1.4 screen=screen_front_lower_right viewport=vp_1200 [cluster_node] id=node_left_upper_left_eye_left addr=10.0.1.5 screen=screen_left_upper_left viewport=vp_1200 [cluster_node] id=node_left_upper_left_eye_right addr=10.0.1.5 screen=screen_left_upper_left viewport=vp_1200 @@ -106,7 +106,7 @@ [screen] id=screen_front_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_upper_left [screen] id=screen_front_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_upper_right [screen] id=screen_front_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_lower_left -[screen] id=screen_front_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_lower_left +[screen] id=screen_front_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_lower_right [screen] id=screen_left_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_upper_left [screen] id=screen_left_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_upper_right [screen] id=screen_left_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_lower_left @@ -203,9 +203,9 @@ [scene_node] id=cave_origin loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" [scene_node] id=cave_center loc="X=0,Y=0,Z=1.65" rot="P=0,Y=0,R=0" parent=cave_origin -[scene_node] id=flystick loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=cave_origin tracker_id=DTrackTracker tracker_ch=7 -[scene_node] id=shutter_glasses loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=cave_origin tracker_id=DTrackTracker tracker_ch=0 -[scene_node] id=display_main loc="X=0.40.0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=shutter_glasses +[scene_node] id=flystick loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=cave_origin tracker_id=dtrack_tracker tracker_ch=7 +[scene_node] id=shutter_glasses loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=cave_origin tracker_id=dtrack_tracker tracker_ch=0 +[scene_node] id=display_main loc="X=0.4,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=shutter_glasses [scene_node] id=angle_left loc="X=0,Y=0,Z=0" rot="P=0,Y=-90,R=0" parent=cave_center [scene_node] id=angle_right loc="X=0,Y=0,Z=0" rot="P=0,Y=90,R=0" parent=cave_center @@ -215,7 +215,7 @@ [scene_node] id=display_front_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=cave_center [scene_node] id=display_front_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=cave_center [scene_node] id=display_front_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=cave_center -[scene_node] id=display_front_lower_left loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=cave_center +[scene_node] id=display_front_lower_right loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=cave_center [scene_node] id=display_left_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_left [scene_node] id=display_left_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_left @@ -233,14 +233,14 @@ [scene_node] id=display_back_lower_right loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_back [scene_node] id=display_floor_front_upper_left loc="X=0,Y=-1.125,Z=+1.6875" rot="P=0,Y=0,R=0" parent=angle_floor -[scene_node] id=display_floor_front_upper_right loc="X=0,Y=1.125,Z=+1.6875" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_front_upper_right loc="X=0,Y=+1.125,Z=+1.6875" rot="P=0,Y=0,R=0" parent=angle_floor [scene_node] id=display_floor_front_lower_left loc="X=0,Y=-1.125,Z=+0.9375" rot="P=0,Y=0,R=0" parent=angle_floor -[scene_node] id=display_floor_front_lower_right loc="X=0,Y=1.125,Z=+0.9375" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_front_lower_right loc="X=0,Y=+1.125,Z=+0.9375" rot="P=0,Y=0,R=0" parent=angle_floor [scene_node] id=display_floor_back_upper_left loc="X=0,Y=-1.125,Z=-0.9375" rot="P=0,Y=0,R=0" parent=angle_floor -[scene_node] id=display_floor_back_upper_right loc="X=0,Y=1.125,Z=-0.9375" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_back_upper_right loc="X=0,Y=+1.125,Z=-0.9375" rot="P=0,Y=0,R=0" parent=angle_floor [scene_node] id=display_floor_back_lower_left loc="X=0,Y=-1.125,Z=-1.6875" rot="P=0,Y=0,R=0" parent=angle_floor -[scene_node] id=display_floor_back_lower_right loc="X=0,Y=1.125,Z=-1.6875" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_back_lower_right loc="X=0,Y=+1.125,Z=-1.6875" rot="P=0,Y=0,R=0" parent=angle_floor ##################################################################### @@ -272,9 +272,9 @@ # remap - VRPN device channel remapping. Value format is: "from0:to0,from1:to1,...,fromN:toN". # For example: remap="0:3,1:4,5:2" #******************************************************************** -[input] id=DTrackAxis type=analog addr=DTrack2@10.0.1.29 -[input] id=DTrackButtons type=buttons addr=DTrack2@10.0.1.29 -[input] id=DTrackTracker type=tracker addr=DTrack2@10.0.1.29 loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" right=X up=Y front=-Z +[input] id=dtrack_axis type=analog addr=DTrack2@10.0.1.29 +[input] id=dtrack_buttons type=buttons addr=DTrack2@10.0.1.29 +[input] id=dtrack_tracker type=tracker addr=DTrack2@10.0.1.29 loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" right=X up=Y front=-Z ##################################################################### diff --git a/Content/Configurations/aixcave_infiniband.cfg b/Launch/aixcave_infiniband.cfg similarity index 96% rename from Content/Configurations/aixcave_infiniband.cfg rename to Launch/aixcave_infiniband.cfg index f2cb3edd0dfdb692988dfa5900bf5b6fdbcde265..59a6d6c80b2893cc1d32b91ed4838bb003b6b4db 100644 --- a/Content/Configurations/aixcave_infiniband.cfg +++ b/Launch/aixcave_infiniband.cfg @@ -30,8 +30,8 @@ [cluster_node] id=node_front_upper_right_eye_right addr=134.61.47.133 screen=screen_front_upper_right viewport=vp_1200 [cluster_node] id=node_front_lower_left_eye_left addr=134.61.47.134 screen=screen_front_lower_left viewport=vp_1200 [cluster_node] id=node_front_lower_left_eye_right addr=134.61.47.134 screen=screen_front_lower_left viewport=vp_1200 -[cluster_node] id=node_front_lower_right_eye_left addr=134.61.47.135 screen=screen_front_lower_left viewport=vp_1200 -[cluster_node] id=node_front_lower_right_eye_right addr=134.61.47.135 screen=screen_front_lower_left viewport=vp_1200 +[cluster_node] id=node_front_lower_right_eye_left addr=134.61.47.135 screen=screen_front_lower_right viewport=vp_1200 +[cluster_node] id=node_front_lower_right_eye_right addr=134.61.47.135 screen=screen_front_lower_right viewport=vp_1200 [cluster_node] id=node_left_upper_left_eye_left addr=134.61.47.136 screen=screen_left_upper_left viewport=vp_1200 [cluster_node] id=node_left_upper_left_eye_right addr=134.61.47.136 screen=screen_left_upper_left viewport=vp_1200 @@ -106,7 +106,7 @@ [screen] id=screen_front_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_upper_left [screen] id=screen_front_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_upper_right [screen] id=screen_front_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_lower_left -[screen] id=screen_front_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_lower_left +[screen] id=screen_front_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_lower_right [screen] id=screen_left_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_upper_left [screen] id=screen_left_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_upper_right [screen] id=screen_left_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_lower_left @@ -205,7 +205,7 @@ [scene_node] id=flystick loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=cave_origin tracker_id=DTrackTracker tracker_ch=7 [scene_node] id=shutter_glasses loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=cave_origin tracker_id=DTrackTracker tracker_ch=0 -[scene_node] id=display_main loc="X=0.40.0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=shutter_glasses +[scene_node] id=display_main loc="X=0.4,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=shutter_glasses [scene_node] id=angle_left loc="X=0,Y=0,Z=0" rot="P=0,Y=-90,R=0" parent=cave_center [scene_node] id=angle_right loc="X=0,Y=0,Z=0" rot="P=0,Y=90,R=0" parent=cave_center @@ -215,7 +215,7 @@ [scene_node] id=display_front_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=cave_center [scene_node] id=display_front_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=cave_center [scene_node] id=display_front_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=cave_center -[scene_node] id=display_front_lower_left loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=cave_center +[scene_node] id=display_front_lower_right loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=cave_center [scene_node] id=display_left_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_left [scene_node] id=display_left_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_left @@ -233,14 +233,14 @@ [scene_node] id=display_back_lower_right loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_back [scene_node] id=display_floor_front_upper_left loc="X=0,Y=-1.125,Z=+1.6875" rot="P=0,Y=0,R=0" parent=angle_floor -[scene_node] id=display_floor_front_upper_right loc="X=0,Y=1.125,Z=+1.6875" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_front_upper_right loc="X=0,Y=+1.125,Z=+1.6875" rot="P=0,Y=0,R=0" parent=angle_floor [scene_node] id=display_floor_front_lower_left loc="X=0,Y=-1.125,Z=+0.9375" rot="P=0,Y=0,R=0" parent=angle_floor -[scene_node] id=display_floor_front_lower_right loc="X=0,Y=1.125,Z=+0.9375" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_front_lower_right loc="X=0,Y=+1.125,Z=+0.9375" rot="P=0,Y=0,R=0" parent=angle_floor [scene_node] id=display_floor_back_upper_left loc="X=0,Y=-1.125,Z=-0.9375" rot="P=0,Y=0,R=0" parent=angle_floor -[scene_node] id=display_floor_back_upper_right loc="X=0,Y=1.125,Z=-0.9375" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_back_upper_right loc="X=0,Y=+1.125,Z=-0.9375" rot="P=0,Y=0,R=0" parent=angle_floor [scene_node] id=display_floor_back_lower_left loc="X=0,Y=-1.125,Z=-1.6875" rot="P=0,Y=0,R=0" parent=angle_floor -[scene_node] id=display_floor_back_lower_right loc="X=0,Y=1.125,Z=-1.6875" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_back_lower_right loc="X=0,Y=+1.125,Z=-1.6875" rot="P=0,Y=0,R=0" parent=angle_floor ##################################################################### diff --git a/Launch/clean_aixcave.sh b/Launch/clean_aixcave.sh new file mode 100644 index 0000000000000000000000000000000000000000..344b0638971a7b7671945a1ffe24d70aa05e3bf9 --- /dev/null +++ b/Launch/clean_aixcave.sh @@ -0,0 +1,4 @@ +#!/bin/bash +pkill -f DTrack +pkill -f vrpn +pkill -f 'ssh ng' diff --git a/Launch/launch_aixcave.py b/Launch/launch_aixcave.py new file mode 100644 index 0000000000000000000000000000000000000000..a3360cff8cc985ec0aa2424f9d66c9b9a1155795 --- /dev/null +++ b/Launch/launch_aixcave.py @@ -0,0 +1,88 @@ +import os +import sys +import time + +hostname_lookup_table = { + "10.0.1.1" : "ngs01", + "10.0.1.2" : "ngs02", + "10.0.1.3" : "ngs03", + "10.0.1.4" : "ngs04", + "10.0.1.5" : "ngs05", + "10.0.1.6" : "ngs06", + "10.0.1.7" : "ngs07", + "10.0.1.8" : "ngs08", + "10.0.1.9" : "ngs09", + "10.0.1.10": "ngs10", + "10.0.1.11": "ngs11", + "10.0.1.12": "ngs12", + "10.0.1.13": "ngs13", + "10.0.1.14": "ngs14", + "10.0.1.15": "ngs15", + "10.0.1.16": "ngs16", + "10.0.1.17": "ngs17", + "10.0.1.18": "ngs18", + "10.0.1.19": "ngs19", + "10.0.1.20": "ngs20", + "10.0.1.21": "ngs21", + "10.0.1.22": "ngs22", + "10.0.1.23": "ngs23", + "10.0.1.24": "ngs24", + "10.0.1.25": "ngd01", + "10.0.1.26": "ngd02", + "10.0.1.29": "ngm01" +} + +def main(): + if len(sys.argv) != 2: + print("Invalid arguments. Format: python launch_aixcave.py FULL_PATH_TO_APPLICATION") + return + + application_filepath = sys.argv[1] + slave_logs_folder = os.path.dirname(application_filepath) + "/slave_logs" + configuration_filepath = os.path.dirname(os.path.realpath(__file__)) + "/aixcave.cfg" + dtrack_filepath = "/home/vrsw/DTrack/DTrack2_v2.13.0/bin/DTrack2.bin" + vrpn_filepath = "/home/vrsw/vrpn/vrpn_git/build_clang/server_src/vrpn_server" + vrpn_config_filepath = "/home/vrsw/vrpn/vrpn_git/build_clang/server_src/vrpn.cfg" + + print("Reading configuration.") + with open(configuration_filepath) as configuration_file: + configuration = configuration_file.readlines() + + print("Creating slave_logs directory if not existent.") + os.system("mkdir -p " + slave_logs_folder) + + print("Launching DTrack.") + os.system(dtrack_filepath + " -directstart -measure -wakeup &") + time.sleep(2) + + print("Launching VRPN.") + os.system(vrpn_filepath + " -f " + vrpn_config_filepath + " -millisleep 0 &") + time.sleep(2) + + print("Launching slave nodes.") + for line in configuration: + if line.startswith("#") or ("[cluster_node]" not in line) or ("master" in line): + continue + + split_line = line.split() + name = split_line[1][3:] + ip = split_line[2][5:] + + print("Launching slave " + name + " (IP: " + ip + ").") + os.system( + "ssh " + hostname_lookup_table[ip] + + " \"export XAUTHORITY=/var/run/Xauthority-vr; export DISPLAY=:0." + ("1" if ("eye_left" in name) else "0") + ";" + " /bin/nice_av00 -n -15 " + application_filepath + + " ResX=1920 ResY=1200 WinX=0 WinY=0 -fixedseed -nosplash -opengl4 -fullscreen" + + " dc_cfg=" + configuration_filepath + " dc_node=" + name + " -dc_cluster -dc_dev_mono" + " > " + slave_logs_folder + "/" + name + ".log\" &") + time.sleep(0.1) + + print("Launching master node.") + os.system( + "/bin/nice_av00 -n -15 " + application_filepath + + " ResX=1600 ResY=1000 WinX=0 WinY=0 -fixedseed -nosplash -opengl4 -useallavailablecores -windowed" + + " dc_cfg=" + configuration_filepath + " dc_node=node_main -dc_cluster -dc_dev_mono") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/Launch/launch_aixcave.sh b/Launch/launch_aixcave.sh new file mode 100644 index 0000000000000000000000000000000000000000..f6710772fd6cdacf22faab6c9e643d525a1af587 --- /dev/null +++ b/Launch/launch_aixcave.sh @@ -0,0 +1,4 @@ +#!/bin/bash +module load clang/5.0 +python ./launch_aixcave.py $1 +./clean_aixcave.sh diff --git a/Launch/readme.txt b/Launch/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..42f1d1bcbe39d86638d823d3b3ec4e6204c0b574 --- /dev/null +++ b/Launch/readme.txt @@ -0,0 +1,5 @@ +- Copy this folder to a permanent location in the CAVE master node (consider adding it to path). +- To launch UE4 CAVE applications use: + ./launch_aixcave.sh FULL_PATH_TO_APPLICATION +- To kill all relevant processes use: + ./clean_aixcave.sh \ No newline at end of file diff --git a/Launch/rolv.cfg b/Launch/rolv.cfg new file mode 100644 index 0000000000000000000000000000000000000000..93bc4e50361ec05c1de8be665852d03da8e4daca --- /dev/null +++ b/Launch/rolv.cfg @@ -0,0 +1,199 @@ +##################################################################### +# nDisplay config file +# +# This file demonstrates how to configure for the ROLV. +##################################################################### + +##################################################################### +# List of cluster nodes +#******************************************************************** +# Cluster node is an application instance. It's allowed to use +# multiple instances on the same PC. Sometimes its necessary. +# +# Properties: +# id - unique node name +# addr - network address (IPv4 only) +# screen - projection screen ID to use +# viewport - viewport ID to use +# master - specifies if current node is master; default is 'false' +# port_cs - Cluster Synchronization port (required on master node only) +# port_ss - Swap Synchronization port (required on master node only) +# +# Optional properties: +# sound - turns on/off sound for this application instance; default is 'false' +#******************************************************************** +[cluster_node] id=node_main addr=127.0.0.1 screen=screen_main viewport=vp_1600 port_cs=41001 port_ss=41002 master=true sound=true +[cluster_node] id=node_front_eye_left addr=127.0.0.1 screen=screen_front viewport=vp_1600 +[cluster_node] id=node_front_eye_right addr=127.0.0.1 screen=screen_front viewport=vp_1600 +##################################################################### + + +##################################################################### +# List of projection screens +#******************************************************************** +# Projection screen is a rectangle which determines the camera frustum. +# Usually the projection screen has the same dimensions as an output +# display but in some cases it may differ. +# +# Properties: +# id - unique projection screen name +# loc - relative location to the parent component. Location is relative +# to the VR root if no parent specified. The pivot is a screen's +# center and the values are in meters. +# rot - relative rotation to the parent component. Rotation is relative +# to the VR root if no parent specified. The pivot is a screen's +# center and the values are in degrees. +# size - width (X) and height (Y) of the screen. Values are in meters. +# +# Optional properties: +# parent - ID of parent component in VR hierarchy; default is VR root. +# tracker_id - ID of tracking device; no tracking by default. +# tracker_ch - ID of tracking device's channel; no tracking by default. +#******************************************************************** +[screen] id=screen_main loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.0,Y=1.85" parent=display_main +[screen] id=screen_front loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.0,Y=1.85" parent=display_front +############################################################### + + +##################################################################### +# List of viewport configurations +#******************************************************************** +# Viewport is a rectangle area of game window where rendered frame is +# mapped. Usually the viewport starts at 0:0 and has the same size as +# its parent window but in some cases these settings may differ. +# +# Properties: +# id - unique viewport name +# x - X coordinate of viewport's top left corner +# y - Y coordinate of viewport's top left corner +# width - width of viewport in pixels +# height - height of viewport in pixels +# +# Optional properties: +# flip_h - flip image horizontally; default is 'false' +# flip_v - flip image vertically; default is 'false' +#******************************************************************** +[viewport] id=vp_1600 x=0 y=0 width=2560 height=1600 flip_h=False flip_v=False +##################################################################### + + +##################################################################### +# List of cameras +#******************************************************************** +# Camera is a predefined point frome where the stereoscopic view built. +# It's possible to define multiple cameras and swith the active one +# during runtime. You're free to attach any camera to a tracking device +# for head tracking. Consider a camera as a viewer's head. +# +# Properties: +# id - unique camera name +# loc - relative location to the parent component. Location is relative +# to the VR root if no parent specified. +# rot - relative rotation to the parent component. Rotation is relative +# to the VR root if no parent specified. +# +# Optional properties: +# parent - ID of parent component in VR hierarchy; default is VR root. +# tracker_id - ID of tracking device; no tracking by default. +# tracker_ch - ID of tracking device's channel; no tracking by default. +#******************************************************************** +[camera] id=camera_dynamic loc="X=0,Y=0,Z=0" parent=shutter_glasses +##################################################################### + + +##################################################################### +# List of scene nodes nodes (hierarchy transforms) +#******************************************************************** +# Scene node is an actor component which is basically a transformation +# matrix. Scene nodes can be helpful to build a component hierarchy, to +# define some special places (like a socket) within VR space. +# +# It might be difficult to understand what VR space origin is. Consider +# it as a point in space where VR space starts. Any componenent listed +# in this config file is relative to its parent or this origin. +# +# Properties: +# id - unique scene node name +# loc - relative location to the parent component. Location is relative +# to the VR root if no parent specified. +# rot - relative rotation to the parent component. Rotation is relative +# to the VR root if no parent specified. +# +# Optional properties: +# parent - ID of parent component in VR hierarchy; default is VR root. +# tracker_id - ID of tracking device; no tracking by default. +# tracker_ch - ID of tracking device's channel; no tracking by default. +#******************************************************************** +[scene_node] id=rolv_origin loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" +[scene_node] id=flystick loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=rolv_origin tracker_id=dtrack_tracker tracker_ch=2 +[scene_node] id=shutter_glasses loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=rolv_origin tracker_id=dtrack_tracker tracker_ch=0 +[scene_node] id=display_main loc="X=0.4,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=shutter_glasses +[scene_node] id=display_front loc="X=0,Y=0,Z=0.952" rot="P=0,Y=0,R=0" parent=rolv_origin +##################################################################### + + +##################################################################### +# List of input devices +#******************************************************************** +# Input devices are VRPN devices. The nDisplay supports the following +# types: analog, button and tracker. Many of physical input devices +# can be connected via VRPN. +# +# Properties: +# id - nique device name +# type - VRPN type (analog, button or tracker). +# addr - address of a VRPN server which handles this particular device. +# The value must match the following format: DEVICENAME@SERVER_ADDRESS +# where DEVICENAME is a VRPN name of this device and SERVER_ADDRESS +# is IPv4 address of VRPN server. +# loc - relative location to the parent component. Location is relative +# to the VR root if no parent specified. +# rot - relative rotation to the parent component. Rotation is relative +# to the VR root if no parent specified. +# +# front (tracker only) - mapping of a tracking system axis to X axis of VR origin +# right (tracker only) - mapping of a tracking system axis to Y axis of VR origin +# up (tracker only) - mapping of a tracking system axis to Z axis of VR origin +# * The following values are allowed for axes mapping: X, -X, Y, -Y, Z, -Z +# +# Optional properties: +# remap - VRPN device channel remapping. Value format is: "from0:to0,from1:to1,...,fromN:toN". +# For example: remap="0:3,1:4,5:2" +#******************************************************************** +[input] id=dtrack_axis type=analog addr=DTrack2@10.0.1.160 +[input] id=dtrack_buttons type=buttons addr=DTrack2@10.0.1.160 +[input] id=dtrack_tracker type=tracker addr=DTrack2@10.0.1.160 loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" right=X up=Y front=-Z +##################################################################### + + +##################################################################### +# Stereoscopic settings +#******************************************************************** +# Properties: +# eye_swap - swap left and right eyes: +# false - L|R +# true - R|L +# eye_dist - interoccular distance in meters +[stereo] eye_swap=True eye_dist=0.064 +##################################################################### + + +##################################################################### +# General settings +#******************************************************************** +# Properties: +# swap_sync_policy - swap synchronization policy +# - 0 - no synchronization +# - 1 - software swap synchronization +# - 2 - NV swap lock (Nvidia cards only, OpenGL only) +[general] swap_sync_policy=2 +##################################################################### + + +##################################################################### +# Custom arguments +#******************************************************************** +# Any custom arguments available in runtime can be specified here. +# Format: ARG_NAME=ARG_VAL +[custom] +##################################################################### diff --git a/Plugins/nDisplayExtensions b/Plugins/nDisplayExtensions index 2c957ae50351a527617f6701b178f6128f6fbdee..bfd69b81e94a32ae54e5e3bd792e7b218eb9cef9 160000 --- a/Plugins/nDisplayExtensions +++ b/Plugins/nDisplayExtensions @@ -1 +1 @@ -Subproject commit 2c957ae50351a527617f6701b178f6128f6fbdee +Subproject commit bfd69b81e94a32ae54e5e3bd792e7b218eb9cef9 diff --git a/Shell/run_cave.py b/Shell/run_cave.py deleted file mode 100644 index f8528960291068ec1a8ef9212d08843e79464433..0000000000000000000000000000000000000000 --- a/Shell/run_cave.py +++ /dev/null @@ -1,84 +0,0 @@ -import subprocess -import sys -import time - -application_filepath = "../Binaries/Linux/template.bin" -configuration_filepath = "../Content/Configurations/aixcave.cfg" -dtrack_filepath = "/home/vrsw/DTrack/DTrack2_v2.13.0/bin/DTrack2.bin" -vrpn_filepath = "/home/vrsw/vrpn/vrpn_git/build_clang/server_src/vrpn_server" -vrpn_config_filepath = "/home/vrsw/vrpn/vrpn_git/build_clang/server_src/vrpn.cfg" - -hostname_lookup_table = { - "10.0.1.1" : "ngs01", - "10.0.1.2" : "ngs02", - "10.0.1.3" : "ngs03", - "10.0.1.4" : "ngs04", - "10.0.1.5" : "ngs05", - "10.0.1.6" : "ngs06", - "10.0.1.7" : "ngs07", - "10.0.1.8" : "ngs08", - "10.0.1.9" : "ngs09", - "10.0.1.10": "ngs10", - "10.0.1.11": "ngs11", - "10.0.1.12": "ngs12", - "10.0.1.13": "ngs13", - "10.0.1.14": "ngs14", - "10.0.1.15": "ngs15", - "10.0.1.16": "ngs16", - "10.0.1.17": "ngs17", - "10.0.1.18": "ngs18", - "10.0.1.19": "ngs19", - "10.0.1.20": "ngs20", - "10.0.1.21": "ngs21", - "10.0.1.22": "ngs22", - "10.0.1.23": "ngs23", - "10.0.1.24": "ngs24", - "10.0.1.25": "ngd01", - "10.0.1.26": "ngd02", - "10.0.1.29": "ngm01" -} - -def main(): - subprocess.call(["source module load clang/5.0"], shell=True) - subprocess.call(["mkdir -p slave_logs" ], shell=True) - - dtrack_process = subprocess.Popen([dtrack_filepath + " -directstart -measure -wakeup" ], shell=True) - time.sleep(2) - vrpn_process = subprocess.Popen([vrpn_filepath + " -f " + vrpn_config_filepath + " -millisleep 0"], shell=True) - time.sleep(2) - - processes = [] - - with open(configuration_filepath) as configuration_file: - lines = configuration_file.readlines() - - for line in lines: - if line.startsWith("#") or ("[cluster_node]" not in line) or ("master" in line): - continue - - split_line = line.split() - name = split_line[1][3:] - ip = split_line[2][5:] - - processes.append(subprocess.Popen([ - "ssh " + hostname_lookup_table[ip] + - " export XAUTHORITY=/var/run/Xauthority-vr; export DISPLAY=:0." + ("1" if ("eye_left" in name) else "0") + ";" - " /bin/nice_av00 -n -15 " + application_filepath + - " ResX=1920 ResY=1200 WinX=0 WinY=0 -fixedseed -nosplash -opengl4 -fullscreen" + - " dc_cfg=" + configuration_filepath + " dc_node=" + name + " -dc_cluster -dc_dev_mono" - " > slave_logs/slave_" + name + ".log"], shell=True)) - sleep(0.1) - - subprocess.call([ - "/bin/nice_av00 -n -15 " + application_filepath + - " ResX=1600 ResY=1000 WinX=0 WinY=0 -fixedseed -nosplash -opengl4 -useallavailablecores -windowed" + - " dc_cfg=" + configuration_filepath + " dc_node=node_main -dc_cluster -dc_dev_mono"], shell=True) - - for process in processes: - process.kill() - - vrpn_process .kill() - dtrack_process.kill() - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/Shell/run_cave.sh b/Shell/run_cave.sh deleted file mode 100644 index 73c9e813b01fe6c2f70bf7df08da014184821b20..0000000000000000000000000000000000000000 --- a/Shell/run_cave.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -python ./run_cave.py \ No newline at end of file