@@ -72,36 +72,13 @@ void XRCamera3D::_removed_tracker(const StringName &p_tracker_name, int p_tracke
7272
7373void XRCamera3D::_pose_changed (const Ref<XRPose> &p_pose) {
7474 if (p_pose->get_name () == pose_name) {
75- Node3D *parent = Object::cast_to<Node3D>(get_parent ());
76-
77- if (is_inside_tree () && parent && parent->is_physics_interpolated_and_enabled () && !is_set_as_top_level () && !is_physics_interpolated ()) {
78- pose_offset = p_pose->get_adjusted_transform ();
79- } else {
80- set_transform (p_pose->get_adjusted_transform ());
81- }
75+ set_transform (p_pose->get_adjusted_transform ());
8276 }
8377}
8478
85- void XRCamera3D::_notification (int p_what) {
86- switch (p_what) {
87- case NOTIFICATION_ENTER_TREE: {
88- if (!Engine::get_singleton ()->is_editor_hint ()) {
89- set_desired_process_modes (true , false );
90- }
91- } break ;
92-
93- case NOTIFICATION_INTERNAL_PROCESS: {
94- if (!is_inside_tree () || is_physics_interpolated () || Engine::get_singleton ()->is_editor_hint ()) {
95- break ;
96- }
97-
98- Node3D *parent = Object::cast_to<Node3D>(get_parent ());
99-
100- if (parent && parent->is_physics_interpolated_and_enabled () && !is_set_as_top_level ()) {
101- set_global_transform (parent->get_global_transform_interpolated () * pose_offset);
102- }
103- } break ;
104- }
79+ void XRCamera3D::_physics_interpolated_changed () {
80+ Camera3D::_physics_interpolated_changed ();
81+ update_configuration_warnings ();
10582}
10683
10784PackedStringArray XRCamera3D::get_configuration_warnings () const {
@@ -114,6 +91,10 @@ PackedStringArray XRCamera3D::get_configuration_warnings() const {
11491 if (parent && origin == nullptr ) {
11592 warnings.push_back (RTR (" XRCamera3D may not function as expected without an XROrigin3D node as its parent." ));
11693 };
94+
95+ if (is_physics_interpolated ()) {
96+ warnings.push_back (RTR (" XRCamera3D should have physics_interpolation_mode set to OFF in order to avoid jitter." ));
97+ }
11798 }
11899
119100 return warnings;
@@ -431,13 +412,7 @@ void XRNode3D::_removed_tracker(const StringName &p_tracker_name, int p_tracker_
431412
432413void XRNode3D::_pose_changed (const Ref<XRPose> &p_pose) {
433414 if (p_pose.is_valid () && p_pose->get_name () == pose_name) {
434- Node3D *parent = Object::cast_to<Node3D>(get_parent ());
435-
436- if (is_inside_tree () && parent && parent->is_physics_interpolated_and_enabled () && !is_set_as_top_level () && !is_physics_interpolated ()) {
437- pose_offset = p_pose->get_adjusted_transform ();
438- } else {
439- set_transform (p_pose->get_adjusted_transform ());
440- }
415+ set_transform (p_pose->get_adjusted_transform ());
441416 _set_has_tracking_data (p_pose->get_has_tracking_data ());
442417 }
443418}
@@ -477,26 +452,8 @@ void XRNode3D::_update_visibility() {
477452 }
478453}
479454
480- void XRNode3D::_notification (int p_what) {
481- switch (p_what) {
482- case NOTIFICATION_ENTER_TREE: {
483- if (!Engine::get_singleton ()->is_editor_hint ()) {
484- set_process_internal (true );
485- }
486- } break ;
487-
488- case NOTIFICATION_INTERNAL_PROCESS: {
489- if (!is_inside_tree () || is_physics_interpolated () || Engine::get_singleton ()->is_editor_hint ()) {
490- break ;
491- }
492-
493- Node3D *parent = Object::cast_to<Node3D>(get_parent ());
494-
495- if (parent && parent->is_physics_interpolated_and_enabled () && !is_set_as_top_level ()) {
496- set_global_transform (parent->get_global_transform_interpolated () * pose_offset);
497- }
498- } break ;
499- }
455+ void XRNode3D::_physics_interpolated_changed () {
456+ update_configuration_warnings ();
500457}
501458
502459XRNode3D::XRNode3D () {
@@ -540,6 +497,10 @@ PackedStringArray XRNode3D::get_configuration_warnings() const {
540497 if (pose_name == " " ) {
541498 warnings.push_back (RTR (" No pose is set." ));
542499 }
500+
501+ if (is_physics_interpolated ()) {
502+ warnings.push_back (RTR (" XRNode3D should have physics_interpolation_mode set to OFF in order to avoid jitter." ));
503+ }
543504 }
544505
545506 return warnings;
0 commit comments