From d256e731594823dda9e5dbc84b775b9546c5f464 Mon Sep 17 00:00:00 2001 From: Bastiaan Olij Date: Sun, 28 Jan 2024 01:24:48 +1100 Subject: [PATCH] Add OpenXR demo project showing off local reference space --- xr/openxr_vehicle_movement/.gitattributes | 2 + xr/openxr_vehicle_movement/.gitignore | 2 + xr/openxr_vehicle_movement/assets/pattern.png | Bin 0 -> 1816 bytes .../assets/pattern.png.import | 35 ++++++ xr/openxr_vehicle_movement/icon.svg | 1 + xr/openxr_vehicle_movement/icon.svg.import | 37 +++++++ xr/openxr_vehicle_movement/main.tscn | 57 ++++++++++ .../openxr_action_map.tres | 34 ++++++ xr/openxr_vehicle_movement/project.godot | 54 +++++++++ xr/openxr_vehicle_movement/start_vr.gd | 104 ++++++++++++++++++ xr/openxr_vehicle_movement/track.gd | 37 +++++++ xr/openxr_vehicle_movement/track.tscn | 81 ++++++++++++++ xr/openxr_vehicle_movement/vehicle.gd | 33 ++++++ xr/openxr_vehicle_movement/vehicle.tscn | 103 +++++++++++++++++ 14 files changed, 580 insertions(+) create mode 100644 xr/openxr_vehicle_movement/.gitattributes create mode 100644 xr/openxr_vehicle_movement/.gitignore create mode 100644 xr/openxr_vehicle_movement/assets/pattern.png create mode 100644 xr/openxr_vehicle_movement/assets/pattern.png.import create mode 100644 xr/openxr_vehicle_movement/icon.svg create mode 100644 xr/openxr_vehicle_movement/icon.svg.import create mode 100644 xr/openxr_vehicle_movement/main.tscn create mode 100644 xr/openxr_vehicle_movement/openxr_action_map.tres create mode 100644 xr/openxr_vehicle_movement/project.godot create mode 100644 xr/openxr_vehicle_movement/start_vr.gd create mode 100644 xr/openxr_vehicle_movement/track.gd create mode 100644 xr/openxr_vehicle_movement/track.tscn create mode 100644 xr/openxr_vehicle_movement/vehicle.gd create mode 100644 xr/openxr_vehicle_movement/vehicle.tscn diff --git a/xr/openxr_vehicle_movement/.gitattributes b/xr/openxr_vehicle_movement/.gitattributes new file mode 100644 index 00000000000..8ad74f78d9c --- /dev/null +++ b/xr/openxr_vehicle_movement/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/xr/openxr_vehicle_movement/.gitignore b/xr/openxr_vehicle_movement/.gitignore new file mode 100644 index 00000000000..4709183670a --- /dev/null +++ b/xr/openxr_vehicle_movement/.gitignore @@ -0,0 +1,2 @@ +# Godot 4+ specific ignores +.godot/ diff --git a/xr/openxr_vehicle_movement/assets/pattern.png b/xr/openxr_vehicle_movement/assets/pattern.png new file mode 100644 index 0000000000000000000000000000000000000000..8bf420b0d5592ae1db80567a81184f26e06165ae GIT binary patch literal 1816 zcmbW2Z%i9?7{`BgY-5{D6JOwDf$59!!UU8h{2NzRz;zhMkg!9JLI;>t+rbE3Dmhw8 zK=Ch@q*2B?iZ~Mo*HRF#FzU*T&bh?w&~P*zP$Wc7T3W{1Qc9ucuVWJbEOYh6hbn0SKMVBT+P?sc2odi% z4}byHp7rwWu-;X3tXK-b-tR*f=ac96#sIKGpPR!gtSfU)54?P_H0GVzpOgt44exwb z`EyCHX1~`Inbf-TjmilA=e(vLj%4-kYkTwUMy74zpz;GIQacnG=NP%5%lolKGi0ql z+Qn6@xy6mm&CM9n-ri2)T={A~!8j}i5-%HVC?!NBM%&XeGIX@Gp`namR#%5nl{-!r z9JK0CinR+5w1Fcpa2iiN2EL5|O}jwEQy}snc=8o+;QYT|B(J%PoSzO34q`|k5Fl~0 z++RS5k~+ri#R;&vOePb1r>3UH?Hv?D;uqO|x6(a-T(9lQR8H8Jw?9gYt=|1VR}4Ju ziM{4>RqM45hXX^{HEv*RM#L`9@%37zqDzt9Ibrv&I7{?ek6S1d8tAz_|2e|e_d`Qp zg3NeJ96@O*gp{7%OG|MaBSdG<8c=F1u&B{!NE{_j>b0${tr(KMG@U}sL!EgN zsIns1?Yr3tGcsef_RvzLQW$=h53g5@)dQ2sMB;r0gXF#dK?gHxHvf-9CnhFBlMauJ zz$BbIS4c1(&(|nrvz6(!P-19diC2db7!nf`16^eky%qfK7Q3*}gQ^lAvNawcNNaU< z^^U7M`;A7FU}k5#QEFvHrq@nRPGU%Wd_0LKBqWHvXR4|~R%J6|pc91Ry+0~wgd^9Y literal 0 HcmV?d00001 diff --git a/xr/openxr_vehicle_movement/assets/pattern.png.import b/xr/openxr_vehicle_movement/assets/pattern.png.import new file mode 100644 index 00000000000..66d66fd80f9 --- /dev/null +++ b/xr/openxr_vehicle_movement/assets/pattern.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://rek0t7kubpx4" +path.s3tc="res://.godot/imported/pattern.png-cf6f03dfd1cdd4bc35da3414e912103d.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/pattern.png" +dest_files=["res://.godot/imported/pattern.png-cf6f03dfd1cdd4bc35da3414e912103d.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/xr/openxr_vehicle_movement/icon.svg b/xr/openxr_vehicle_movement/icon.svg new file mode 100644 index 00000000000..b370ceb7274 --- /dev/null +++ b/xr/openxr_vehicle_movement/icon.svg @@ -0,0 +1 @@ + diff --git a/xr/openxr_vehicle_movement/icon.svg.import b/xr/openxr_vehicle_movement/icon.svg.import new file mode 100644 index 00000000000..f7e49a8f40c --- /dev/null +++ b/xr/openxr_vehicle_movement/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d1s6lsinmhdj5" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/xr/openxr_vehicle_movement/main.tscn b/xr/openxr_vehicle_movement/main.tscn new file mode 100644 index 00000000000..bf6a95b992b --- /dev/null +++ b/xr/openxr_vehicle_movement/main.tscn @@ -0,0 +1,57 @@ +[gd_scene load_steps=11 format=3 uid="uid://db1q04xf4urua"] + +[ext_resource type="Texture2D" uid="uid://rek0t7kubpx4" path="res://assets/pattern.png" id="1_sbpla"] +[ext_resource type="PackedScene" uid="uid://dkdk37kpjui3q" path="res://vehicle.tscn" id="2_x0meh"] +[ext_resource type="Script" path="res://start_vr.gd" id="3_d042y"] +[ext_resource type="PackedScene" uid="uid://du5twm6cwhq6j" path="res://track.tscn" id="4_ddbiu"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_t0uks"] +sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) +ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) + +[sub_resource type="Sky" id="Sky_f7epq"] +sky_material = SubResource("ProceduralSkyMaterial_t0uks") + +[sub_resource type="Environment" id="Environment_ctbfb"] +background_mode = 2 +sky = SubResource("Sky_f7epq") +tonemap_mode = 2 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_jptbt"] +albedo_color = Color(0.211765, 0.717647, 0.160784, 1) +albedo_texture = ExtResource("1_sbpla") +uv1_scale = Vector3(100, 100, 100) + +[sub_resource type="PlaneMesh" id="PlaneMesh_judwf"] +size = Vector2(1000, 1000) +subdivide_width = 10 +subdivide_depth = 10 + +[sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_k6vqu"] + +[node name="Main" type="Node3D"] + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_ctbfb") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0) + +[node name="Floor" type="StaticBody3D" parent="."] + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Floor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.01, 0) +material_override = SubResource("StandardMaterial3D_jptbt") +mesh = SubResource("PlaneMesh_judwf") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Floor"] +shape = SubResource("WorldBoundaryShape3D_k6vqu") + +[node name="Vehicle" parent="." instance=ExtResource("2_x0meh")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.54837, 0.2, 0) + +[node name="StartVR" type="Node3D" parent="."] +script = ExtResource("3_d042y") +maximum_refresh_rate = 144 + +[node name="Track" parent="." instance=ExtResource("4_ddbiu")] diff --git a/xr/openxr_vehicle_movement/openxr_action_map.tres b/xr/openxr_vehicle_movement/openxr_action_map.tres new file mode 100644 index 00000000000..e98d70683d9 --- /dev/null +++ b/xr/openxr_vehicle_movement/openxr_action_map.tres @@ -0,0 +1,34 @@ +[gd_resource type="OpenXRActionMap" load_steps=7 format=3 uid="uid://b6o1742qdpkht"] + +[sub_resource type="OpenXRAction" id="OpenXRAction_bxnsb"] +resource_name = "default_pose" +localized_name = "Default pose" +action_type = 3 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_e4g8i"] +resource_name = "haptic" +localized_name = "Haptic" +action_type = 4 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRActionSet" id="OpenXRActionSet_ucgoy"] +resource_name = "godot" +localized_name = "Godot action set" +actions = [SubResource("OpenXRAction_bxnsb"), SubResource("OpenXRAction_e4g8i")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xbpfq"] +action = SubResource("OpenXRAction_bxnsb") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7tlrk"] +action = SubResource("OpenXRAction_e4g8i") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_1xkvk"] +interaction_profile_path = "/interaction_profiles/khr/simple_controller" +bindings = [SubResource("OpenXRIPBinding_xbpfq"), SubResource("OpenXRIPBinding_7tlrk")] + +[resource] +action_sets = [SubResource("OpenXRActionSet_ucgoy")] +interaction_profiles = [SubResource("OpenXRInteractionProfile_1xkvk")] diff --git a/xr/openxr_vehicle_movement/project.godot b/xr/openxr_vehicle_movement/project.godot new file mode 100644 index 00000000000..316e72fa0f6 --- /dev/null +++ b/xr/openxr_vehicle_movement/project.godot @@ -0,0 +1,54 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="OpenXR Vehicle Movement" +run/main_scene="res://main.tscn" +config/features=PackedStringArray("4.1", "GL Compatibility") +config/icon="res://icon.svg" + +[input] + +turn_left={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"echo":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":-1.0,"script":null) +] +} +turn_right={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":1.0,"script":null) +] +} +accelerate={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"echo":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":5,"axis_value":1.0,"script":null) +] +} +brake={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":1.0,"script":null) +] +} + +[rendering] + +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility" + +[xr] + +openxr/enabled=true +openxr/reference_space=0 +shaders/enabled=true diff --git a/xr/openxr_vehicle_movement/start_vr.gd b/xr/openxr_vehicle_movement/start_vr.gd new file mode 100644 index 00000000000..f3dc8af6d2b --- /dev/null +++ b/xr/openxr_vehicle_movement/start_vr.gd @@ -0,0 +1,104 @@ +extends Node3D + +signal focus_lost +signal focus_gained +signal pose_recentered + +@export var maximum_refresh_rate : int = 90 + +var xr_interface : OpenXRInterface +var xr_is_focussed = false + + +# Called when the node enters the scene tree for the first time. +func _ready(): + xr_interface = XRServer.find_interface("OpenXR") + if xr_interface and xr_interface.is_initialized(): + print("OpenXR instantiated successfully.") + var vp : Viewport = get_viewport() + + # Enable XR on our viewport + vp.use_xr = true + + # Make sure v-sync is off, v-sync is handled by OpenXR + DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED) + + # Connect the OpenXR events + xr_interface.connect("session_begun", _on_openxr_session_begun) + xr_interface.connect("session_visible", _on_openxr_visible_state) + xr_interface.connect("session_focussed", _on_openxr_focused_state) + xr_interface.connect("session_stopping", _on_openxr_stopping) + xr_interface.connect("pose_recentered", _on_openxr_pose_recentered) + else: + # We couldn't start OpenXR. + print("OpenXR not instantiated!") + get_tree().quit() + + +# Handle OpenXR session ready +func _on_openxr_session_begun() -> void: + # Get the reported refresh rate + var current_refresh_rate = xr_interface.get_display_refresh_rate() + if current_refresh_rate > 0: + print("OpenXR: Refresh rate reported as ", str(current_refresh_rate)) + else: + print("OpenXR: No refresh rate given by XR runtime") + + # See if we have a better refresh rate available + var new_rate = current_refresh_rate + var available_rates : Array = xr_interface.get_available_display_refresh_rates() + if available_rates.size() == 0: + print("OpenXR: Target does not support refresh rate extension") + elif available_rates.size() == 1: + # Only one available, so use it + new_rate = available_rates[0] + else: + for rate in available_rates: + if rate > new_rate and rate <= maximum_refresh_rate: + new_rate = rate + + # Did we find a better rate? + if current_refresh_rate != new_rate: + print("OpenXR: Setting refresh rate to ", str(new_rate)) + xr_interface.set_display_refresh_rate(new_rate) + current_refresh_rate = new_rate + + # Now match our physics rate + Engine.physics_ticks_per_second = current_refresh_rate + + +# Handle OpenXR visible state +func _on_openxr_visible_state() -> void: + # We always pass this state at startup, + # but the second time we get this it means our player took off their headset + if xr_is_focussed: + print("OpenXR lost focus") + + xr_is_focussed = false + + # pause our game + process_mode = Node.PROCESS_MODE_DISABLED + + emit_signal("focus_lost") + + +# Handle OpenXR focused state +func _on_openxr_focused_state() -> void: + print("OpenXR gained focus") + xr_is_focussed = true + + # unpause our game + process_mode = Node.PROCESS_MODE_INHERIT + + emit_signal("focus_gained") + +# Handle OpenXR stopping state +func _on_openxr_stopping() -> void: + # Our session is being stopped. + print("OpenXR is stopping") + +# Handle OpenXR pose recentered signal +func _on_openxr_pose_recentered() -> void: + # User recentered view, we have to react to this by recentering the view. + # This is game implementation dependent. + emit_signal("pose_recentered") diff --git a/xr/openxr_vehicle_movement/track.gd b/xr/openxr_vehicle_movement/track.gd new file mode 100644 index 00000000000..e6636056a8b --- /dev/null +++ b/xr/openxr_vehicle_movement/track.gd @@ -0,0 +1,37 @@ +@tool +extends Path3D + +@export var tire_spacing : float = 0.5: + set(value): + tire_spacing = value + if is_inside_tree(): + _update_tires() + +func _update_tires(): + var multimesh : MultiMesh = $Tirewall.multimesh + + # Cheap and dirty approach, need to improve this! + var track_length = curve.get_baked_length() + var tires_per_side = floor(track_length / tire_spacing) + var offset = 0.0 + + multimesh.instance_count = tires_per_side * 2 + for tire in range(tires_per_side): + var t : Transform3D = curve.sample_baked_with_rotation(offset) + + var t_adj : Transform3D = t + t_adj.origin += t_adj.basis.x * 5.0 + multimesh.set_instance_transform(tire, t_adj) + + t_adj = t + t_adj.origin -= t_adj.basis.x * 5.0 + multimesh.set_instance_transform(tires_per_side + tire, t_adj) + + offset += tire_spacing + +# Called when the node enters the scene tree for the first time. +func _ready(): + _update_tires() + + if Engine.is_editor_hint(): + curve_changed.connect(_update_tires) diff --git a/xr/openxr_vehicle_movement/track.tscn b/xr/openxr_vehicle_movement/track.tscn new file mode 100644 index 00000000000..0b6d0162f88 --- /dev/null +++ b/xr/openxr_vehicle_movement/track.tscn @@ -0,0 +1,81 @@ +[gd_scene load_steps=8 format=3 uid="uid://du5twm6cwhq6j"] + +[ext_resource type="Script" path="res://track.gd" id="1_8qwqq"] +[ext_resource type="Texture2D" uid="uid://rek0t7kubpx4" path="res://assets/pattern.png" id="1_onscr"] + +[sub_resource type="Curve3D" id="Curve3D_3wmeb"] +_data = { +"points": PackedVector3Array(0.0292435, 0, 4.53269, -0.0292435, 0, -4.53269, -4.45862, 0, 9.64814, -1.14149, 0, 6.18867, 1.14149, 0, -6.18867, -3.99149, 0, -8.28683, -14.9627, 0, 0.252537, 14.9627, 0, -0.252537, 18.8009, 0, -21.0328, 7.67851, 0, -8.31507, -7.67851, 0, 8.31507, 44.826, 0, -1.48507, 9.71612, 0, -1.92427, -9.71612, 0, 1.92427, 21.5157, 0, -0.261784, -6.57491, 0, -3.79677, 6.57491, 0, 3.79677, 20.7089, 0, 18.5863, 1.11646, 0, -5.91727, -1.11646, 0, 5.91727, 35.0403, 0, 32.7914, 8.82008, 0, -0.44659, -8.82008, 0, 0.44659, 17.9251, 0, 42.3858, 1.13641, 0, 5.74518, -1.13641, 0, -5.74518, -3.8064, 0, 29.5953, -0.00488853, 0, 8.24115, 0.00488853, 0, -8.24115, -4.44825, 0, 10.0306), +"tilts": PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) +} +point_count = 10 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_w255p"] +albedo_texture = ExtResource("1_onscr") +uv1_scale = Vector3(0.25, 8, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_p1lww"] +albedo_color = Color(0.109804, 0.109804, 0.109804, 1) + +[sub_resource type="CylinderMesh" id="CylinderMesh_3ddkd"] +material = SubResource("StandardMaterial3D_p1lww") +top_radius = 0.4 +bottom_radius = 0.4 +height = 0.35 + +[sub_resource type="MultiMesh" id="MultiMesh_tv7s7"] +transform_format = 1 +instance_count = 444 +mesh = SubResource("CylinderMesh_3ddkd") +buffer = PackedFloat32Array(0.999979, 0, 0.00645155, 0.541276, 0, 1, 0, 0, -0.00645155, 0, 0.999979, 9.61588, 0.999773, 0, 0.021308, 0.525661, 0, 1, 0, 0, -0.021308, 0, 0.999773, 8.54172, 0.999569, 0, 0.0293693, 0.498835, 0, 1, 0, 0, -0.0293693, 0, 0.999569, 7.50174, 0.99946, 0, 0.0328483, 0.466862, 0, 1, 0, 0, -0.0328483, 0, 0.99946, 6.48484, 0.999457, 0, 0.0329597, 0.433695, 0, 1, 0, 0, -0.0329597, 0, 0.999457, 5.48484, 0.999537, 0, 0.030415, 0.402215, 0, 1, 0, 0, -0.030415, 0, 0.999537, 4.49807, 0.999671, 0, 0.0256598, 0.374671, 0, 1, 0, 0, -0.0256598, 0, 0.999671, 3.52224, 0.99982, 0, 0.0189544, 0.352957, 0, 1, 0, 0, -0.0189544, 0, 0.99982, 2.55603, 0.999945, 0, 0.0104508, 0.338739, 0, 1, 0, 0, -0.0104508, 0, 0.999945, 1.59866, 1, 0, 0.000223214, 0.333534, 0, 1, 0, 0, -0.000223214, 0, 1, 0.649813, 0.999931, 0, -0.0117137, 0.338772, 0, 1, 0, 0, 0.0117137, 0, 0.999931, -0.290482, 0.999677, 0, -0.0254052, 0.355929, 0, 1, 0, 0, 0.0254052, 0, 0.999677, -1.22185, 0.999162, 0, -0.0409247, 0.386368, 0, 1, 0, 0, 0.0409247, 0, 0.999162, -2.14369, 0.998294, 0, -0.0583907, 0.431485, 0, 1, 0, 0, 0.0583907, 0, 0.998294, -3.05513, 0.996955, 0, -0.0779773, 0.492831, 0, 1, 0, 0, 0.0779773, 0, 0.996955, -3.95486, 0.995, 0, -0.0998713, 0.57174, 0, 1, 0, 0, 0.0998713, 0, 0.995, -4.84143, 0.99224, 0, -0.124337, 0.669844, 0, 1, 0, 0, 0.124337, 0, 0.99224, -5.71279, 0.988432, 0, -0.151662, 0.788568, 0, 1, 0, 0, 0.151662, 0, 0.988432, -6.5666, 0.983003, 0, -0.183587, 0.92813, 0, 1, 0, 0, 0.183587, 0, 0.983003, -7.39294, 0.962399, 0, -0.271641, 1.05301, 0, 1, 0, 0, 0.271641, 0, 0.962399, -7.926, 0.93471, 0, -0.355411, 1.22863, 0, 1, 0, 0, 0.355411, 0, 0.93471, -8.4562, 0.90089, 0, -0.434047, 1.45461, 0, 1, 0, 0, 0.434047, 0, 0.90089, -8.98132, 0.862026, 0, -0.506864, 1.73122, 0, 1, 0, 0, 0.506864, 0, 0.862026, -9.49909, 0.819269, 0, -0.573409, 2.05815, 0, 1, 0, 0, 0.573409, 0, 0.819269, -10.0073, 0.773755, 0, -0.633486, 2.43448, 0, 1, 0, 0, 0.633486, 0, 0.773755, -10.5036, 0.726569, 0, -0.687093, 2.85953, 0, 1, 0, 0, 0.687093, 0, 0.726569, -10.9857, 0.678644, 0, -0.734468, 3.33115, 0, 1, 0, 0, 0.734468, 0, 0.678644, -11.4515, 0.630794, 0, -0.77595, 3.84766, 0, 1, 0, 0, 0.77595, 0, 0.630794, -11.8987, 0.583647, 0, -0.812007, 4.40633, 0, 1, 0, 0, 0.812007, 0, 0.583647, -12.3255, 0.537681, 0, -0.843148, 5.00433, 0, 1, 0, 0, 0.843148, 0, 0.537681, -12.7306, 0.493273, 0, -0.869875, 5.63917, 0, 1, 0, 0, 0.869875, 0, 0.493273, -13.1122, 0.450632, 0, -0.89271, 6.30755, 0, 1, 0, 0, 0.89271, 0, 0.450632, -13.4698, 0.409899, 0, -0.912131, 7.00658, 0, 1, 0, 0, 0.912131, 0, 0.409899, -13.8028, 0.371131, 0, -0.928581, 7.73331, 0, 1, 0, 0, 0.928581, 0, 0.371131, -14.1109, 0.334338, 0, -0.942453, 8.48507, 0, 1, 0, 0, 0.942453, 0, 0.334338, -14.3941, 0.299483, 0, -0.954102, 9.25924, 0, 1, 0, 0, 0.954102, 0, 0.299483, -14.6526, 0.266504, 0, -0.963834, 10.0534, 0, 1, 0, 0, 0.963834, 0, 0.266504, -14.8868, 0.235328, 0, -0.971916, 10.8656, 0, 1, 0, 0, 0.971916, 0, 0.235328, -15.0972, 0.205856, 0, -0.978582, 11.6936, 0, 1, 0, 0, 0.978582, 0, 0.205856, -15.2843, 0.178001, 0, -0.98403, 12.5357, 0, 1, 0, 0, 0.98403, 0, 0.178001, -15.4489, 0.151666, 0, -0.988432, 13.3903, 0, 1, 0, 0, 0.988432, 0, 0.151666, -15.5915, 0.126753, 0, -0.991934, 14.256, 0, 1, 0, 0, 0.991934, 0, 0.126753, -15.7131, 0.103171, 0, -0.994664, 15.1315, 0, 1, 0, 0, 0.994664, 0, 0.103171, -15.8143, 0.0808296, 0, -0.996728, 16.0155, 0, 1, 0, 0, 0.996728, 0, 0.0808296, -15.8959, 0.059652, 0, -0.998219, 16.9071, 0, 1, 0, 0, 0.998219, 0, 0.059652, -15.9586, 0.0395539, 0, -0.999217, 17.8054, 0, 1, 0, 0, 0.999217, 0, 0.0395539, -16.0031, 0.0204647, 0, -0.999791, 18.7095, 0, 1, 0, 0, 0.999791, 0, 0.0204647, -16.0302, -0.0107633, 0, -0.999942, 19.5533, 0, 1, 0, 0, 0.999942, 0, -0.0107633, -16.0353, -0.0433128, 0, -0.999062, 20.3901, 0, 1, 0, 0, 0.999062, 0, -0.0433128, -16.0126, -0.074128, 0, -0.997249, 21.2343, 0, 1, 0, 0, 0.997249, 0, -0.074128, -15.9628, -0.103411, 0, -0.994639, 22.0839, 0, 1, 0, 0, 0.994639, 0, -0.103411, -15.8869, -0.13135, 0, -0.991336, 22.9372, 0, 1, 0, 0, 0.991336, 0, -0.13135, -15.786, -0.158115, 0, -0.987421, 23.7928, 0, 1, 0, 0, 0.987421, 0, -0.158115, -15.6607, -0.183869, 0, -0.982951, 24.6493, 0, 1, 0, 0, 0.982951, 0, -0.183869, -15.512, -0.208761, 0, -0.977967, 25.5053, 0, 1, 0, 0, 0.977967, 0, -0.208761, -15.3406, -0.232931, 0, -0.972493, 26.3597, 0, 1, 0, 0, 0.972493, 0, -0.232931, -15.147, -0.256515, 0, -0.96654, 27.2114, 0, 1, 0, 0, 0.96654, 0, -0.256515, -14.9321, -0.279637, 0, -0.960106, 28.0591, 0, 1, 0, 0, 0.960106, 0, -0.279637, -14.696, -0.302425, 0, -0.953173, 28.9019, 0, 1, 0, 0, 0.953173, 0, -0.302425, -14.4397, -0.325, 0, -0.945714, 29.7385, 0, 1, 0, 0, 0.945714, 0, -0.325, -14.1632, -0.347485, 0, -0.937686, 30.5678, 0, 1, 0, 0, 0.937686, 0, -0.347485, -13.8672, -0.370006, 0, -0.929029, 31.3886, 0, 1, 0, 0, 0.929029, 0, -0.370006, -13.5517, -0.392691, 0, -0.91967, 32.1996, 0, 1, 0, 0, 0.91967, 0, -0.392691, -13.2172, -0.415684, 0, -0.909509, 32.9993, 0, 1, 0, 0, 0.909509, 0, -0.415684, -12.8638, -0.439127, 0, -0.898425, 33.7861, 0, 1, 0, 0, 0.898425, 0, -0.439127, -12.4919, -0.463187, 0, -0.886261, 34.5583, 0, 1, 0, 0, 0.886261, 0, -0.463187, -12.1016, -0.488048, 0, -0.872817, 35.3136, 0, 1, 0, 0, 0.872817, 0, -0.488048, -11.6933, -0.51391, 0, -0.857844, 36.0498, 0, 1, 0, 0, 0.857844, 0, -0.51391, -11.2673, -0.541007, 0, -0.841018, 36.7639, 0, 1, 0, 0, 0.841018, 0, -0.541007, -10.8241, -0.569604, 0, -0.821919, 37.4526, 0, 1, 0, 0, 0.821919, 0, -0.569604, -10.3644, -0.600021, 0, -0.799984, 38.1117, 0, 1, 0, 0, 0.799984, 0, -0.600021, -9.88939, -0.632584, 0, -0.774491, 38.7365, 0, 1, 0, 0, 0.774491, 0, -0.632584, -9.40078, -0.667698, 0, -0.744432, 39.3208, 0, 1, 0, 0, 0.744432, 0, -0.667698, -8.90112, -0.705751, 0, -0.70846, 39.8575, 0, 1, 0, 0, 0.70846, 0, -0.705751, -8.39453, -0.747105, 0, -0.664706, 40.3381, 0, 1, 0, 0, 0.664706, 0, -0.747105, -7.88719, -0.791957, 0, -0.610576, 40.7525, 0, 1, 0, 0, 0.610576, 0, -0.791957, -7.38858, -0.84001, 0, -0.542571, 41.0902, 0, 1, 0, 0, 0.542571, 0, -0.84001, -6.91288, -0.889928, 0, -0.456101, 41.3416, 0, 1, 0, 0, 0.456101, 0, -0.889928, -6.48031, -0.938258, 0, -0.345936, 41.5033, 0, 1, 0, 0, 0.345936, 0, -0.938258, -6.11672, -0.978167, 0, -0.207821, 41.583, 0, 1, 0, 0, 0.207821, 0, -0.978167, -5.84799, -0.999092, 0, -0.0426166, 41.6056, 0, 1, 0, 0, 0.0426166, 0, -0.999092, -5.68334, -0.990303, 0, 0.138927, 41.602, 0, 1, 0, 0, -0.138927, 0, -0.990303, -5.59359, -0.94851, 0, 0.316747, 41.5819, 0, 1, 0, 0, -0.316747, 0, -0.94851, -5.51075, -0.881819, 0, 0.471588, 41.5187, 0, 1, 0, 0, -0.471588, 0, -0.881819, -5.36831, -0.803929, 0, 0.594725, 41.3724, 0, 1, 0, 0, -0.594725, 0, -0.803929, -5.14067, -0.730421, 0, 0.682997, 41.0967, 0, 1, 0, 0, -0.682997, 0, -0.730421, -4.81711, -0.68759, 0, 0.726099, 40.6067, 0, 1, 0, 0, -0.726099, 0, -0.68759, -4.32277, -0.633085, 0, 0.774082, 40.1296, 0, 1, 0, 0, -0.774082, 0, -0.633085, -3.90125, -0.563848, 0, 0.825879, 39.676, 0, 1, 0, 0, -0.825879, 0, -0.563848, -3.56042, -0.477283, 0, 0.87875, 39.2564, 0, 1, 0, 0, -0.87875, 0, -0.477283, -3.30284, -0.373016, 0, 0.927825, 38.8738, 0, 1, 0, 0, -0.927825, 0, -0.373016, -3.12181, -0.255028, 0, 0.966934, 38.5154, 0, 1, 0, 0, -0.966934, 0, -0.255028, -3.00222, -0.132346, 0, 0.991204, 38.1484, 0, 1, 0, 0, -0.991204, 0, -0.132346, -2.92977, -0.0165498, 0, 0.999863, 37.7307, 0, 1, 0, 0, -0.999863, 0, -0.0165498, -2.89969, 0.08307, 0, 0.996544, 37.2298, 0, 1, 0, 0, -0.996544, 0, 0.08307, -2.91798, 0.162088, 0, 0.986776, 36.6329, 0, 1, 0, 0, -0.986776, 0, 0.162088, -2.99358, 0.220294, 0, 0.975434, 35.9429, 0, 1, 0, 0, -0.975434, 0, 0.220294, -3.12982, 0.259647, 0, 0.965704, 35.1693, 0, 1, 0, 0, -0.965704, 0, 0.259647, -3.32262, 0.282609, 0, 0.959235, 34.3219, 0, 1, 0, 0, -0.959235, 0, 0.282609, -3.56262, 0.291203, 0, 0.956661, 33.4073, 0, 1, 0, 0, -0.956661, 0, 0.291203, -3.8378, 0.28722, 0, 0.957865, 32.4304, 0, 1, 0, 0, -0.957865, 0, 0.28722, -4.13403, 0.271759, 0, 0.962365, 31.3932, 0, 1, 0, 0, -0.962365, 0, 0.271759, -4.43696, 0.245598, 0, 0.969372, 30.2967, 0, 1, 0, 0, -0.969372, 0, 0.245598, -4.73147, 0.20948, 0, 0.977813, 29.1426, 0, 1, 0, 0, -0.977813, 0, 0.20948, -5.00198, 0.164135, 0, 0.986438, 27.9337, 0, 1, 0, 0, -0.986438, 0, 0.164135, -5.23264, 0.110592, 0, 0.993866, 26.6757, 0, 1, 0, 0, -0.993866, 0, 0.110592, -5.40802, 0.0501889, 0, 0.99874, 25.3772, 0, 1, 0, 0, -0.99874, 0, 0.0501889, -5.51323, -0.0151742, 0, 0.999885, 24.0507, 0, 1, 0, 0, -0.999885, 0, -0.0151742, -5.53679, -0.0833027, 0, 0.996524, 22.7114, 0, 1, 0, 0, -0.996524, 0, -0.0833027, -5.47086, -0.151882, 0, 0.988399, 21.3757, 0, 1, 0, 0, -0.988399, 0, -0.151882, -5.31257, -0.228021, 0, 0.973656, 20.0129, 0, 1, 0, 0, -0.973656, 0, -0.228021, -5.05166, -0.326216, 0, 0.945295, 18.5613, 0, 1, 0, 0, -0.945295, 0, -0.326216, -4.63358, -0.433449, 0, 0.901178, 17.1004, 0, 1, 0, 0, -0.901178, 0, -0.433449, -4.03386, -0.545607, 0, 0.838041, 15.6685, 0, 1, 0, 0, -0.838041, 0, -0.545607, -3.22861, -0.65595, 0, 0.754804, 14.3189, 0, 1, 0, 0, -0.754804, 0, -0.65595, -2.21099, -0.756583, 0, 0.653897, 13.1098, 0, 1, 0, 0, -0.653897, 0, -0.756583, -0.999378, -0.840902, 0, 0.541188, 12.0902, 0, 1, 0, 0, -0.541188, 0, -0.840902, 0.364599, -0.905626, 0, 0.424076, 11.284, 0, 1, 0, 0, -0.424076, 0, -0.905626, 1.82511, -0.951064, 0, 0.308994, 10.6904, 0, 1, 0, 0, -0.308994, 0, -0.951064, 3.33026, -0.979758, 0, 0.200187, 10.2932, 0, 1, 0, 0, -0.200187, 0, -0.979758, 4.84102, -0.995047, 0, 0.0994015, 10.0676, 0, 1, 0, 0, -0.0994015, 0, -0.995047, 6.33329, -0.999977, 0, 0.00685796, 9.99058, 0, 1, 0, 0, -0.00685796, 0, -0.999977, 7.79428, -0.996934, 0, -0.0782512, 10.0418, 0, 1, 0, 0, 0.0782512, 0, -0.996934, 9.21886, -0.987595, 0, -0.15702, 10.2068, 0, 1, 0, 0, 0.15702, 0, -0.987595, 10.6054, -0.97301, 0, -0.230762, 10.4741, 0, 1, 0, 0, 0.230762, 0, -0.97301, 11.9548, -0.953719, 0, -0.300699, 10.8365, 0, 1, 0, 0, 0.300699, 0, -0.953719, 13.2682, -0.929845, 0, -0.367952, 11.2903, 0, 1, 0, 0, 0.367952, 0, -0.929845, 14.5467, -0.901145, 0, -0.433518, 11.8344, 0, 1, 0, 0, 0.433518, 0, -0.901145, 15.7905, -0.867018, 0, -0.498277, 12.4712, 0, 1, 0, 0, 0.498277, 0, -0.867018, 16.9988, -0.826512, 0, -0.562919, 13.2044, 0, 1, 0, 0, 0.562919, 0, -0.826512, 18.1693, -0.778298, 0, -0.627895, 14.0408, 0, 1, 0, 0, 0.627895, 0, -0.778298, 19.2973, -0.720646, 0, -0.693303, 14.9894, 0, 1, 0, 0, 0.693303, 0, -0.720646, 20.3748, -0.651416, 0, -0.75872, 16.0618, 0, 1, 0, 0, 0.75872, 0, -0.651416, 21.3888, -0.568437, 0, -0.822727, 17.2674, 0, 1, 0, 0, 0.822727, 0, -0.568437, 22.3203, -0.498634, 0, -0.866813, 18.4673, 0, 1, 0, 0, 0.866813, 0, -0.498634, 23.0653, -0.49564, 0, -0.868528, 19.3501, 0, 1, 0, 0, 0.868528, 0, -0.49564, 23.5708, -0.495472, 0, -0.868624, 20.2196, 0, 1, 0, 0, 0.868624, 0, -0.495472, 24.0666, -0.497835, 0, -0.867272, 21.0759, 0, 1, 0, 0, 0.867272, 0, -0.497835, 24.5563, -0.502605, 0, -0.864516, 21.918, 0, 1, 0, 0, 0.864516, 0, -0.502605, 25.0425, -0.509735, 0, -0.860332, 22.7449, 0, 1, 0, 0, 0.860332, 0, -0.509735, 25.5276, -0.519259, 0, -0.854617, 23.5549, 0, 1, 0, 0, 0.854617, 0, -0.519259, 26.0133, -0.531303, 0, -0.847182, 24.3458, 0, 1, 0, 0, 0.847182, 0, -0.531303, 26.5012, -0.546101, 0, -0.837719, 25.1144, 0, 1, 0, 0, 0.837719, 0, -0.546101, 26.9924, -0.563937, 0, -0.825818, 25.8572, 0, 1, 0, 0, 0.825818, 0, -0.563937, 27.4876, -0.58521, 0, -0.810882, 26.5696, 0, 1, 0, 0, 0.810882, 0, -0.58521, 27.9872, -0.610479, 0, -0.792032, 27.245, 0, 1, 0, 0, 0.792032, 0, -0.610479, 28.4905, -0.640368, 0, -0.768068, 27.8761, 0, 1, 0, 0, 0.768068, 0, -0.640368, 28.9956, -0.675646, 0, -0.737226, 28.453, 0, 1, 0, 0, 0.737226, 0, -0.675646, 29.4989, -0.717131, 0, -0.696939, 28.9636, 0, 1, 0, 0, 0.696939, 0, -0.717131, 29.9933, -0.765424, 0, -0.643527, 29.3937, 0, 1, 0, 0, 0.643527, 0, -0.765424, 30.4669, -0.820394, 0, -0.571799, 29.7282, 0, 1, 0, 0, 0.571799, 0, -0.820394, 30.9007, -0.879887, 0, -0.475184, 29.9567, 0, 1, 0, 0, 0.475184, 0, -0.879887, 31.2675, -0.937779, 0, -0.347234, 30.0812, 0, 1, 0, 0, 0.347234, 0, -0.937779, 31.5371, -0.982435, 0, -0.186604, 30.1276, 0, 1, 0, 0, 0.186604, 0, -0.982435, 31.6957, -0.999993, 0, -0.00379913, 30.1357, 0, 1, 0, 0, 0.00379913, 0, -0.999993, 31.7756, -0.983973, 0, 0.178316, 30.1275, 0, 1, 0, 0, -0.178316, 0, -0.983973, 31.8597, -0.954666, 0, 0.297678, 30.0351, 0, 1, 0, 0, -0.297678, 0, -0.954666, 32.2333, -0.911384, 0, 0.411558, 29.8964, 0, 1, 0, 0, -0.411558, 0, -0.911384, 32.598, -0.856243, 0, 0.516573, 29.707, 0, 1, 0, 0, -0.516573, 0, -0.856243, 32.9575, -0.793296, 0, 0.608836, 29.4579, 0, 1, 0, 0, -0.608836, 0, -0.793296, 33.3214, -0.726844, 0, 0.686803, 29.1412, 0, 1, 0, 0, -0.686803, 0, -0.726844, 33.6918, -0.660435, 0, 0.750883, 28.7533, 0, 1, 0, 0, -0.750883, 0, -0.660435, 34.0649, -0.596451, 0, 0.802649, 28.2954, 0, 1, 0, 0, -0.802649, 0, -0.596451, 34.4342, -0.536185, 0, 0.844101, 27.7727, 0, 1, 0, 0, -0.844101, 0, -0.536185, 34.793, -0.480221, 0, 0.877147, 27.1912, 0, 1, 0, 0, -0.877147, 0, -0.480221, 35.1355, -0.428563, 0, 0.903512, 26.5587, 0, 1, 0, 0, -0.903512, 0, -0.428563, 35.4577, -0.381, 0, 0.924575, 25.8821, 0, 1, 0, 0, -0.924575, 0, -0.381, 35.7568, -0.337181, 0, 0.94144, 25.1678, 0, 1, 0, 0, -0.94144, 0, -0.337181, 36.0313, -0.296704, 0, 0.954969, 24.4218, 0, 1, 0, 0, -0.954969, 0, -0.296704, 36.2804, -0.259203, 0, 0.965823, 23.6487, 0, 1, 0, 0, -0.965823, 0, -0.259203, 36.5037, -0.22428, 0, 0.974525, 22.853, 0, 1, 0, 0, -0.974525, 0, -0.22428, 36.7019, -0.19164, 0, 0.981465, 22.0381, 0, 1, 0, 0, -0.981465, 0, -0.19164, 36.8749, -0.160966, 0, 0.98696, 21.2071, 0, 1, 0, 0, -0.98696, 0, -0.160966, 37.0235, -0.132005, 0, 0.991249, 20.3627, 0, 1, 0, 0, -0.991249, 0, -0.132005, 37.1484, -0.10453, 0, 0.994522, 19.5071, 0, 1, 0, 0, -0.994522, 0, -0.10453, 37.2503, -0.0783523, 0, 0.996926, 18.6422, 0, 1, 0, 0, -0.996926, 0, -0.0783523, 37.3296, -0.0532937, 0, 0.998579, 17.7697, 0, 1, 0, 0, -0.998579, 0, -0.0532937, 37.3871, 0.0077951, 0, 0.99997, 17.0756, 0, 1, 0, 0, -0.99997, 0, 0.0077951, 37.4044, 0.066997, 0, 0.997753, 16.3725, 0, 1, 0, 0, -0.997753, 0, 0.066997, 37.3776, 0.120175, 0, 0.992753, 15.6429, 0, 1, 0, 0, -0.992753, 0, 0.120175, 37.3086, 0.168198, 0, 0.985753, 14.8937, 0, 1, 0, 0, -0.985753, 0, 0.168198, 37.199, 0.211863, 0, 0.977299, 14.1304, 0, 1, 0, 0, -0.977299, 0, 0.211863, 37.0509, 0.251868, 0, 0.967762, 13.3578, 0, 1, 0, 0, -0.967762, 0, 0.251868, 36.8665, 0.288833, 0, 0.957379, 12.58, 0, 1, 0, 0, -0.957379, 0, 0.288833, 36.6477, 0.323291, 0, 0.9463, 11.8004, 0, 1, 0, 0, -0.9463, 0, 0.323291, 36.3969, 0.355698, 0, 0.934601, 11.0219, 0, 1, 0, 0, -0.934601, 0, 0.355698, 36.1157, 0.386468, 0, 0.922303, 10.2473, 0, 1, 0, 0, -0.922303, 0, 0.386468, 35.8061, 0.415964, 0, 0.909381, 9.47885, 0, 1, 0, 0, -0.909381, 0, 0.415964, 35.4693, 0.444519, 0, 0.89577, 8.71901, 0, 1, 0, 0, -0.89577, 0, 0.444519, 35.1071, 0.472445, 0, 0.88136, 7.97001, 0, 1, 0, 0, -0.88136, 0, 0.472445, 34.7206, 0.500046, 0, 0.865999, 7.23425, 0, 1, 0, 0, -0.865999, 0, 0.500046, 34.3112, 0.527624, 0, 0.849478, 6.5143, 0, 1, 0, 0, -0.849478, 0, 0.527624, 33.88, 0.555496, 0, 0.831519, 5.81302, 0, 1, 0, 0, -0.831519, 0, 0.555496, 33.4283, 0.584003, 0, 0.811752, 5.13375, 0, 1, 0, 0, -0.811752, 0, 0.584003, 32.9574, 0.613523, 0, 0.789677, 4.4804, 0, 1, 0, 0, -0.789677, 0, 0.613523, 32.4692, 0.644501, 0, 0.764603, 3.85789, 0, 1, 0, 0, -0.764603, 0, 0.644501, 31.9656, 0.677437, 0, 0.735581, 3.27208, 0, 1, 0, 0, -0.735581, 0, 0.677437, 31.45, 0.712975, 0, 0.701189, 2.73103, 0, 1, 0, 0, -0.701189, 0, 0.712975, 30.9268, 0.751765, 0, 0.659431, 2.24392, 0, 1, 0, 0, -0.659431, 0, 0.751765, 30.4036, 0.794574, 0, 0.607167, 1.82352, 0, 1, 0, 0, -0.607167, 0, 0.794574, 29.8922, 0.842003, 0, 0.539473, 1.48574, 0, 1, 0, 0, -0.539473, 0, 0.842003, 29.4128, 0.893757, 0, 0.448552, 1.24807, 0, 1, 0, 0, -0.448552, 0, 0.893757, 28.9999, 0.946677, 0, 0.322183, 1.12395, 0, 1, 0, 0, -0.322183, 0, 0.946677, 28.7112, 0.982413, 0, 0.186722, 1.05879, 0, 1, 0, 0, -0.186722, 0, 0.982413, 28.4198, 0.987505, 0, 0.15759, 0.912172, 0, 1, 0, 0, -0.15759, 0, 0.987505, 27.5804, 0.991537, 0, 0.129825, 0.788799, 0, 1, 0, 0, -0.129825, 0, 0.991537, 26.7296, 0.994584, 0, 0.103934, 0.687308, 0, 1, 0, 0, -0.103934, 0, 0.994584, 25.8659, 0.996768, 0, 0.0803376, 0.606292, 0, 1, 0, 0, -0.0803376, 0, 0.996768, 24.9882, 0.998238, 0, 0.0593319, 0.544058, 0, 1, 0, 0, -0.0593319, 0, 0.998238, 24.0956, 0.999156, 0, 0.041074, 0.498679, 0, 1, 0, 0, -0.041074, 0, 0.999156, 23.1882, 0.999672, 0, 0.0256094, 0.468147, 0, 1, 0, 0, -0.0256094, 0, 0.999672, 22.2661, 0.999917, 0, 0.0128816, 0.450353, 0, 1, 0, 0, -0.0128816, 0, 0.999917, 21.3299, 0.999996, 0, 0.00275434, 0.443141, 0, 1, 0, 0, -0.00275434, 0, 0.999996, 20.3806, 0.999988, 0, -0.00496499, 0.444381, 0, 1, 0, 0, 0.00496499, 0, 0.999988, 19.4192, 0.999945, 0, -0.0104831, 0.452077, 0, 1, 0, 0, 0.0104831, 0, 0.999945, 18.4468, 0.999901, 0, -0.014052, 0.464272, 0, 1, 0, 0, 0.014052, 0, 0.999901, 17.4647, 0.999874, 0, -0.0158932, 0.479242, 0, 1, 0, 0, 0.0158932, 0, 0.999874, 16.474, 0.999868, 0, -0.0162388, 0.495396, 0, 1, 0, 0, 0.0162388, 0, 0.999868, 15.4759, 0.999883, 0, -0.0153023, 0.51134, 0, 1, 0, 0, 0.0153023, 0, 0.999883, 14.4714, 0.999912, 0, -0.0132726, 0.525852, 0, 1, 0, 0, 0.0132726, 0, 0.999912, 13.4613, 0.999947, 0, -0.0103287, 0.537892, 0, 1, 0, 0, 0.0103287, 0, 0.999947, 12.4466, 0.999978, 0, -0.00662664, 0.546588, 0, 1, 0, 0, 0.00662664, 0, 0.999978, 11.4282, 0.999979, 0, 0.00645155, -9.45852, 0, 1, 0, 0, -0.00645155, 0, 0.999979, 9.6804, 0.999773, 0, 0.021308, -9.47207, 0, 1, 0, 0, -0.021308, 0, 0.999773, 8.7548, 0.999569, 0, 0.0293693, -9.49685, 0, 1, 0, 0, -0.0293693, 0, 0.999569, 7.79544, 0.99946, 0, 0.0328483, -9.52774, 0, 1, 0, 0, -0.0328483, 0, 0.99946, 6.81333, 0.999457, 0, 0.0329597, -9.56087, 0, 1, 0, 0, -0.0329597, 0, 0.999457, 5.81443, 0.999537, 0, 0.030415, -9.59316, 0, 1, 0, 0, -0.030415, 0, 0.999537, 4.80222, 0.999671, 0, 0.0256598, -9.62204, 0, 1, 0, 0, -0.0256598, 0, 0.999671, 3.77884, 0.99982, 0, 0.0189544, -9.64525, 0, 1, 0, 0, -0.0189544, 0, 0.99982, 2.74557, 0.999945, 0, 0.0104508, -9.66072, 0, 1, 0, 0, -0.0104508, 0, 0.999945, 1.70316, 1, 0, 0.000223214, -9.66647, 0, 1, 0, 0, -0.000223214, 0, 1, 0.652045, 0.999931, 0, -0.0117137, -9.66054, 0, 1, 0, 0, 0.0117137, 0, 0.999931, -0.407619, 0.999677, 0, -0.0254052, -9.64084, 0, 1, 0, 0, 0.0254052, 0, 0.999677, -1.4759, 0.999162, 0, -0.0409247, -9.60526, 0, 1, 0, 0, 0.0409247, 0, 0.999162, -2.55294, 0.998294, 0, -0.0583907, -9.55145, 0, 1, 0, 0, 0.0583907, 0, 0.998294, -3.63903, 0.996955, 0, -0.0779773, -9.47672, 0, 1, 0, 0, 0.0779773, 0, 0.996955, -4.73463, 0.995, 0, -0.0998713, -9.37826, 0, 1, 0, 0, 0.0998713, 0, 0.995, -5.84014, 0.99224, 0, -0.124337, -9.25256, 0, 1, 0, 0, 0.124337, 0, 0.99224, -6.95616, 0.988432, 0, -0.151662, -9.09576, 0, 1, 0, 0, 0.151662, 0, 0.988432, -8.08322, 0.983003, 0, -0.183587, -8.90191, 0, 1, 0, 0, 0.183587, 0, 0.983003, -9.22881, 0.962399, 0, -0.271641, -8.57097, 0, 1, 0, 0, 0.271641, 0, 0.962399, -10.6424, 0.93471, 0, -0.355411, -8.11847, 0, 1, 0, 0, 0.355411, 0, 0.93471, -12.0103, 0.90089, 0, -0.434047, -7.55429, 0, 1, 0, 0, 0.434047, 0, 0.90089, -13.3218, 0.862026, 0, -0.506864, -6.88905, 0, 1, 0, 0, 0.506864, 0, 0.862026, -14.5677, 0.819269, 0, -0.573409, -6.13455, 0, 1, 0, 0, 0.573409, 0, 0.819269, -15.7413, 0.773755, 0, -0.633486, -5.30307, 0, 1, 0, 0, 0.633486, 0, 0.773755, -16.8385, 0.726569, 0, -0.687093, -4.40616, 0, 1, 0, 0, 0.687093, 0, 0.726569, -17.8566, 0.678644, 0, -0.734468, -3.45528, 0, 1, 0, 0, 0.734468, 0, 0.678644, -18.7962, 0.630794, 0, -0.77595, -2.46028, 0, 1, 0, 0, 0.77595, 0, 0.630794, -19.6582, 0.583647, 0, -0.812007, -1.43014, 0, 1, 0, 0, 0.812007, 0, 0.583647, -20.4456, 0.537681, 0, -0.843148, -0.372482, 0, 1, 0, 0, 0.843148, 0, 0.537681, -21.162, 0.493273, 0, -0.869875, 0.706439, 0, 1, 0, 0, 0.869875, 0, 0.493273, -21.811, 0.450632, 0, -0.89271, 1.80123, 0, 1, 0, 0, 0.89271, 0, 0.450632, -22.3969, 0.409899, 0, -0.912131, 2.90759, 0, 1, 0, 0, 0.912131, 0, 0.409899, -22.9241, 0.371131, 0, -0.928581, 4.022, 0, 1, 0, 0, 0.928581, 0, 0.371131, -23.3968, 0.334338, 0, -0.942453, 5.14169, 0, 1, 0, 0, 0.942453, 0, 0.334338, -23.8187, 0.299483, 0, -0.954102, 6.26441, 0, 1, 0, 0, 0.954102, 0, 0.299483, -24.1936, 0.266504, 0, -0.963834, 7.3884, 0, 1, 0, 0, 0.963834, 0, 0.266504, -24.5252, 0.235328, 0, -0.971916, 8.51229, 0, 1, 0, 0, 0.971916, 0, 0.235328, -24.8163, 0.205856, 0, -0.978582, 9.635, 0, 1, 0, 0, 0.978582, 0, 0.205856, -25.0701, 0.178001, 0, -0.98403, 10.7557, 0, 1, 0, 0, 0.98403, 0, 0.178001, -25.2892, 0.151666, 0, -0.988432, 11.8737, 0, 1, 0, 0, 0.988432, 0, 0.151666, -25.4759, 0.126753, 0, -0.991934, 12.9885, 0, 1, 0, 0, 0.991934, 0, 0.126753, -25.6325, 0.103171, 0, -0.994664, 14.0998, 0, 1, 0, 0, 0.994664, 0, 0.103171, -25.761, 0.0808296, 0, -0.996728, 15.2072, 0, 1, 0, 0, 0.996728, 0, 0.0808296, -25.8632, 0.059652, 0, -0.998219, 16.3106, 0, 1, 0, 0, 0.998219, 0, 0.059652, -25.9408, 0.0395539, 0, -0.999217, 17.4099, 0, 1, 0, 0, 0.999217, 0, 0.0395539, -25.9953, 0.0204647, 0, -0.999791, 18.5048, 0, 1, 0, 0, 0.999791, 0, 0.0204647, -26.0281, -0.0107633, 0, -0.999942, 19.6609, 0, 1, 0, 0, 0.999942, 0, -0.0107633, -26.0348, -0.0433128, 0, -0.999062, 20.8233, 0, 1, 0, 0, 0.999062, 0, -0.0433128, -26.0032, -0.074128, 0, -0.997249, 21.9756, 0, 1, 0, 0, 0.997249, 0, -0.074128, -25.9353, -0.103411, 0, -0.994639, 23.118, 0, 1, 0, 0, 0.994639, 0, -0.103411, -25.8333, -0.13135, 0, -0.991336, 24.2507, 0, 1, 0, 0, 0.991336, 0, -0.13135, -25.6993, -0.158115, 0, -0.987421, 25.374, 0, 1, 0, 0, 0.987421, 0, -0.158115, -25.5349, -0.183869, 0, -0.982951, 26.488, 0, 1, 0, 0, 0.982951, 0, -0.183869, -25.3415, -0.208761, 0, -0.977967, 27.5929, 0, 1, 0, 0, 0.977967, 0, -0.208761, -25.1202, -0.232931, 0, -0.972493, 28.689, 0, 1, 0, 0, 0.972493, 0, -0.232931, -24.8719, -0.256515, 0, -0.96654, 29.7765, 0, 1, 0, 0, 0.96654, 0, -0.256515, -24.5975, -0.279637, 0, -0.960106, 30.8555, 0, 1, 0, 0, 0.960106, 0, -0.279637, -24.2971, -0.302425, 0, -0.953173, 31.9261, 0, 1, 0, 0, 0.953173, 0, -0.302425, -23.9714, -0.325, 0, -0.945714, 32.9885, 0, 1, 0, 0, 0.945714, 0, -0.325, -23.6204, -0.347485, 0, -0.937686, 34.0427, 0, 1, 0, 0, 0.937686, 0, -0.347485, -23.244, -0.370006, 0, -0.929029, 35.0887, 0, 1, 0, 0, 0.929029, 0, -0.370006, -22.842, -0.392691, 0, -0.91967, 36.1265, 0, 1, 0, 0, 0.91967, 0, -0.392691, -22.4139, -0.415684, 0, -0.909509, 37.1561, 0, 1, 0, 0, 0.909509, 0, -0.415684, -21.9589, -0.439127, 0, -0.898425, 38.1774, 0, 1, 0, 0, 0.898425, 0, -0.439127, -21.4761, -0.463187, 0, -0.886261, 39.1902, 0, 1, 0, 0, 0.886261, 0, -0.463187, -20.9643, -0.488048, 0, -0.872817, 40.1941, 0, 1, 0, 0, 0.872817, 0, -0.488048, -20.4215, -0.51391, 0, -0.857844, 41.1889, 0, 1, 0, 0, 0.857844, 0, -0.51391, -19.8457, -0.541007, 0, -0.841018, 42.174, 0, 1, 0, 0, 0.841018, 0, -0.541007, -19.2342, -0.569604, 0, -0.821919, 43.1487, 0, 1, 0, 0, 0.821919, 0, -0.569604, -18.5836, -0.600021, 0, -0.799984, 44.1119, 0, 1, 0, 0, 0.799984, 0, -0.600021, -17.8892, -0.632584, 0, -0.774491, 45.0623, 0, 1, 0, 0, 0.774491, 0, -0.632584, -17.1457, -0.667698, 0, -0.744432, 45.9978, 0, 1, 0, 0, 0.744432, 0, -0.667698, -16.3454, -0.705751, 0, -0.70846, 46.915, 0, 1, 0, 0, 0.70846, 0, -0.705751, -15.4791, -0.747105, 0, -0.664706, 47.8092, 0, 1, 0, 0, 0.664706, 0, -0.747105, -14.5342, -0.791957, 0, -0.610576, 48.6721, 0, 1, 0, 0, 0.610576, 0, -0.791957, -13.4943, -0.84001, 0, -0.542571, 49.4903, 0, 1, 0, 0, 0.542571, 0, -0.84001, -12.3386, -0.889928, 0, -0.456101, 50.2409, 0, 1, 0, 0, 0.456101, 0, -0.889928, -11.0413, -0.938258, 0, -0.345936, 50.8858, 0, 1, 0, 0, 0.345936, 0, -0.938258, -9.57608, -0.978167, 0, -0.207821, 51.3646, 0, 1, 0, 0, 0.207821, 0, -0.978167, -7.9262, -0.999092, 0, -0.0426166, 51.5965, 0, 1, 0, 0, 0.0426166, 0, -0.999092, -6.1095, -0.990303, 0, 0.138927, 51.505, 0, 1, 0, 0, -0.138927, 0, -0.990303, -4.20432, -0.94851, 0, 0.316747, 51.067, 0, 1, 0, 0, -0.316747, 0, -0.94851, -2.34328, -0.881819, 0, 0.471588, 50.3369, 0, 1, 0, 0, -0.471588, 0, -0.881819, -0.652431, -0.803929, 0, 0.594725, 49.4117, 0, 1, 0, 0, -0.594725, 0, -0.803929, 0.806583, -0.730421, 0, 0.682997, 48.4009, 0, 1, 0, 0, -0.682997, 0, -0.730421, 2.01287, -0.68759, 0, 0.726099, 47.4826, 0, 1, 0, 0, -0.726099, 0, -0.68759, 2.93822, -0.633085, 0, 0.774082, 46.4604, 0, 1, 0, 0, -0.774082, 0, -0.633085, 3.83957, -0.563848, 0, 0.825879, 45.3145, 0, 1, 0, 0, -0.825879, 0, -0.563848, 4.69837, -0.477283, 0, 0.87875, 44.0292, 0, 1, 0, 0, -0.87875, 0, -0.477283, 5.48466, -0.373016, 0, 0.927825, 42.604, 0, 1, 0, 0, -0.927825, 0, -0.373016, 6.15644, -0.255028, 0, 0.966934, 41.0657, 0, 1, 0, 0, -0.966934, 0, -0.255028, 6.66711, -0.132346, 0, 0.991204, 39.4719, 0, 1, 0, 0, -0.991204, 0, -0.132346, 6.98227, -0.0165498, 0, 0.999863, 37.8962, 0, 1, 0, 0, -0.999863, 0, -0.0165498, 7.09894, 0.08307, 0, 0.996544, 36.3991, 0, 1, 0, 0, -0.996544, 0, 0.08307, 7.04745, 0.162088, 0, 0.986776, 35.012, 0, 1, 0, 0, -0.986776, 0, 0.162088, 6.87419, 0.220294, 0, 0.975434, 33.7399, 0, 1, 0, 0, -0.975434, 0, 0.220294, 6.62452, 0.259647, 0, 0.965704, 32.5728, 0, 1, 0, 0, -0.965704, 0, 0.259647, 6.33442, 0.282609, 0, 0.959235, 31.4959, 0, 1, 0, 0, -0.959235, 0, 0.282609, 6.02974, 0.291203, 0, 0.956661, 30.4953, 0, 1, 0, 0, -0.956661, 0, 0.291203, 5.72882, 0.28722, 0, 0.957865, 29.5582, 0, 1, 0, 0, -0.957865, 0, 0.28722, 5.44462, 0.271759, 0, 0.962365, 28.6757, 0, 1, 0, 0, -0.962365, 0, 0.271759, 5.18669, 0.245598, 0, 0.969372, 27.8407, 0, 1, 0, 0, -0.969372, 0, 0.245598, 4.96225, 0.20948, 0, 0.977813, 27.0478, 0, 1, 0, 0, -0.977813, 0, 0.20948, 4.77615, 0.164135, 0, 0.986438, 26.2924, 0, 1, 0, 0, -0.986438, 0, 0.164135, 4.63174, 0.110592, 0, 0.993866, 25.5698, 0, 1, 0, 0, -0.993866, 0, 0.110592, 4.53064, 0.0501889, 0, 0.99874, 24.8753, 0, 1, 0, 0, -0.99874, 0, 0.0501889, 4.47417, -0.0151742, 0, 0.999885, 24.2024, 0, 1, 0, 0, -0.999885, 0, -0.0151742, 4.46205, -0.0833027, 0, 0.996524, 23.5445, 0, 1, 0, 0, -0.996524, 0, -0.0833027, 4.49439, -0.151882, 0, 0.988399, 22.8945, 0, 1, 0, 0, -0.988399, 0, -0.151882, 4.57141, -0.228021, 0, 0.973656, 22.2931, 0, 1, 0, 0, -0.973656, 0, -0.228021, 4.68491, -0.326216, 0, 0.945295, 21.8235, 0, 1, 0, 0, -0.945295, 0, -0.326216, 4.81937, -0.433449, 0, 0.901178, 21.4349, 0, 1, 0, 0, -0.901178, 0, -0.433449, 4.97791, -0.545607, 0, 0.838041, 21.1246, 0, 1, 0, 0, -0.838041, 0, -0.545607, 5.1518, -0.65595, 0, 0.754804, 20.8784, 0, 1, 0, 0, -0.754804, 0, -0.65595, 5.33705, -0.756583, 0, 0.653897, 20.6756, 0, 1, 0, 0, -0.653897, 0, -0.756583, 5.53959, -0.840902, 0, 0.541188, 20.4992, 0, 1, 0, 0, -0.541188, 0, -0.840902, 5.77648, -0.905626, 0, 0.424076, 20.3403, 0, 1, 0, 0, -0.424076, 0, -0.905626, 6.06587, -0.951064, 0, 0.308994, 20.201, 0, 1, 0, 0, -0.308994, 0, -0.951064, 6.4202, -0.979758, 0, 0.200187, 20.0908, 0, 1, 0, 0, -0.200187, 0, -0.979758, 6.84289, -0.995047, 0, 0.0994015, 20.018, 0, 1, 0, 0, -0.0994015, 0, -0.995047, 7.32731, -0.999977, 0, 0.00685796, 19.9903, 0, 1, 0, 0, -0.00685796, 0, -0.999977, 7.86286, -0.996934, 0, -0.0782512, 20.0111, 0, 1, 0, 0, 0.0782512, 0, -0.996934, 8.43635, -0.987595, 0, -0.15702, 20.0827, 0, 1, 0, 0, 0.15702, 0, -0.987595, 9.03521, -0.97301, 0, -0.230762, 20.2042, 0, 1, 0, 0, 0.230762, 0, -0.97301, 9.64718, -0.953719, 0, -0.300699, 20.3737, 0, 1, 0, 0, 0.300699, 0, -0.953719, 10.2612, -0.929845, 0, -0.367952, 20.5887, 0, 1, 0, 0, 0.367952, 0, -0.929845, 10.8672, -0.901145, 0, -0.433518, 20.8459, 0, 1, 0, 0, 0.433518, 0, -0.901145, 11.4553, -0.867018, 0, -0.498277, 21.1413, 0, 1, 0, 0, 0.498277, 0, -0.867018, 12.016, -0.826512, 0, -0.562919, 21.4695, 0, 1, 0, 0, 0.562919, 0, -0.826512, 12.5401, -0.778298, 0, -0.627895, 21.8237, 0, 1, 0, 0, 0.627895, 0, -0.778298, 13.0183, -0.720646, 0, -0.693303, 22.1959, 0, 1, 0, 0, 0.693303, 0, -0.720646, 13.4418, -0.651416, 0, -0.75872, 22.576, 0, 1, 0, 0, 0.75872, 0, -0.651416, 13.8016, -0.568437, 0, -0.822727, 22.9518, 0, 1, 0, 0, 0.822727, 0, -0.568437, 14.093, -0.498634, 0, -0.866813, 23.4536, 0, 1, 0, 0, 0.866813, 0, -0.498634, 14.3972, -0.49564, 0, -0.868528, 24.3065, 0, 1, 0, 0, 0.868528, 0, -0.49564, 14.8855, -0.495472, 0, -0.868624, 25.1744, 0, 1, 0, 0, 0.868624, 0, -0.495472, 15.3804, -0.497835, 0, -0.867272, 26.0542, 0, 1, 0, 0, 0.867272, 0, -0.497835, 15.8836, -0.502605, 0, -0.864516, 26.9441, 0, 1, 0, 0, 0.864516, 0, -0.502605, 16.3974, -0.509735, 0, -0.860332, 27.8423, 0, 1, 0, 0, 0.860332, 0, -0.509735, 16.9243, -0.519259, 0, -0.854617, 28.7475, 0, 1, 0, 0, 0.854617, 0, -0.519259, 17.4672, -0.531303, 0, -0.847182, 29.6588, 0, 1, 0, 0, 0.847182, 0, -0.531303, 18.0294, -0.546101, 0, -0.837719, 30.5754, 0, 1, 0, 0, 0.837719, 0, -0.546101, 18.6152, -0.563937, 0, -0.825818, 31.4966, 0, 1, 0, 0, 0.825818, 0, -0.563937, 19.2295, -0.58521, 0, -0.810882, 32.4217, 0, 1, 0, 0, 0.810882, 0, -0.58521, 19.8783, -0.610479, 0, -0.792032, 33.3498, 0, 1, 0, 0, 0.792032, 0, -0.610479, 20.5701, -0.640368, 0, -0.768068, 34.2798, 0, 1, 0, 0, 0.768068, 0, -0.640368, 21.315, -0.675646, 0, -0.737226, 35.2095, 0, 1, 0, 0, 0.737226, 0, -0.675646, 22.1267, -0.717131, 0, -0.696939, 36.1349, 0, 1, 0, 0, 0.696939, 0, -0.717131, 23.0239, -0.765424, 0, -0.643527, 37.0479, 0, 1, 0, 0, 0.643527, 0, -0.765424, 24.0317, -0.820394, 0, -0.571799, 37.9322, 0, 1, 0, 0, 0.571799, 0, -0.820394, 25.1827, -0.879887, 0, -0.475184, 38.7555, 0, 1, 0, 0, 0.475184, 0, -0.879887, 26.5157, -0.937779, 0, -0.347234, 39.459, 0, 1, 0, 0, 0.347234, 0, -0.937779, 28.0648, -0.982435, 0, -0.186604, 39.952, 0, 1, 0, 0, 0.186604, 0, -0.982435, 29.8297, -0.999993, 0, -0.00379913, 40.1357, 0, 1, 0, 0, 0.00379913, 0, -0.999993, 31.7376, -0.983973, 0, 0.178316, 39.9672, 0, 1, 0, 0, -0.178316, 0, -0.983973, 33.6428, -0.954666, 0, 0.297678, 39.5818, 0, 1, 0, 0, -0.297678, 0, -0.954666, 35.2101, -0.911384, 0, 0.411558, 39.0102, 0, 1, 0, 0, -0.411558, 0, -0.911384, 36.7136, -0.856243, 0, 0.516573, 38.2694, 0, 1, 0, 0, -0.516573, 0, -0.856243, 38.1232, -0.793296, 0, 0.608836, 37.3909, 0, 1, 0, 0, -0.608836, 0, -0.793296, 39.4098, -0.726844, 0, 0.686803, 36.4096, 0, 1, 0, 0, -0.686803, 0, -0.726844, 40.5598, -0.660435, 0, 0.750883, 35.3576, 0, 1, 0, 0, -0.750883, 0, -0.660435, 41.5737, -0.596451, 0, 0.802649, 34.26, 0, 1, 0, 0, -0.802649, 0, -0.596451, 42.4607, -0.536185, 0, 0.844101, 33.1346, 0, 1, 0, 0, -0.844101, 0, -0.536185, 43.234, -0.480221, 0, 0.877147, 31.9934, 0, 1, 0, 0, -0.877147, 0, -0.480221, 43.9069, -0.428563, 0, 0.903512, 30.8443, 0, 1, 0, 0, -0.903512, 0, -0.428563, 44.4928, -0.381, 0, 0.924575, 29.6921, 0, 1, 0, 0, -0.924575, 0, -0.381, 45.0026, -0.337181, 0, 0.94144, 28.5397, 0, 1, 0, 0, -0.94144, 0, -0.337181, 45.4457, -0.296704, 0, 0.954969, 27.3889, 0, 1, 0, 0, -0.954969, 0, -0.296704, 45.8301, -0.259203, 0, 0.965823, 26.2407, 0, 1, 0, 0, -0.965823, 0, -0.259203, 46.162, -0.22428, 0, 0.974525, 25.0958, 0, 1, 0, 0, -0.974525, 0, -0.22428, 46.4471, -0.19164, 0, 0.981465, 23.9545, 0, 1, 0, 0, -0.981465, 0, -0.19164, 46.6895, -0.160966, 0, 0.98696, 22.8168, 0, 1, 0, 0, -0.98696, 0, -0.160966, 46.8931, -0.132005, 0, 0.991249, 21.6827, 0, 1, 0, 0, -0.991249, 0, -0.132005, 47.0609, -0.10453, 0, 0.994522, 20.5524, 0, 1, 0, 0, -0.994522, 0, -0.10453, 47.1955, -0.0783523, 0, 0.996926, 19.4257, 0, 1, 0, 0, -0.996926, 0, -0.0783523, 47.2989, -0.0532937, 0, 0.998579, 18.3026, 0, 1, 0, 0, -0.998579, 0, -0.0532937, 47.3729, 0.0077951, 0, 0.99997, 16.9977, 0, 1, 0, 0, -0.99997, 0, 0.0077951, 47.4041, 0.066997, 0, 0.997753, 15.7025, 0, 1, 0, 0, -0.997753, 0, 0.066997, 47.3552, 0.120175, 0, 0.992753, 14.4412, 0, 1, 0, 0, -0.992753, 0, 0.120175, 47.2361, 0.168198, 0, 0.985753, 13.2117, 0, 1, 0, 0, -0.985753, 0, 0.168198, 47.0565, 0.211863, 0, 0.977299, 12.0117, 0, 1, 0, 0, -0.977299, 0, 0.211863, 46.8239, 0.251868, 0, 0.967762, 10.8391, 0, 1, 0, 0, -0.967762, 0, 0.251868, 46.5441, 0.288833, 0, 0.957379, 9.69164, 0, 1, 0, 0, -0.957379, 0, 0.288833, 46.2215, 0.323291, 0, 0.9463, 8.56745, 0, 1, 0, 0, -0.9463, 0, 0.323291, 45.8599, 0.355698, 0, 0.934601, 7.46492, 0, 1, 0, 0, -0.934601, 0, 0.355698, 45.4618, 0.386468, 0, 0.922303, 6.38258, 0, 1, 0, 0, -0.922303, 0, 0.386468, 45.0291, 0.415964, 0, 0.909381, 5.31922, 0, 1, 0, 0, -0.909381, 0, 0.415964, 44.5632, 0.444519, 0, 0.89577, 4.27382, 0, 1, 0, 0, -0.89577, 0, 0.444519, 44.0648, 0.472445, 0, 0.88136, 3.24557, 0, 1, 0, 0, -0.88136, 0, 0.472445, 43.5342, 0.500046, 0, 0.865999, 2.23379, 0, 1, 0, 0, -0.865999, 0, 0.500046, 42.9712, 0.527624, 0, 0.849478, 1.23806, 0, 1, 0, 0, -0.849478, 0, 0.527624, 42.3748, 0.555496, 0, 0.831519, 0.258057, 0, 1, 0, 0, -0.831519, 0, 0.555496, 41.7435, 0.584003, 0, 0.811752, -0.706276, 0, 1, 0, 0, -0.811752, 0, 0.584003, 41.0749, 0.613523, 0, 0.789677, -1.65483, 0, 1, 0, 0, -0.789677, 0, 0.613523, 40.3659, 0.644501, 0, 0.764603, -2.58712, 0, 1, 0, 0, -0.764603, 0, 0.644501, 39.6116, 0.677437, 0, 0.735581, -3.50229, 0, 1, 0, 0, -0.735581, 0, 0.677437, 38.8058, 0.712975, 0, 0.701189, -4.39872, 0, 1, 0, 0, -0.701189, 0, 0.712975, 37.9387, 0.751765, 0, 0.659431, -5.27374, 0, 1, 0, 0, -0.659431, 0, 0.751765, 36.9979, 0.794574, 0, 0.607167, -6.12222, 0, 1, 0, 0, -0.607167, 0, 0.794574, 35.9639, 0.842003, 0, 0.539473, -6.93429, 0, 1, 0, 0, -0.539473, 0, 0.842003, 34.8075, 0.893757, 0, 0.448552, -7.6895, 0, 1, 0, 0, -0.448552, 0, 0.893757, 33.4854, 0.946677, 0, 0.322183, -8.34283, 0, 1, 0, 0, -0.322183, 0, 0.946677, 31.933, 0.982413, 0, 0.186722, -8.76534, 0, 1, 0, 0, -0.186722, 0, 0.982413, 30.287, 0.987505, 0, 0.15759, -8.96287, 0, 1, 0, 0, -0.15759, 0, 0.987505, 29.1563, 0.991537, 0, 0.129825, -9.12657, 0, 1, 0, 0, -0.129825, 0, 0.991537, 28.0278, 0.994584, 0, 0.103934, -9.25853, 0, 1, 0, 0, -0.103934, 0, 0.994584, 26.9053, 0.996768, 0, 0.0803376, -9.36139, 0, 1, 0, 0, -0.0803376, 0, 0.996768, 25.7915, 0.998238, 0, 0.0593319, -9.43833, 0, 1, 0, 0, -0.0593319, 0, 0.998238, 24.6889, 0.999156, 0, 0.041074, -9.49288, 0, 1, 0, 0, -0.041074, 0, 0.999156, 23.5989, 0.999672, 0, 0.0256094, -9.52857, 0, 1, 0, 0, -0.0256094, 0, 0.999672, 22.5222, 0.999917, 0, 0.0128816, -9.54882, 0, 1, 0, 0, -0.0128816, 0, 0.999917, 21.4587, 0.999996, 0, 0.00275434, -9.55682, 0, 1, 0, 0, -0.00275434, 0, 0.999996, 20.4081, 0.999988, 0, -0.00496499, -9.5555, 0, 1, 0, 0, 0.00496499, 0, 0.999988, 19.3695, 0.999945, 0, -0.0104831, -9.54737, 0, 1, 0, 0, 0.0104831, 0, 0.999945, 18.342, 0.999901, 0, -0.014052, -9.53474, 0, 1, 0, 0, 0.014052, 0, 0.999901, 17.3242, 0.999874, 0, -0.0158932, -9.5195, 0, 1, 0, 0, 0.0158932, 0, 0.999874, 16.3151, 0.999868, 0, -0.0162388, -9.50329, 0, 1, 0, 0, 0.0162388, 0, 0.999868, 15.3135, 0.999883, 0, -0.0153023, -9.48749, 0, 1, 0, 0, 0.0153023, 0, 0.999883, 14.3183, 0.999912, 0, -0.0132726, -9.47327, 0, 1, 0, 0, 0.0132726, 0, 0.999912, 13.3286, 0.999947, 0, -0.0103287, -9.46157, 0, 1, 0, 0, 0.0103287, 0, 0.999947, 12.3433, 0.999978, 0, -0.00662664, -9.45319, 0, 1, 0, 0, 0.00662664, 0, 0.999978, 11.3619) + +[node name="Track" type="Path3D"] +curve = SubResource("Curve3D_3wmeb") +script = ExtResource("1_8qwqq") +tire_spacing = 1.0 + +[node name="Road" type="CSGPolygon3D" parent="."] +polygon = PackedVector2Array(-4.5, -0.1, -4.5, 0, -2.25, 0, 0, 0, 2.25, 0, 4.5, 0, 4.5, -0.1) +mode = 2 +path_node = NodePath("..") +path_interval_type = 0 +path_interval = 0.5 +path_simplify_angle = 5.0 +path_rotation = 2 +path_local = false +path_continuous_u = true +path_u_distance = 1.0 +path_joined = true +material = SubResource("StandardMaterial3D_w255p") + +[node name="LeftBarier" type="CSGPolygon3D" parent="."] +use_collision = true +polygon = PackedVector2Array(4.5, 0.1, 4.5, 0.3, 4.52, 0.3, 4.52, 0.1) +mode = 2 +path_node = NodePath("..") +path_interval_type = 0 +path_interval = 0.5 +path_simplify_angle = 0.0 +path_rotation = 2 +path_local = false +path_continuous_u = true +path_u_distance = 1.0 +path_joined = true + +[node name="RightBarier" type="CSGPolygon3D" parent="."] +use_collision = true +polygon = PackedVector2Array(-4.52, 0.1, -4.52, 0.3, -4.5, 0.3, -4.5, 0.1) +mode = 2 +path_node = NodePath("..") +path_interval_type = 0 +path_interval = 0.5 +path_simplify_angle = 0.0 +path_rotation = 2 +path_local = false +path_continuous_u = true +path_u_distance = 1.0 +path_joined = true + +[node name="Tirewall" type="MultiMeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.17, 0) +multimesh = SubResource("MultiMesh_tv7s7") diff --git a/xr/openxr_vehicle_movement/vehicle.gd b/xr/openxr_vehicle_movement/vehicle.gd new file mode 100644 index 00000000000..0f059ace7c8 --- /dev/null +++ b/xr/openxr_vehicle_movement/vehicle.gd @@ -0,0 +1,33 @@ +extends VehicleBody3D + +const MAX_STEERING_ANGLE : float = deg_to_rad(25) +const FORWARD_ACCELERATION : float = 50.0 +const BACKWARD_ACCELERATION : float = 20.0 +const BRAKE_FORCE : float = 2.0 +const MIN_VELOCITY : float = 1.0 + +var reverse = false + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + var steering_input : float = Input.get_axis("turn_left", "turn_right") + steering = steering_input * -MAX_STEERING_ANGLE + + var auto_brake_force : float = 0.0 + if linear_velocity.length() < MIN_VELOCITY: + auto_brake_force = 0.1 + if Input.is_action_just_pressed("brake"): + reverse = true + elif Input.is_action_just_pressed("accelerate"): + reverse = false + + if !reverse: + engine_force = Input.get_action_strength("accelerate") * FORWARD_ACCELERATION + brake = auto_brake_force + Input.get_action_strength("brake") * BRAKE_FORCE + else: + engine_force = Input.get_action_strength("brake") * -BACKWARD_ACCELERATION + brake = auto_brake_force + Input.get_action_strength("accelerate") * BRAKE_FORCE diff --git a/xr/openxr_vehicle_movement/vehicle.tscn b/xr/openxr_vehicle_movement/vehicle.tscn new file mode 100644 index 00000000000..c7eb36fcb20 --- /dev/null +++ b/xr/openxr_vehicle_movement/vehicle.tscn @@ -0,0 +1,103 @@ +[gd_scene load_steps=8 format=3 uid="uid://dkdk37kpjui3q"] + +[ext_resource type="Texture2D" uid="uid://rek0t7kubpx4" path="res://assets/pattern.png" id="1_7k3ts"] +[ext_resource type="Script" path="res://vehicle.gd" id="1_7ma2j"] + +[sub_resource type="BoxMesh" id="BoxMesh_074ve"] +size = Vector3(1, 0.1, 2.1) + +[sub_resource type="BoxShape3D" id="BoxShape3D_fiiud"] +size = Vector3(1, 0.1, 2.1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_prg4j"] +albedo_texture = ExtResource("1_7k3ts") + +[sub_resource type="CylinderMesh" id="CylinderMesh_s7fbg"] +material = SubResource("StandardMaterial3D_prg4j") +top_radius = 0.2 +bottom_radius = 0.2 +height = 0.1 +radial_segments = 16 + +[sub_resource type="SphereMesh" id="SphereMesh_pu3u7"] +radius = 0.1 +height = 0.2 + +[node name="VehicleBody3D" type="VehicleBody3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.2, 0) +script = ExtResource("1_7ma2j") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +mesh = SubResource("BoxMesh_074ve") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +shape = SubResource("BoxShape3D_fiiud") + +[node name="LeftForwardWheel" type="VehicleWheel3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.6, 0, 0.9) +use_as_steering = true +wheel_radius = 0.2 +wheel_rest_length = 0.0 +suspension_travel = 0.01 +suspension_stiffness = 500.0 +suspension_max_force = 10000.0 +damping_compression = 0.95 +damping_relaxation = 0.95 + +[node name="MeshInstance3D" type="MeshInstance3D" parent="LeftForwardWheel"] +transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0) +mesh = SubResource("CylinderMesh_s7fbg") + +[node name="RightForwardWheel" type="VehicleWheel3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.6, 0, 0.9) +use_as_steering = true +wheel_radius = 0.2 +wheel_rest_length = 0.0 +suspension_travel = 0.01 +suspension_stiffness = 500.0 +suspension_max_force = 10000.0 +damping_compression = 0.95 +damping_relaxation = 0.95 + +[node name="MeshInstance3D" type="MeshInstance3D" parent="RightForwardWheel"] +transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0) +mesh = SubResource("CylinderMesh_s7fbg") + +[node name="LeftBackWheel" type="VehicleWheel3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.6, 0, -0.9) +use_as_traction = true +wheel_radius = 0.2 +wheel_rest_length = 0.0 +suspension_travel = 0.01 +suspension_stiffness = 500.0 +suspension_max_force = 10000.0 +damping_compression = 0.95 +damping_relaxation = 0.95 + +[node name="MeshInstance3D" type="MeshInstance3D" parent="LeftBackWheel"] +transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0) +mesh = SubResource("CylinderMesh_s7fbg") + +[node name="RightBackWheel" type="VehicleWheel3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.6, 0, -0.9) +use_as_traction = true +wheel_radius = 0.2 +wheel_rest_length = 0.0 +suspension_travel = 0.01 +suspension_stiffness = 500.0 +suspension_max_force = 10000.0 +damping_compression = 0.95 +damping_relaxation = 0.95 + +[node name="MeshInstance3D" type="MeshInstance3D" parent="RightBackWheel"] +transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0) +mesh = SubResource("CylinderMesh_s7fbg") + +[node name="XROrigin3D" type="XROrigin3D" parent="."] +transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0.784301, -0.477039) + +[node name="XRCamera3D" type="XRCamera3D" parent="XROrigin3D"] + +[node name="MeshInstance3D2" type="MeshInstance3D" parent="."] +transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0.784301, -0.477039) +mesh = SubResource("SphereMesh_pu3u7")