Compare commits

..

No commits in common. "3f823111d14f410a05b8ee9559548125b3473d43" and "b54c78da1985d303556c80109e057891015303b3" have entirely different histories.

10 changed files with 44 additions and 119 deletions

View file

@ -1,11 +0,0 @@
---
---
```sh
[you@yourpc uvrpn]$ vrpn_server -f addons/vrpn/tests/vrpn.test.cfg
Reading from config file addons/vrpn/tests/vrpn.test.cfg
Opening vrpn_Tracker_Spin: Tracker0 with 1 sensors, rate 200.000000
Opening vrpn_Tracker_Spin: Tracker1 with 1 sensors, rate 200.000000
Opening vrpn_Tracker_Spin: Tracker2 with 1 sensors, rate 200.000000
Opening vrpn_Button_Example: Button0 with 2 sensors, toggle rate 2.000000
```

View file

@ -1,7 +1,7 @@
[gd_scene load_steps=5 format=3 uid="uid://en7tpf1d6yak"] [gd_scene load_steps=5 format=3 uid="uid://en7tpf1d6yak"]
[ext_resource type="Script" uid="uid://dmq3i7qmo1qe0" path="res://addons/vrpn/scripts/VRPN.gd" id="1_jrm7s"] [ext_resource type="Script" uid="uid://dmq3i7qmo1qe0" path="res://addons/vrpn/scripts/VRPN.gd" id="1_jrm7s"]
[ext_resource type="Script" uid="uid://dpj1wrvfsiq4v" path="res://addons/vrpn/scripts/VRPN_Tracker.gd" id="2_fp2uy"] [ext_resource type="Script" uid="uid://dpj1wrvfsiq4v" path="res://addons/vrpn/scripts/VRPN_Receiver.gd" id="2_fp2uy"]
[ext_resource type="PackedScene" uid="uid://b426fy7d6jw2d" path="res://addons/vrpn/assets/axis.blend" id="3_73ywu"] [ext_resource type="PackedScene" uid="uid://b426fy7d6jw2d" path="res://addons/vrpn/assets/axis.blend" id="3_73ywu"]
[sub_resource type="PlaneMesh" id="PlaneMesh_24d08"] [sub_resource type="PlaneMesh" id="PlaneMesh_24d08"]
@ -19,21 +19,20 @@ shadow_enabled = true
[node name="Root" type="Node3D" parent="."] [node name="Root" type="Node3D" parent="."]
[node name="VRPN" type="Node3D" parent="Root"] [node name="VRPN" type="Node3D" parent="Root" node_paths=PackedStringArray("tracker_receivers")]
script = ExtResource("1_jrm7s") script = ExtResource("1_jrm7s")
tracker_receivers = [NodePath("RB1"), NodePath("RB2")]
vrpn_server = "212.201.64.122" vrpn_server = "212.201.64.122"
[node name="RB1" type="Node3D" parent="Root/VRPN" node_paths=PackedStringArray("vrpn")] [node name="RB1" type="Node3D" parent="Root/VRPN"]
script = ExtResource("2_fp2uy") script = ExtResource("2_fp2uy")
vrpn = NodePath("..")
tracker_name = "RB1" tracker_name = "RB1"
[node name="axis" parent="Root/VRPN/RB1" instance=ExtResource("3_73ywu")] [node name="axis" parent="Root/VRPN/RB1" instance=ExtResource("3_73ywu")]
transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, 0) transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, 0)
[node name="RB2" type="Node3D" parent="Root/VRPN" node_paths=PackedStringArray("vrpn")] [node name="RB2" type="Node3D" parent="Root/VRPN"]
script = ExtResource("2_fp2uy") script = ExtResource("2_fp2uy")
vrpn = NodePath("..")
tracker_name = "RB2" tracker_name = "RB2"
[node name="axis" parent="Root/VRPN/RB2" instance=ExtResource("3_73ywu")] [node name="axis" parent="Root/VRPN/RB2" instance=ExtResource("3_73ywu")]

View file

