Compare commits
2 Commits
0c50394a66
...
56c5ee15e0
Author | SHA1 | Date |
---|---|---|
rodolpheh | 56c5ee15e0 | |
rodolpheh | d5ed6a0d32 |
17
SConstruct
17
SConstruct
|
@ -16,6 +16,8 @@ env = SConscript("godot-cpp/SConstruct")
|
|||
# tweak this if you want to use different folders, or more folders, to store your source code in.
|
||||
env.Append(CPPPATH=["src/"])
|
||||
sources = Glob("src/*.cpp")
|
||||
post_actions = []
|
||||
library = None
|
||||
|
||||
if env["platform"] == "macos":
|
||||
target = "demo/addons/godot_ultraleap_plugin/bin/libgdultraleap.{}.{}.framework/libgdultraleap.{}.{}".format(
|
||||
|
@ -51,6 +53,10 @@ elif env["platform"] == "windows":
|
|||
env.Append(LIBS=['LeapC'])
|
||||
env.Append(LIBPATH = ['C:/Program Files/Ultraleap/LeapSDK/lib/x64'])
|
||||
env.Append(CPPPATH = ["C:/Program Files/Ultraleap/LeapSDK/include"])
|
||||
|
||||
post_actions = [
|
||||
Copy("demo/addons/godot_ultraleap_plugin/bin/LeapC.dll", "C:/Program Files/Ultraleap/LeapSDK/lib/x64/LeapC.dll")
|
||||
]
|
||||
elif env["platform"] == "android":
|
||||
library = env.SharedLibrary(
|
||||
"demo/addons/godot_ultraleap_plugin/bin/libgdultraleap{}{}".format(env["suffix"], env["SHLIBSUFFIX"]),
|
||||
|
@ -69,9 +75,6 @@ elif env["platform"] == "android":
|
|||
Copy("demo/android/plugins/ultraleap_binder/ultraleap-binder-debug.aar", "godot-ultraleap-binder/ultraleap-binder/build/outputs/aar/ultraleap-binder-debug.aar"),
|
||||
Copy("demo/addons/godot_ultraleap_plugin/bin/libLeapC.so", "android/libLeapC.so")
|
||||
]
|
||||
|
||||
for post_action in post_actions:
|
||||
AddPostAction(library, post_action)
|
||||
else:
|
||||
library = env.SharedLibrary(
|
||||
"demo/addons/godot_ultraleap_plugin/bin/libgdultraleap{}{}".format(env["suffix"], env["SHLIBSUFFIX"]),
|
||||
|
@ -80,4 +83,10 @@ else:
|
|||
env.Append(LIBS=['LeapC'])
|
||||
env.Append(LIBPATH = ['/usr/lib/ultraleap-hand-tracking-service'])
|
||||
|
||||
Default(library)
|
||||
if library is not None:
|
||||
for post_action in post_actions:
|
||||
AddPostAction(library, post_action)
|
||||
|
||||
Default(library)
|
||||
else:
|
||||
print("Nothing to build, weird")
|
|
@ -16,6 +16,7 @@ android.release.arm64 = "bin/libgdultraleap.android.template_release.arm64.so"
|
|||
|
||||
[dependencies]
|
||||
|
||||
android.debug.arm64 = {
|
||||
"bin/libLeapC.so": ""
|
||||
}
|
||||
android.debug.arm64 = { "bin/libLeapC.so": "" }
|
||||
android.release.arm64 = { "bin/libLeapC.so": "" }
|
||||
windows.debug.x86_64 = { "bin/LeapC.dll": "" }
|
||||
windows.release.x86_64 = { "bin/LeapC.dll": "" }
|
|
@ -86,7 +86,7 @@ name="Android"
|
|||
platform="Android"
|
||||
runnable=true
|
||||
dedicated_server=false
|
||||
custom_features=""
|
||||
custom_features="openxr"
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
|
@ -104,6 +104,10 @@ gradle_build/use_gradle_build=true
|
|||
gradle_build/export_format=0
|
||||
gradle_build/min_sdk="29"
|
||||
gradle_build/target_sdk=""
|
||||
plugins/GodotOpenXRMeta=false
|
||||
plugins/GodotOpenXRLynx=false
|
||||
plugins/GodotOpenXRKHR=false
|
||||
plugins/GodotOpenXRPico=true
|
||||
plugins/UltraleapBinder=true
|
||||
architectures/armeabi-v7a=false
|
||||
architectures/arm64-v8a=true
|
||||
|
|
|
@ -11,7 +11,7 @@ config_version=5
|
|||
[application]
|
||||
|
||||
config/name="UltraleapPluginDemo"
|
||||
run/main_scene="res://main.tscn"
|
||||
run/main_scene="res://scenes/RiggedHand.tscn"
|
||||
config/features=PackedStringArray("4.1", "Forward Plus")
|
||||
config/icon="res://icon.svg"
|
||||
|
||||
|
@ -84,9 +84,15 @@ paths=["res://addons/godot_ultraleap_plugin/godot_ultraleap_plugin.gdextension"]
|
|||
[physics]
|
||||
|
||||
common/physics_ticks_per_second=120
|
||||
3d/default_gravity=0.0
|
||||
|
||||
[rendering]
|
||||
|
||||
textures/vram_compression/import_etc2_astc=true
|
||||
lights_and_shadows/directional_shadow/soft_shadow_filter_quality=5
|
||||
anti_aliasing/quality/msaa_3d=3
|
||||
|
||||
[xr]
|
||||
|
||||
openxr/enabled.openxr=true
|
||||
shaders/enabled.openxr=true
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
[gd_scene format=3 uid="uid://bnd6tg32nxvmv"]
|
||||
|
||||
[node name="Player" type="Node3D"]
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.903336, 0.428935, 0, -0.428935, 0.903336, 0, 0.33, 0.355)
|
||||
near = 0.001
|
|
@ -0,0 +1,11 @@
|
|||
[gd_scene format=3 uid="uid://cjktnaeh5lf7n"]
|
||||
|
||||
[node name="XRPlayer" type="Node3D"]
|
||||
|
||||
[node name="XROrigin3D" type="XROrigin3D" parent="."]
|
||||
|
||||
[node name="XRCamera3D" type="XRCamera3D" parent="XROrigin3D"]
|
||||
near = 0.001
|
||||
|
||||
[node name="DeviceContainer" type="Node3D" parent="XROrigin3D/XRCamera3D"]
|
||||
transform = Transform3D(-1, 0, -8.74228e-08, 8.74228e-08, -4.37114e-08, -1, -3.82137e-15, -1, 4.37114e-08, 0, 0, 0)
|
|
@ -188,6 +188,7 @@ radius = 0.00197651
|
|||
height = 0.0197651
|
||||
|
||||
[node name="RiggedHand" type="Node3D" node_paths=PackedStringArray("origin_hands", "rigged_hands", "spawner")]
|
||||
process_mode = 4
|
||||
script = ExtResource("1_58k8d")
|
||||
origin_hands = NodePath("HandTracking/Debug/OriginHands")
|
||||
rigged_hands = NodePath("Scene/XRToolsHands")
|
||||
|
@ -852,10 +853,6 @@ shape = SubResource("CapsuleShape3D_yy4pl")
|
|||
visible = false
|
||||
update_mode = 1
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.903336, 0.428935, 0, -0.428935, 0.903336, 0, 0.33, 0.355)
|
||||
near = 0.001
|
||||
|
||||
[node name="HandTracking" type="Node3D" parent="."]
|
||||
|
||||
[node name="UltraleapHandTracking" type="UltraleapHandTracking" parent="HandTracking"]
|
||||
|
@ -863,7 +860,6 @@ script = ExtResource("1_r2upn")
|
|||
|
||||
[node name="UltraleapDeviceNode" type="UltraleapDeviceNode" parent="HandTracking"]
|
||||
tracker = NodePath("../UltraleapHandTracking")
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.252083, 0, 0)
|
||||
|
||||
[node name="HandRiggers" type="Node3D" parent="HandTracking"]
|
||||
|
||||
|
|
|
@ -4,6 +4,37 @@ extends Node3D
|
|||
@export var rigged_hands : Node3D
|
||||
@export var spawner : CubeSpawner
|
||||
@export var cube_material : PhysicsMaterial
|
||||
@export var xr : bool = true
|
||||
|
||||
var xr_interface: XRInterface
|
||||
|
||||
func _ready():
|
||||
if not xr:
|
||||
var player : Resource = load("res://scenes/Players/Player.tscn")
|
||||
var player_node : Node3D = player.instantiate()
|
||||
add_child(player_node)
|
||||
|
||||
return
|
||||
xr_interface = XRServer.find_interface("OpenXR")
|
||||
if xr_interface and xr_interface.is_initialized():
|
||||
print("OpenXR initialised successfully")
|
||||
|
||||
var player : Resource = load("res://scenes/Players/XRPlayer.tscn")
|
||||
var player_node : Node3D = player.instantiate()
|
||||
add_child(player_node)
|
||||
|
||||
var source : UltraleapDeviceNode = $HandTracking/UltraleapDeviceNode
|
||||
var target : Node3D = player_node.get_node("XROrigin3D").get_node("XRCamera3D").get_node("DeviceContainer")
|
||||
|
||||
source.reparent(target, false)
|
||||
|
||||
# Turn off v-sync!
|
||||
DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED)
|
||||
|
||||
# Change our main viewport to output to the HMD
|
||||
get_viewport().use_xr = true
|
||||
else:
|
||||
print("OpenXR not initialized, please check if your headset is connected")
|
||||
|
||||
func disable_gravity():
|
||||
PhysicsServer3D.area_set_param(get_viewport().find_world_3d().space, PhysicsServer3D.AREA_PARAM_GRAVITY, 0)
|
||||
|
|
|
@ -53,7 +53,10 @@ func _physics_process(delta):
|
|||
var left_hand : UltraleapHand = left_hand_pinch_detector.hand
|
||||
var right_hand : UltraleapHand = right_hand_pinch_detector.hand
|
||||
|
||||
var dist : float = left_hand.thumb.distal.next_joint.distance_to(right_hand.thumb.distal.next_joint)
|
||||
#var dist : float = left_hand.thumb.distal.next_joint.distance_to(right_hand.thumb.distal.next_joint)
|
||||
var dist : float = left_hand_pinch_detector.pinch_transform.origin.distance_to(
|
||||
right_hand_pinch_detector.pinch_transform.origin
|
||||
)
|
||||
|
||||
# Detect when they just got pinched
|
||||
if !both_pinched && dist <= pinch_distance:
|
||||
|
@ -81,10 +84,14 @@ func _physics_process(delta):
|
|||
var size : float = clamp(dist - size_offset, min_cube_size, max_cube_size)
|
||||
|
||||
spawn_size = Vector3(size, size, size)
|
||||
spawn_position = (right_hand.thumb.distal.next_joint + left_hand.thumb.distal.next_joint) / 2
|
||||
|
||||
var line : Vector3 = right_hand.thumb.distal.next_joint - left_hand.thumb.distal.next_joint
|
||||
|
||||
#spawn_position = (right_hand.thumb.distal.next_joint + left_hand.thumb.distal.next_joint) / 2
|
||||
spawn_position = left_hand_pinch_detector.pinch_transform.interpolate_with(
|
||||
right_hand_pinch_detector.pinch_transform, 0.5
|
||||
).origin
|
||||
|
||||
#var line : Vector3 = right_hand.thumb.distal.next_joint - left_hand.thumb.distal.next_joint
|
||||
var line : Vector3 = right_hand_pinch_detector.pinch_transform.origin - left_hand_pinch_detector.pinch_transform.origin
|
||||
|
||||
# Meh... Calculating the euler angles. Feels like it could be better...
|
||||
var z_angle : float = -atan2(line.y, line.x)
|
||||
var y_angle : float = -atan2(line.z, line.x)
|
||||
|
|
|
@ -50,8 +50,9 @@ func _process(_delta):
|
|||
skeleton.hide()
|
||||
|
||||
func set_hand(hand : UltraleapHand):
|
||||
transform_offset = tracking.global_transform.inverse()
|
||||
if rig_settings.set_arm:
|
||||
transform_offset = set_arm(hand)
|
||||
transform_offset *= set_arm(hand)
|
||||
if rig_settings.set_palm:
|
||||
set_palm(hand)
|
||||
|
||||
|
|
|
@ -14,6 +14,8 @@ signal unpinched
|
|||
var is_pinched : bool = false
|
||||
var hand : UltraleapHand = null
|
||||
|
||||
var pinch_transform : Transform3D = Transform3D.IDENTITY
|
||||
|
||||
func _ready():
|
||||
pass
|
||||
|
||||
|
@ -36,6 +38,11 @@ func _process(_delta):
|
|||
|
||||
var pinch_strength : float = hand.pinch_strength
|
||||
|
||||
var pinch_position : Vector3 = (hand.index.distal.next_joint + hand.thumb.distal.next_joint) / 2.0
|
||||
var pinch_base : Basis = Basis(hand.thumb.distal.rotation.slerp(hand.index.distal.rotation, 0.5))
|
||||
|
||||
pinch_transform = tracking.global_transform * Transform3D(pinch_base, pinch_position)
|
||||
|
||||
if pinch_strength > pinch_threshold && !is_pinched:
|
||||
is_pinched = true
|
||||
pinched.emit()
|
||||
|
@ -46,5 +53,6 @@ func _process(_delta):
|
|||
|
||||
if debug:
|
||||
display.set_pinch_strength(pinch_strength)
|
||||
display.set_pinch_position((hand.index.distal.next_joint + hand.thumb.distal.next_joint) / 2.0)
|
||||
display.set_pinch_rotation(hand.thumb.distal.rotation.slerp(hand.index.distal.rotation, 0.5))
|
||||
display.set_pinch_position(pinch_transform.origin)
|
||||
display.set_pinch_rotation(pinch_transform.basis.get_rotation_quaternion())
|
||||
|
||||
|
|
Loading…
Reference in New Issue