Add tips to OriginHands and interpolation

This commit is contained in:
rodolpheh 2023-11-13 08:15:17 +00:00
parent 8b932e3a3c
commit f56398230a
2 changed files with 29 additions and 1 deletions

View File

@ -6,6 +6,7 @@ extends Node3D
@export var skeleton : Skeleton3D
@export var ex_map : RigMap
@export var rig_settings : RigSettings
@export var use_interpolation : bool = true
var wrist_pos : Vector3
var transform_offset : Transform3D = Transform3D.IDENTITY
@ -34,6 +35,10 @@ func _process(_delta):
return
var frame : UltraleapFrame = tracking.get_last_frame()
if use_interpolation:
var interpolated_frame : UltraleapFrame = tracking.get_interpolated_frame(Time.get_ticks_usec())
if interpolated_frame != null:
frame = interpolated_frame
if handedness == UltraleapTypes.Chirality.Left:
if frame.is_left_hand_visible:

View File

@ -2,6 +2,7 @@ extends Node3D
class_name OriginHands
@export var tracking : UltraleapDeviceNode
@export var use_interpolation : bool = true
var gizmos : Array[Node3D] = []
var dry_run : bool = false
@ -24,7 +25,16 @@ func _ready():
gizmos.append(instance)
func _process(_delta):
var n : int = set_hand(tracking.get_last_frame().left_hand, 0)
var n : int = 0
if use_interpolation:
var interpolated_frame : UltraleapFrame = tracking.get_interpolated_frame(Time.get_ticks_usec())
if interpolated_frame != null:
n = set_hand(interpolated_frame.left_hand, n)
n = set_hand(interpolated_frame.right_hand, n)
return
n = set_hand(tracking.get_last_frame().left_hand, n)
n = set_hand(tracking.get_last_frame().right_hand, n)
func set_hand(hand : UltraleapHand, index : int) -> int:
@ -45,6 +55,7 @@ func set_finger(finger_name : String, hand : UltraleapHand, index : int) -> int:
index = set_bone("proximal", finger, index)
index = set_bone("intermediate", finger, index)
index = set_bone("distal", finger, index)
index = set_tip(finger, index)
return index
@ -60,6 +71,18 @@ func set_bone(bone_name : String, finger : UltraleapDigit, index : int):
gizmos[index].global_transform = bone_transform
return index + 1
func set_tip(finger : UltraleapDigit, index : int) -> int:
if dry_run:
return index + 1
var tip_transform : Transform3D = tracking.global_transform * Transform3D(
Basis(finger.get("distal").rotation),
finger.get("distal").next_joint
)
gizmos[index].global_transform = tip_transform
return index + 1
func set_arm(hand : UltraleapHand, index : int) -> int:
if dry_run:
return index + 2