@ -1,9 +1,8 @@
[gd_scene load_steps=6 format=3 uid="uid://bj5ykdjle10tt"] [gd_scene load_steps=5 format=3 uid="uid://bj5ykdjle10tt"]
[ext_resource type="Script" uid="uid://dmq3i7qmo1qe0" path="res://addons/vrpn/scripts/VRPN.gd" id="2_24d08"] [ext_resource type="Script" uid="uid://dmq3i7qmo1qe0" path="res://addons/vrpn/scripts/VRPN.gd" id="2_24d08"]
[ext_resource type="Script" uid="uid://dpj1wrvfsiq4v" path="res://addons/vrpn/scripts/VRPN_Tracker.gd" id="2_170dk"] [ext_resource type="Script" uid="uid://dpj1wrvfsiq4v" path="res://addons/vrpn/scripts/VRPN_Receiver.gd" id="2_170dk"]
[ext_resource type="PackedScene" uid="uid://b426fy7d6jw2d" path="res://addons/vrpn/assets/axis.blend" id="3_170dk"] [ext_resource type="PackedScene" uid="uid://b426fy7d6jw2d" path="res://addons/vrpn/assets/axis.blend" id="3_170dk"]
[ext_resource type="Script" uid="uid://bmlyip5xa5df4" path="res://addons/vrpn/scripts/VRPN_Button.gd" id="4_j4l28"]
[sub_resource type="PlaneMesh" id="PlaneMesh_24d08"] [sub_resource type="PlaneMesh" id="PlaneMesh_24d08"]
size = Vector2(6, 2) size = Vector2(6, 2)
@ -19,8 +18,9 @@ shadow_enabled = true
[node name="Root" type="Node3D" parent="."] [node name="Root" type="Node3D" parent="."]
[node name="VRPN" type="Node3D" parent="Root"] [node name="VRPN" type="Node3D" parent="Root" node_paths=PackedStringArray("tracker_receivers")]
script = ExtResource("2_24d08") script = ExtResource("2_24d08")
tracker_receivers = [NodePath("../SpinTracker/Offset0/Tracker0"), NodePath("../SpinTracker/Tracker1"), NodePath("../SpinTracker/Offset2/Tracker2")]
[node name="Floor" type="MeshInstance3D" parent="Root"] [node name="Floor" type="MeshInstance3D" parent="Root"]
mesh = SubResource("PlaneMesh_24d08") mesh = SubResource("PlaneMesh_24d08")
@ -28,9 +28,8 @@ mesh = SubResource("PlaneMesh_24d08")
[node name="SpinTracker" type="Node3D" parent="Root"] [node name="SpinTracker" type="Node3D" parent="Root"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.764802, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.764802, 0)
[node name="Tracker1" type="Node3D" parent="Root/SpinTracker" node_paths=PackedStringArray("vrpn")] [node name="Tracker1" type="Node3D" parent="Root/SpinTracker"]
script = ExtResource("2_170dk") script = ExtResource("2_170dk")
vrpn = NodePath("../../VRPN")
tracker_name = "Tracker1" tracker_name = "Tracker1"
tracker_use_position = false tracker_use_position = false
@ -44,9 +43,8 @@ text = "Y-Axis"
[node name="Offset2" type="Node3D" parent="Root/SpinTracker"] [node name="Offset2" type="Node3D" parent="Root/SpinTracker"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0)
[node name="Tracker2" type="Node3D" parent="Root/SpinTracker/Offset2" node_paths=PackedStringArray("vrpn")] [node name="Tracker2" type="Node3D" parent="Root/SpinTracker/Offset2"]
script = ExtResource("2_170dk") script = ExtResource("2_170dk")
vrpn = NodePath("../../../VRPN")
tracker_name = "Tracker2" tracker_name = "Tracker2"
tracker_use_position = false tracker_use_position = false
@ -60,9 +58,8 @@ text = "Z-Axis"
[node name="Offset0" type="Node3D" parent="Root/SpinTracker"] [node name="Offset0" type="Node3D" parent="Root/SpinTracker"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0, 0)
[node name="Tracker0" type="Node3D" parent="Root/SpinTracker/Offset0" node_paths=PackedStringArray("vrpn")] [node name="Tracker0" type="Node3D" parent="Root/SpinTracker/Offset0"]
script = ExtResource("2_170dk") script = ExtResource("2_170dk")
vrpn = NodePath("../../../VRPN")
tracker_use_position = false tracker_use_position = false
[node name="axis" parent="Root/SpinTracker/Offset0/Tracker0" instance=ExtResource("3_170dk")] [node name="axis" parent="Root/SpinTracker/Offset0/Tracker0" instance=ExtResource("3_170dk")]
@ -71,7 +68,3 @@ transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, 0)
[node name="Label3D" type="Label3D" parent="Root/SpinTracker/Offset0/Tracker0"] [node name="Label3D" type="Label3D" parent="Root/SpinTracker/Offset0/Tracker0"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.769847, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.769847, 0)
text = "X-Axis" text = "X-Axis"
[node name="Button0" type="Node3D" parent="Root/SpinTracker" node_paths=PackedStringArray("vrpn")]
script = ExtResource("4_j4l28")
vrpn = NodePath("../../VRPN")

View file

@ -1,9 +1,8 @@
class_name VRPN
extends Node extends Node
class_name VRPN
# tracking associated data # tracking associated data
enum TrackingDataType { POS_QUAT, VELOCITY, ACCELERATION } enum TrackingDataType { POS_QUAT, VELOCITY, ACCELERATION }
enum ButtonDataType { BUTTON_STATE, BUTTON_CHANGE }
# magic cookie # magic cookie
const magic_cookie_start : String = "vrpn: ver." const magic_cookie_start : String = "vrpn: ver."
@ -19,14 +18,14 @@ signal data(data:Array)
signal disconnected signal disconnected
signal error(msg:String) signal error(msg:String)
@export var vrpn_server : String = "127.0.0.1"
@export var vrpn_port : int = 3883
var tracker : Array[VRPN_Tracker] = []
var buttons : Array[VRPN_Button] = []
@onready var _stream: StreamPeerTCP = StreamPeerTCP.new() @onready var _stream: StreamPeerTCP = StreamPeerTCP.new()
@export var tracker_receivers : Array[VRPN_Receiver] = []
@export var vrpn_server : String = "127.0.0.1"
@export var vrpn_port : int = 3883
func _ready() -> void: func _ready() -> void:
self.connect_to_host(vrpn_server,vrpn_port) self.connect_to_host(vrpn_server,vrpn_port)
@ -176,8 +175,8 @@ static func marshall_body(data : PackedByteArray,message_type : int, sender_id:
# VRPN quat layout and Godot Quaternion c'tor identical with x,y,z,w # VRPN quat layout and Godot Quaternion c'tor identical with x,y,z,w
var quat = Quaternion(body.get_double(),body.get_double(),body.get_double(),body.get_double()).normalized() var quat = Quaternion(body.get_double(),body.get_double(),body.get_double(),body.get_double()).normalized()
# submit to listener # submit to listener
for r in session.tracker: for r in session.tracker_receivers:
r._on_vrpn({ r._on_tracker({
"type" : TrackingDataType.POS_QUAT, "type" : TrackingDataType.POS_QUAT,
"tracker" : session.sensors[sender_id], "tracker" : session.sensors[sender_id],
"sensor" : sensor_id, "sensor" : sensor_id,
@ -193,8 +192,8 @@ static func marshall_body(data : PackedByteArray,message_type : int, sender_id:
# VRPN quat layout and Godot Quaternion c'tor identical with x,y,z,w # VRPN quat layout and Godot Quaternion c'tor identical with x,y,z,w
var vel_rot = Quaternion(body.get_double(),body.get_double(),body.get_double(),body.get_double()).normalized() var vel_rot = Quaternion(body.get_double(),body.get_double(),body.get_double(),body.get_double()).normalized()
# submit to listener # submit to listener
for r in session.tracker: for r in session.tracker_receivers:
r._on_vrpn({ r._on_tracker({
"type" : TrackingDataType.VELOCITY, "type" : TrackingDataType.VELOCITY,
"tracker" : session.sensors[sender_id], "tracker" : session.sensors[sender_id],
"sensor" : sensor_id, "sensor" : sensor_id,
@ -212,8 +211,8 @@ static func marshall_body(data : PackedByteArray,message_type : int, sender_id:
var acc_dt = body.get_double() # padding var acc_dt = body.get_double() # padding
# submit to listener # submit to listener
for r in session.tracker: for r in session.tracker_receivers:
r._on_vrpn({ r._on_tracker({
"type" : TrackingDataType.ACCELERATION, "type" : TrackingDataType.ACCELERATION,
"tracker" : session.sensors[sender_id], "tracker" : session.sensors[sender_id],
"sensor" : sensor_id, "sensor" : sensor_id,
@ -221,25 +220,6 @@ static func marshall_body(data : PackedByteArray,message_type : int, sender_id:
"acceleration_rotation" : acc_rot, "acceleration_rotation" : acc_rot,
"acceleration_dt" : acc_dt "acceleration_dt" : acc_dt
}) })
'vrpn_Button Change':
var num_buttons : int = body.get_32()
var button_changes : Dictionary = {}
for i in range(num_buttons):
button_changes[i] = body.get_32()
for button in session.buttons:
button._on_vrpn(
{
"type" : ButtonDataType.BUTTON_CHANGE,
"sensor" : session.sensors[sender_id],
"changes" : button_changes
}
)
'vrpn_Button States':
var num_buttons : int = body.get_32()
for i in range(num_buttons):
var button_state = body.get_32()
#print("button state {0} : {1}".format([i,button_state]))
_: _:
pass pass

View file

@ -1,18 +0,0 @@
class_name VRPN_Button
extends Node
@export var vrpn : VRPN = null
@export var button_sensor : String = "Button0"
@export var register_on_start : bool = true
var state : int = 0
func _ready():
if not vrpn:
push_warning("No VRPN client for button on '%s' given." % [self.name])
elif register_on_start:
vrpn.buttons.append(self)
func _on_vrpn(vrpn_data : Dictionary) -> void:
if vrpn_data['sensor'] == button_sensor:
pass

View file

@ -1 +0,0 @@
uid://bmlyip5xa5df4

View file

@ -0,0 +1,20 @@
extends Node3D
class_name VRPN_Receiver
@export var tracker_name : String = "Tracker0"
@export var tracker_sensor : int = 0
@export var tracker_use_position : bool = true
@export var tracker_use_rotation : bool = true
func _on_tracker(tracker_data : Dictionary):
match tracker_data['type'] as VRPN.TrackingDataType:
VRPN.TrackingDataType.POS_QUAT:
if tracker_data['tracker'] == tracker_name and tracker_data['sensor'] == tracker_sensor:
if tracker_use_position:
self.global_position = tracker_data['position']
if tracker_use_rotation:
var rotation := tracker_data['rotation'] as Quaternion
self.global_basis = Basis(rotation)
_:
push_warning("unknown tracker datatype")

View file

@ -1,33 +0,0 @@
class_name VRPN_Tracker
extends Node3D
@export var vrpn : VRPN = null
@export var tracker_name : String = "Tracker0"
@export var tracker_sensor : int = 0
@export var tracker_use_position : bool = true
@export var tracker_use_rotation : bool = true
@export var register_on_start : bool = true
func _ready() -> void:
if vrpn and register_on_start:
vrpn.tracker.append(self)
func _on_vrpn(vrpn_data : Dictionary):
match vrpn_data['type'] as VRPN.TrackingDataType:
VRPN.TrackingDataType.POS_QUAT:
if vrpn_data['tracker'] == tracker_name and vrpn_data['sensor'] == tracker_sensor:
if tracker_use_position:
self.global_position = vrpn_data['position']
if tracker_use_rotation:
var rotation := vrpn_data['rotation'] as Quaternion
self.global_basis = Basis(rotation)
VRPN.TrackingDataType.ACCELERATION:
pass
VRPN.TrackingDataType.VELOCITY:
pass
_:
push_warning("unknown tracker datatype")
func _on_vrpn_connected(s):
pass # Replace with function body.

View file

@ -14,7 +14,3 @@ config/name="uvrpn"
run/main_scene="uid://bj5ykdjle10tt" run/main_scene="uid://bj5ykdjle10tt"
config/features=PackedStringArray("4.4", "Forward Plus") config/features=PackedStringArray("4.4", "Forward Plus")
config/icon="uid://cdprcmtx102rp" config/icon="uid://cdprcmtx102rp"
[rendering]
anti_aliasing/quality/screen_space_aa=1